我正在尝试创建一个类,该类获取投票问题和投票选项,并返回元组中每个选项的总票数。但是,我无法获得我在__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")
那么这将引发一个例外。