在类__init__中增加字典值?



我正在尝试创建一个类,该类获取投票问题和投票选项,并返回元组中每个选项的总票数。但是,我无法获得我在__init__中设置的字典来保留以前实例的投票。

这是我的代码:

class Poll:
def __init__(self, question, options):
self.question = question
self.options = options
self.votes = {}
def vote(self, option):
if option in self.votes:
self.votes[option] += 1
else: 
self.votes[option] = 1
return True
def get_votes(self):
vote_list = [(key, value) for key, value in self.votes.items()]
return vote_list

vote_1 = Poll("What is your favorite fruit?", ["Apple", "Banana"])
vote_1.vote("Apple")
vote_2 = Poll("What is your favorite fruit?", ["Apple", "Banana"])
vote_2.vote("Banana")
vote_3 = Poll("What is your favorite fruit?", ["Apple", "Banana"])
vote_3.vote("Apple")
print(vote_1.get_votes())
print(vote_2.get_votes())
print(vote_3.get_votes())

这就是我得到的:

[('Apple', 1)]
[('Banana', 1)]
[('Apple', 1)]

这就是我想要得到的:

[('Apple', 1]
[('Apple', 1), ('Banana', 1)]    
[('Apple', 2), ('Banana', 1)]

我无法设置"vote"函数来返回投票,因为它必须返回True

我想我需要另一个函数来保存字典,但我不确定该怎么做。

代码几乎正确。Poll类本身很好,但随后您将为每个投票单独实例化它,而不是每次都在同一实例上调用vote方法。 您需要做的就是:

poll = Poll("What is your favorite fruit?", ["Apple", "Banana"])
poll.vote("Apple")
print(poll.get_votes())
poll.vote("Banana")
print(poll.get_votes())
poll.vote("Apple")
print(poll.get_votes())

尽管您也可以考虑使用循环,而不是重复代码:

poll = Poll("What is your favorite fruit?", ["Apple", "Banana"])
for option in "Apple", "Banana", "Apple":
poll.vote(option)
print(poll.get_votes())

顺便说一下,我向Poll类建议的一个改进(尽管与问题没有直接关系(是,除了将其分配给随后未使用self.options之外,options并没有真正被使用。 您可以在vote方法中使用它来强制人们不要对不是选项之一的内容进行投票。 例如,如果该方法以以下内容开头:

def vote(self, option):
if option not in self.options:
raise ValueError("you are not allowed to vote on {}"
.format(option))        
# do other stuff

然后在实例化后使用:

poll = Poll("What is your favorite fruit?", ["Apple", "Banana"])

你做到了:

poll.vote("Cheese")

那么这将引发一个例外。

最新更新