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
相关产品推荐
相关产品推荐

