如何在Python代码中添加循环,实现输入错误后重新输入而不退出程序
实现方案
核心逻辑是为每一处需要校验的输入添加while死循环,输入内容符合要求时用break跳出循环继续执行后续代码,不符合要求则提示错误后重新进入输入流程,避免程序直接退出。本次修改同时修复了原代码中婚姻状态判断的逻辑bug(原代码直接对输入字符串做布尔判断,无论输入内容是True还是False都会判定为已婚)。
关键改动说明
- 所有可能出现格式错误的数值输入都嵌套了
try-except捕获类型转换异常,避免输入非数字内容时程序崩溃 - 数值输入额外增加了范围校验,收入、抚养人数为负数时会要求重新输入
- 婚姻状态输入增加了合法值校验,仅接受True/False两种输入,转换为布尔值后再做后续判断
修改后完整代码
# 初始化常量 TAX_RATE = 0.15 TAX_RATE_MARRIED = 0.14 STANDARD_DEDUCTION = 10000.0 DEPENDENT_DEDUCTION = 3000.0 # 收集输入 taxFile = input("请输入您的税档编号:") # 总收入输入校验 while True: try: grossIncome = float(input("请输入您的总收入:")) if grossIncome < 0: print("收入不能为负数,请重新输入") else: break except ValueError: print("输入格式错误,请输入合法数字") # 抚养人数输入校验 while True: try: numDependents = int(input("请输入抚养人数:")) if numDependents < 0: print("抚养人数不能为负数,请重新输入") else: break except ValueError: print("输入格式错误,请输入整数") firstName = input("请输入您的名:") lastName = input("请输入您的姓:") # 婚姻状态输入校验 while True: marrige_input = input("您是否已婚?请输入True/False:").strip() if marrige_input in ("True", "False"): marrigeStatus = marrige_input == "True" break else: print("输入无效,请输入True或False") address = input("请输入您的地址:") # 邮编输入校验 while True: try: postcode = int(input("请输入您的邮编:")) break except ValueError: print("邮编格式无效,请输入数字格式的邮编") # 计算个税 taxableIncome = grossIncome - STANDARD_DEDUCTION - numDependents * DEPENDENT_DEDUCTION incomeTax = taxableIncome * TAX_RATE incomeTaxMarried = taxableIncome * TAX_RATE_MARRIED # 输出结果 print("您的税档编号为:", taxFile) print("您的个人信息为:", firstName, lastName) print("您的地址为:", address, postcode) print("您的年度总收入为:$", grossIncome) if marrigeStatus: print("您的应缴个税总额为:$" + str(round(incomeTaxMarried, 2))) else: print("您的应缴个税总额为:$" + str(round(incomeTax, 2))) print("感谢使用本程序,按回车键即可关闭")
内容的提问来源于stack exchange,提问作者Emmo
相关产品推荐
相关产品推荐

