You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.05 13:24:01