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

如何限制用户错误答题次数?Python算术题代码优化及输入处理

问题分析与修复方案

原代码存在的逻辑问题

  • 错误次数累加无效:false + 1未对变量赋值,错误次数不会实际增加,应改为false += 1
  • 错误次数未按题重置:每道题开始时未将错误计数清零,会导致错误次数跨题累计
  • 错误次数判断时机错误:当前逻辑在用户答对后才检查错误次数,无法在3次错误后直接显示答案并跳过题目
  • 数字生成范围不符合需求:原代码生成0到对应位数最大值的数,但需求是level1生成1-9,level2生成11-99,level3生成100-999(需调整起始值)
  • 答对加分逻辑不全:仅第一次答对时加分,若答错后再答对则不加分
  • 未处理非数字输入:用户输入非数字时会抛出ValueError导致程序崩溃

修复后的完整代码

import random

def generate_integer(level):
    score = 0
    level = int(level)
    # 根据难度确定数字范围
    if level == 1:
        start, end = 1, 9
    elif level == 2:
        start, end = 11, 99
    elif level == 3:
        start, end = 100, 999
    else:
        print("无效难度等级,请输入1、2或3")
        return

    for _ in range(10):  # 用for循环直观控制10道题
        x = random.randint(start, end)
        y = random.randint(start, end)
        answer = x + y
        false_count = 0  # 每道题开始重置错误次数

        while True:
            try:
                user_input = input(f'{x} + {y} = ')
                user_answer = int(user_input)

                if user_answer == answer:
                    score += 1
                    print("答对了!")
                    break
                else:
                    false_count += 1
                    if false_count == 3:
                        print(f'错误次数过多,正确答案是:{x} + {y} = {answer}')
                        break
                    else:
                        print(f'错误,请重试(剩余{3 - false_count}次机会)')
            except ValueError:
                print("请输入有效的整数!")

    print(f'最终得分:{score}/10')

# 调用示例
generate_integer(input("请输入难度等级(1/2/3):"))

关键改进点说明

  • 错误次数管理:每道题初始化错误计数为0,每次答错后累加,达到3次时直接显示答案并跳出当前题循环
  • 输入合法性处理:用try-except捕获ValueError,当用户输入非数字时提示重新输入
  • 数字范围修正:严格按照需求设置各难度的数字起始和结束值
  • 加分逻辑优化:无论第一次还是重试后答对,都能正确累计分数
  • 循环结构优化:用for循环替代while i !=10,更简洁直观地控制10道题的数量

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.23 03:33:31