Python编写Quiz类正确答案计数方法时总返回满分问题排查
核心问题
你错误使用了Python的or逻辑运算符:
在Python的布尔判定规则中,非空字符串、非零数值等对象都会被判定为True。你写的条件answers[0].lower() == 'a' or '(a)'会被拆分为两个独立的判断项,只要任意一项为真,整个条件就成立。其中第二项'(a)'是固定的非空字符串,永远为真,所以不管用户输入的答案是什么,这个if条件永远触发,计数器加1。三个if判断都存在相同问题,所以最终永远返回满分。
修正方案
方案1:补全or两侧的完整判断逻辑
def check_answers(self, answers): correct_answers_counter = 0 if answers[0].lower() == 'a' or answers[0].lower() == '(a)': correct_answers_counter += 1 if answers[1].lower() == 'c' or answers[1].lower() == '(c)': correct_answers_counter += 1 if answers[2].lower() == 'b' or answers[2].lower() == '(b)': correct_answers_counter += 1 self.show_results(correct_answers_counter)
方案2:用in运算符简化判断(更推荐,可读性更高)
def check_answers(self, answers): correct_answers_counter = 0 if answers[0].lower() in ('a', '(a)'): correct_answers_counter += 1 if answers[1].lower() in ('c', '(c)'): correct_answers_counter += 1 if answers[2].lower() in ('b', '(b)'): correct_answers_counter += 1 self.show_results(correct_answers_counter)
可选优化
如果后续题目数量增加,可提前定义正确答案配置,通过循环批量判断,减少重复代码:
def check_answers(self, answers): # 按题目顺序存储每道题的合法正确答案 correct_config = [('a', '(a)'), ('c', '(c)'), ('b', '(b)')] correct_answers_counter = 0 for user_input, valid_answers in zip(answers, correct_config): if user_input.lower() in valid_answers: correct_answers_counter += 1 self.show_results(correct_answers_counter)
内容的提问来源于stack exchange,提问作者Haifisch
相关产品推荐
相关产品推荐

