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

Python测验游戏项目故障求助:无法识别答案及触发报错

Python测验游戏异常排查与修复

问题现象

  1. 无法区分正确与错误答案,选择正确选项也会被判定错误;
  2. 显示正确答案时无法展示猜测内容,触发TypeError: 'int' object is not iterable错误。

错误信息

RESULTS
---------------------
Answers: B B C D
Guesses: Traceback (most recent call last):
  File "c:\Users\Segundinho\Documents\Programação\Python\Learning\quiz game.py", line 104, in <module>
    new_game()
  File "c:\Users\Segundinho\Documents\Programação\Python\Learning\quiz game.py", line 27, in new_game
    display_score(correct_guesses, guesses)
  File "c:\Users\Segundinho\Documents\Programação\Python\Learning\quiz game.py", line 58, in display_score
    for item in guesses:
TypeError: 'int' object is not iterable

错误原因与修复步骤

1. 参数顺序颠倒导致类型错误

  • 问题:display_score函数定义的参数顺序是(guesses, correct_guesses),但调用时传的是display_score(correct_guesses, guesses),导致函数内guesses变量实际接收的是整数类型的correct_guesses,循环遍历时报错。
  • 修复:调整调用时的参数顺序为display_score(guesses, correct_guesses)。

2. 字符串方法未执行导致答案匹配失败

  • 问题:guess = guess.upper未加括号,实际赋值的是upper方法对象而非转换后的字符串,导致和答案字符串永远不相等;同理play_again函数里的response = response.lower也存在相同问题。
  • 修复:改为guess = guess.upper()和response = response.lower(),执行字符串大小写转换方法。

3. 答案校验传参错误+分数累加逻辑错误

  • 问题:调用check_answer时传入的是guesses列表而非当前的guess,且correct_guesses = check_answer(...)会每次覆盖分数,而非累加正确次数;同时correct_guesses: 0是类型注解,未实际初始化变量。
  • 修复:
    • 初始化correct_guesses为0:correct_guesses = 0;
    • 调用check_answer时传入当前猜测guess:correct_guesses += check_answer(questions.get(key), guess)。

4. 循环条件错误导致无法正确重启游戏

  • 问题:while play_again:使用函数对象作为条件,永远为True,无法根据用户输入判断是否重启;且play_again函数内未处理输入空格等情况,健壮性不足。
  • 修复:改为while play_again(),调用函数获取返回值;同时增加strip()处理输入空格。

完整修复代码

def new_game():
    guesses = []
    correct_guesses = 0  # 修复:初始化变量,替换类型注解
    question_num = 1

    for key in questions:
        print("\n\n")
        print(key)

        for item in options[question_num-1]:
            print(item)

        guess = input("Enter A, B, C or D: ")
        guess = guess.upper()  # 修复:执行upper()方法转换大小写
        
        guesses.append(guess)
        question_num += 1

        # 修复:传入当前guess而非guesses列表,累加正确次数
        correct_guesses += check_answer(questions.get(key), guess)

    # 修复:调整参数顺序,匹配函数定义
    display_score(guesses, correct_guesses)


def check_answer(answer, guess):
    if answer == guess:
        print("CORRECT! NICE")
        return 1 
    else:
        print("\n\nNooo, it's wrong")
        return 0  # 修复:统一返回值位置,避免逻辑歧义


def display_score(guesses, correct_guesses):
    print("---------------------")
    print("RESULTS")
    print("---------------------")

    print("Answers: ", end="")
    for i in questions:
        print(questions.get(i), end=" ")
    print()

    print("Guesses: ", end="")
    for item in guesses:
        print(item, end=" ")
    print()
    
    score = int((correct_guesses/len(questions)) * 100)
    print(f"Your score is: {score}%")  # 优化:使用f-string更简洁


def play_again():
    response = input("Do you wanna play again? (yes or no?): ").strip().lower()  # 修复:执行lower()方法,增加strip()处理空格
    return response == "yes"


questions = {
    "Qual a data de nascimento de Second?": "B",
    "Qual o ditador favorito de Packat?": "B",
    "Qual a segunda lei da termodinâmica?": "C",
    "Qual a melhor obra asiática já feita?": "D"
}

options = [
    ["A. 25/12/2004", "B. 31/03/2004", "C. 31/04/2003", "D. 21/06/2003"],
    ["A. Josef Stalin", "B. Nicolás Maduro", "C. Xin Jin Ping", "D. Kim Jon Un"],
    ["A. Ação e reação", "B. Princípio da Conservação de Energia", "C. Entropia", "D. Princípio da Incerteza"],
    ["A. Naruto", "B. HunterxHunter", "C. One Piece", "D. Solo Leveling"]
]

new_game()

while play_again():  # 修复:调用函数获取返回值作为循环条件
    new_game()

print("Byeeee")

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.03 23:55:28