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

Python乐透程序:实现输入循环校验 错误输入自动重输直至合法

Python乐透号码采集功能实现

原有代码问题

  • 硬编码6段几乎完全重复的输入、校验逻辑,冗余度极高,还容易出笔误——你写lotto4的重复校验段时,就误写了lotto3 == lotto2的判断,和当前输入的lotto4完全没关系,这段校验直接失效
  • 没有配置输入错误后的重试循环,用户输入不符合规则的内容时,程序打印完提示就直接执行下一个号码的输入逻辑,不会停在当前位要求重输
  • 缺少非整数输入的异常处理,用户如果输入字母、特殊符号,直接调用int()转换会触发报错导致程序崩溃

优化实现逻辑

不用单独定义lotto1到lotto6六个独立变量,用一个列表统一存储已经校验通过的合法号码即可:

  • 外层循环控制整体录入进度,只要列表内的合法号码数量不足6个,就持续录入新号码
  • 每个号码的录入环节套一层无限循环,只要当前输入不满足校验规则,就打印对应错误提示,要求用户重新输入,直到输入完全合法,再把号码存入列表,进入下一个号码的录入流程
  • 校验顺序统一:先判断输入是否为合法整数,再判断数值是否在1-59区间内,最后判断是否和已录入的号码重复

完整可运行代码

def get_lotto_numbers():
    valid_numbers = []
    # 持续录入直到凑齐6个合法号码
    while len(valid_numbers) < 6:
        current_index = len(valid_numbers) + 1
        prompt = f"请输入第{current_index}个乐透号码(范围1-59):"
        # 当前输入位的死循环,不合法就一直重输
        while True:
            input_content = input(prompt)
            # 校验是否为整数
            try:
                num = int(input_content)
            except ValueError:
                print("输入无效,请输入1-59之间的整数")
                continue
            # 校验数值范围
            if num < 1 or num > 59:
                print("数值超出范围,请输入1到59之间的数字")
                continue
            # 校验是否重复
            if num in valid_numbers:
                print("号码重复,请输入未录入过的其他号码")
                continue
            # 全部校验通过,存入列表,跳出当前输入位的循环
            valid_numbers.append(num)
            break
    return valid_numbers

# 功能测试
if __name__ == "__main__":
    lotto_result = get_lotto_numbers()
    print("你录入的6个合法乐透号码为:", lotto_result)

额外说明

  • 这套逻辑扩展性很强,如果后续需要调整录入的号码数量、数值范围,只需要修改外层循环的长度判断、范围判断的数值即可,不用重写大段重复代码
  • 所有错误场景都会停在当前输入位,直到用户输入合法内容才会进入下一项,完全满足需求
  • 兼容了非整数输入的异常场景,不会因为用户误输入非数字内容直接崩溃

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.27 16:31:35