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

如何修复带range的for循环:错误时停留在当前统计项重新输入

问题修复:怪物卡牌统计项输入校验循环问题

核心问题分析

  • input_stat_error函数逻辑失效:内部while True循环未执行实际循环逻辑,且固定返回None,导致外层flag is True的判断永远不成立,错误输入后直接跳出内层循环,跳至下一个统计项。
  • 输入转换未做异常处理:直接执行int(e.enterbox(...)),若用户输入非数字会直接触发程序报错中断。

修复方案

1. 重构校验函数

修改input_stat_error,让它真正返回校验结果,处理数值范围和类型错误:

# 校验统计值是否为1-25之间的有效数字
def input_stat_error(input_val):
    try:
        num = int(input_val)
        if 1 <= num <= 25:
            return False  # 校验通过,无错误
        else:
            e.msgbox("数值需在1-25之间,请重新输入", "错误")
            return True
    except ValueError:
        e.msgbox("输入无效,请输入数字", "错误")
        return True

2. 调整输入循环逻辑

保留原range(4)的for循环,在内层循环中先获取原始输入、校验,通过后再转换存储:

# 保留原range循环结构
x = range(4)
for n in x:
    while True:
        # 先获取原始输入,不直接强转int
        input_str = e.enterbox(f"输入{stats[n]}的数值(1-25)", f"设置{stats[n]}属性")
        # 调用校验函数判断是否有效
        if input_stat_error(input_str):
            continue  # 校验失败,重新输入当前项
        # 校验通过后转换并存储
        stat_val = int(input_str)
        stats_names[n] = stat_val
        monster_cards[name][stats[n]] = str(stat_val)  # 和原有字典字符串格式保持一致
        break  # 进入下一个统计项

3. 额外细节优化

  • 原字典中统计值为字符串类型,修复后存储时统一转为字符串,保持数据格式一致性。
  • 移除原代码中无效的stats_names变量赋值冗余逻辑,保留原有变量结构的同时简化流程。

修复后效果

输入错误时,程序会停留在当前统计项的输入环节,直到用户输入符合要求的数值,才会进入下一个统计项,完全保留了原range(4)的循环结构。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.20 10:25:02