如何在Python中实现支持多正确答案的单选问答测验功能
多答案单选问答功能修复方案
存在的问题
- 类型不匹配:
input()函数返回值为字符串类型,原代码中存储的正确答案是整数列表,二者直接比较永远不成立,因此得分始终为0 - 判断逻辑错误:单答案场景用相等判断即可,多答案场景需要判断用户输入是否属于正确答案集合,不能直接和列表判等
- 语法缩进错误:原代码中
__init__方法没有缩进、得分打印语句放在quiz函数外部,score是函数内局部变量,外部访问会直接触发未定义报错
修正后完整代码
class Question: # 修正__init__方法缩进问题 def __init__(self, prompt, answer): self.prompt = prompt self.answer = answer question_prompts = [ "如果月亮是蓝色请按1,如果是白色请按2\n", "如果苹果是紫色请按1,如果是红色请按2\n", "输入1或2都对\n" ] # 正确答案统一用字符串类型,和input返回值类型匹配,避免类型转换报错 correct_answers = [ ["1", "2"], ["2"], ["1", "2"] ] questions = [ Question(question_prompts[0], correct_answers[0]), Question(question_prompts[1], correct_answers[1]), Question(question_prompts[2], correct_answers[2]), ] def quiz(questions): score = 0 for question in questions: user_input = input(question.prompt) # 多答案判断逻辑:用户输入属于正确答案列表就算对 if user_input in question.answer: score += 1 # 打印逻辑移到函数内部,循环结束后执行 print("你最终得分是 ", score, "/", len(questions)) quiz(questions)
可选优化
如果你希望保留整数类型的正确答案,只需要把用户输入转换为整数即可,修改代码如下,注意用户输入非数字时会触发报错,适合后续加了输入校验的场景:
# 把输入行替换为这行即可 user_input = int(input(question.prompt))
内容的提问来源于stack exchange,提问作者Wood
相关产品推荐
相关产品推荐

