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

Python测验程序错误猜测次数始终显示0的原因排查

错误次数始终为0的原因及修复方案

核心原因

Python中整数属于不可变数据类型,函数参数传递时是按值传递(传递的是变量的副本)。你在new_game里定义的wrong_guess是整数,当把它传给check_answer函数时,函数内部拿到的只是它的一个副本,而非原变量本身。在check_answer里执行wrong_guess += 1,只是修改了这个局部副本的值,完全不会影响new_game函数中原来的wrong_guess变量,所以外部打印时始终显示初始值0。

修复方案

方案1:让函数返回正确标记和错误增量(推荐)

修改check_answer函数,同时返回是否答对的标记和错误次数的增量,在new_game中分别更新两个统计值:

def new_game():
    wrong_guess = 0
    correct_guess = 0
    question_num = 1

    print("10-Question Automated Quiz")
    print("Developed by: Wesly Farillon")

    for key in questions:
        print("-------------------------------------------------")
        print("Question:", key)
        print("\nChoices:")
        for i in answers[question_num - 1]:
            print(i)
        guess = input("\nType your Answer here: ")
        guess = guess.upper()      

        # 接收返回的正确增量和错误增量
        correct_add, wrong_add = check_answer(questions.get(key), guess)
        correct_guess += correct_add
        wrong_guess += wrong_add
        question_num += 1

        print("Score: ", correct_guess)
        print("Wrong: ", wrong_guess)

def check_answer(answer, guess):
    if answer == guess:
        return 1, 0
    else:
        return 0, 1

方案2:用可变类型包裹错误次数

利用列表这种可变类型的特性,修改列表内部元素会影响外部变量:

def new_game():
    wrong_guess = [0]  # 用列表包裹整数,变成可变类型
    correct_guess = 0
    question_num = 1

    print("10-Question Automated Quiz")
    print("Developed by: Wesly Farillon")

    for key in questions:
        print("-------------------------------------------------")
        print("Question:", key)
        print("\nChoices:")
        for i in answers[question_num - 1]:
            print(i)
        guess = input("\nType your Answer here: ")
        guess = guess.upper()      

        correct_guess += check_answer(questions.get(key), guess, wrong_guess)
        question_num += 1

        print("Score: ", correct_guess)
        print("Wrong: ", wrong_guess[0])  # 读取列表第一个元素

def check_answer(answer, guess, wrong_guess):
    if answer == guess:
        return 1
    else:
        wrong_guess[0] += 1  # 修改列表内部元素
        return 0

方案3:使用全局变量(不推荐)

虽然可以实现,但会破坏代码的模块化,不建议在复杂程序中使用:

wrong_guess = 0  # 定义全局变量

def new_game():
    global wrong_guess  # 声明使用全局变量
    wrong_guess = 0
    correct_guess = 0
    question_num = 1

    print("10-Question Automated Quiz")
    print("Developed by: Wesly Farillon")

    for key in questions:
        print("-------------------------------------------------")
        print("Question:", key)
        print("\nChoices:")
        for i in answers[question_num - 1]:
            print(i)
        guess = input("\nType your Answer here: ")
        guess = guess.upper()      

        correct_guess += check_answer(questions.get(key), guess)
        question_num += 1

        print("Score: ", correct_guess)
        print("Wrong: ", wrong_guess)

def check_answer(answer, guess):
    global wrong_guess
    if answer == guess:
        return 1
    else:
        wrong_guess += 1
        return 0

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.16 21:45:37