Python输入验证问题:选项输入无效值时如何避免输出多余计算结果
问题解决方案
原有代码的核心问题
- 选项2的合法性校验逻辑位置错误:你把体重是否≥100的校验放在了for循环内部,且执行顺序是「先扣减体重→先打印结果→再做校验」,自然会先输出无效结果再打印错误提示
- 缺少全局输入校验逻辑:选项选择、选项2的体重输入都没有做前置拦截,无效输入会直接进入后续业务逻辑
- 代码存在笔误:退出逻辑的判断条件写为
option3 == 3,变量名错误,应为options == 3 - 缺少外层循环包裹整个程序逻辑,重试逻辑无法正常生效
最优解决思路
所有输入都做前置校验,合法才进入后续业务逻辑,不合法直接提示重试,不执行任何计算、打印操作:
- 外层加
while True循环包裹整个程序,仅用户选择选项3时才退出 - 选项选择输入做校验,不在1/2/3范围内的直接提示错误,重新输入
- 选项2的体重输入获取后立刻做校验,小于100直接提示错误,返回主菜单,不进入后续表格打印逻辑
- 修正变量笔误,同时新增非数字输入的异常捕获,避免用户输入非数字内容时程序直接崩溃
修正后完整代码
while True: # 主菜单选项选择 print('\n请选择以下选项:') # 捕获输入非数字的异常 try: options = int(input(' 1. 查看“减少500卡路里的10种方法”指南 \n 2. 生成下学期体重预测表 \n 3. 退出程序 \n请输入选项:')) except ValueError: print("错误:请输入有效的数字选项") continue # 选项1逻辑 if options == 1: print('试试这10种每天减少500卡路里的方法:') print('* 更换你的零食') print('* 去掉一份高热量食物') print('* 不要喝高热量饮品') print('* 选择低热量替代食物') print('* 就餐时提前打包一半食物') print('* 拒绝油炸食品') print('* 选择更健康的低热量披萨') print('* 使用更小的餐盘') print('* 避免饮酒') print('* 来源:美国国家医学图书馆') # 选项2逻辑 elif options == 2: # 捕获体重输入非数字的异常 try: weight = int(input("请输入初始体重(单位:磅,数值≥100):")) except ValueError: print("错误:请输入有效的数字体重") continue # 前置校验体重合法性 if weight < 100: print('错误:体重不能小于100磅,请重试') continue # 校验通过才打印表格 print('----------------------------------') print('月份 预测体重') print('----------------------------------') for i in range(0,7): weight = weight -4 print(i,' ',weight,' 磅') # 选项3逻辑 elif options == 3: print('\n再见...') break # 选项不在1/2/3范围内的情况 else: print("错误:请输入1/2/3范围内的有效选项")
内容的提问来源于stack exchange,提问作者yoshix98
相关产品推荐
相关产品推荐

