【问题标题】:Create object from several lists从多个列表创建对象
【发布时间】:2016-01-17 11:11:58
【问题描述】:

我正在尝试使用我创建的两个列表的条目来创建我的班级 Member 的对象:

class Member:
   __name = ""
   __dayoff = ""

amount = int(input()) #amount of members
peplist = [] #list with all the names
dolist = [] #list with all the days off

for i in range(0, amount):
   print('\n')
   print('type in a persons name please!')
   name = input()
   peplist.append(name)
   daycheck()

我的函数daycheck() 看起来像这样:

def daycheck():
   print('type in', name, "'s day off, please!")
   dayoff = input()
   if (dayoff == 'monday') or (dayoff == 'tuesday') or (dayoff == 'wednesday') or (dayoff == 'thursday') or (dayoff == 'friday') or (dayoff == 'saturday') or (dayoff == 'sunday'):
       print(name, "'s dayoff is", dayoff, '!!!')
       dolist.append(dayoff)
   else:
       print("I don't know this day! Please try again!")
       daycheck()

现在想用两个列表中的namedayoff 属性创建我的类Member() 的对象,例如:

for i in range(0, amount):
   Member[i] = Member(peplist[i], dolist[i])

显然,这个 for 循环不起作用,但有什么方法可以创建具有类似属性表单列表的对象?

【问题讨论】:

  • Nit: dayoff == 'monday' or 'tuesday' or 'wednesday' or 'thursday' or 'friday' or 'saturday' or 'sunday' 始终为真...
  • @kennytm 除非您输入的日期不存在,在这种情况下,该功能会要求您重复该过程。如果你输入例如星期一,那么星期一在 dolist 是安全的
  • 我现在明白你的意思并编辑它谢谢!

标签: python list class object


【解决方案1】:

我认为这应该更接近您的意图:

class Member:
    def __init__(self, name, dayoff):
        self.name = name
        self.dayoff = dayoff

peplist = ['A', 'B', 'C']
dolist = ['monday', 'tuesday', 'thursday']

members = [Member(name, dayoff) for name, dayoff in zip(peplist, dolist)] 

让我们看看里面是什么:

for member in members:
    print(member.name, member.dayoff)

打印:

A monday
B tuesday
C thursday

这个函数daycheck会更好用:

def daycheck(name, dolist):
    days = ['monday', 'tuesday', 'wednesday','thursday', 'friday',
            'saturday', 'sunday']
    print('type in', name, "'s day off, please!")
    dayoff = input()
    if dayoff.strip().lower() in days:
        print(name, "'s dayoff is", dayoff, '!!!')
        dolist.append(dayoff)
    else:
        print("I don't know this day! Please try again!")
        daycheck(name, dolist)

daycheck('A', dolist)

【讨论】:

  • 我明白了,但它正在创建此错误消息:AttributeError: 'Member' object has no attribute 'dayoff'
  • 杀了我,我发现了一个错字!它现在可以工作了,感谢一百万!
  • 您编辑的函数现在返回此错误消息:TypeError: daycheck() 缺少 2 个必需的位置参数:'name' 和 'dolist'!我通过将 daycheck(name, dolist) 更改为 daycheck() 来让它工作
  • 你是不是这样称呼daycheck(name, dolist)
  • 我一开始是这样做的,但它返回了一个错误,所以我尝试将其更改为 daycheck(): 使用空括号,它工作得很好。再次感谢
猜你喜欢
  • 2011-10-25
  • 1970-01-01
  • 2019-02-21
  • 1970-01-01
  • 1970-01-01
  • 2011-09-07
  • 2017-06-26
  • 2019-10-26
  • 1970-01-01
相关资源
最近更新 更多