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

Python程序while循环逻辑错误导致得分统计异常问题求助

问题诊断与修复

你的程序核心问题出在ten_questions函数的逻辑上:

  • 第一题的答题结果被存在correct_answers变量里,但后续循环中,每次调用question_generator都没有捕获它的返回值,反而一直用第一题的结果来判断是否加分。
  • 循环条件num_of_questions <=8会执行9次循环,加上之前的第一题刚好是10题,但循环内的加分逻辑完全错误,只根据第一题的结果重复加减分。

另外question_generator函数也有逻辑漏洞:只有第一次答对才返回True,后续答对没有返回值,会导致后续题目无法统计正确结果。

具体修复步骤

  1. 修正question_generator的返回逻辑:无论第一次还是后续答对,都返回True;如果三次答错,返回False,确保每道题的结果都能被正确捕获。
  2. 重构ten_questions的循环逻辑:用循环直接生成10道题,每道题都捕获答题结果,根据结果累加分数,不需要单独处理第一题。

修正后的完整代码

import random

def main():
    ten_questions()

def get_level():
    while True:
        try:
            level_input = int(input("Level: "))
            if level_input in [1,2,3]:
                return level_input
        except:
            pass

def integer_generator(level):
    if level == 1:
        x = random.randint(0,9)
        y = random.randint(0,9)
    elif level == 2:
        x = random.randint(10, 99)
        y = random.randint(10, 99)
    else:
        x = random.randint(100, 999)
        y = random.randint(100, 999)
    return x, y

def question_generator(x, y):
    real_answer = x + y
    wrong_counter = 0
    while True:
        try:
            answer_given = input(f"{x} + {y} = ")
            answer_int = int(answer_given)
            if answer_int == real_answer:
                return True
            else:
                if wrong_counter < 2:
                    print("EEE")
                    wrong_counter +=1
                else:
                    print(f"{x} + {y} = {real_answer}")
                    print("False, that was last attempt")
                    return False
        except ValueError:
            print("EEE")
            pass

def ten_questions():
    total_correct_answers = 0
    my_level = get_level()
    for _ in range(10):
        x, y = integer_generator(my_level)
        if question_generator(x, y):
            total_correct_answers +=1
    print(f"Score: {total_correct_answers}")

if __name__ == "__main__":
    main()

修复说明

  • question_generator现在统一返回True(答对)或False(答错),确保每道题的结果都能被正确统计。
  • ten_questions用for _ in range(10)直接生成10道题,每道题都调用question_generator并根据返回值加分,逻辑清晰且准确。
  • 优化了字符串拼接为f-string,代码更简洁。

内容的提问来源于stack exchange,提问作者Dave

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.24 23:33:22