我正在做一个是/否问题的测验,根据问题回答是/否会奖励不同数量的分数,在每个问题之后,这些分数将被添加到总数中并在最后显示。
但是,测验中有大约 50 个问题,这意味着大量的 if/else 语句。有没有一种方法可以使用字典和循环或类似的东西来显着减少程序的长度?
edit 这重复了很多次是我试图避免的。我正在考虑在每个问题后添加一个变量 i 并向其添加 1,然后查找下一个问题的索引。但这是否只有列表才有可能?
print "The following are y/n questions."
total = 0
q1 = raw_input("Do you exercise daily? ")
if q1 == "y":
total += 1
else:
total = total
print total
请您参考如下方法:
创建字典列表。每个元素都是一个问题以及是和否的分值。然后您可以轻松地遍历列表。
qa = [{"question": "Do you exercise?", "yes": 10, "no": 0},
"question": "Do you smoke?", "yes": -10, "no": 0},
...
]
for item in qa.items():
answer = raw_input("Do you exercise daily? ")
score = item.get(answer)
total = total + score
当然,您需要添加一些额外的代码来处理用户没有按字面意思回答"is"或“否”的情况,但这不会影响此解决方案。重点是,您创建一个表示问题的对象,以及可能的答案和分数,然后迭代这些对象的列表。
您甚至可以更进一步,创建自定义类。你可以这样做,例如:
class Question(object):
def __init__(self, question, yes=0, no=0):
self.question = question
self.yes = yes
self.no = no
questions = [Question("Do you exercise?", yes=10, no=0),
Question("Do you smoke?", yes=0, no=-10),
...
]
for question in questions:
answer = raw_input(question.question)
...
