Python硬币计算程序输入Y继续后无法正确重启重算故障
问题原因
你的代码运行异常是两个核心问题导致的:
- 开头变量名拼写错误:第一行定义的是
oo_large_value,后续所有判断逻辑调用的是too_large_value,代码运行时会直接抛出NameError - 硬币计数变量初始化位置错误:你把
quarters/dimes/nickels三个变量定义在了外层循环外部,第一次循环执行时,用户输入硬币数量后,变量会被直接乘上面值覆盖为美分数值;第二次进入循环时,这三个变量存储的是上一轮计算出的面值,不满足输入校验while循环的进入条件(值既不小于0也不超过100000),程序会直接跳过用户输入步骤,拿上一轮残留的数值继续乘面值计算,最终结果完全错误。
修复方法
只需要做几处核心改动即可:
- 修正开头的变量名拼写错误
- 将三个硬币计数变量的初始化语句移到外层while循环内部,保证每次开启新一轮计算时,变量都会被重置为初始值-1,正常触发输入校验流程
- 优化编码逻辑:不要直接覆盖存储用户输入数量的变量,单独定义变量存储对应硬币的总面值,从习惯上避免变量值残留的问题;询问用户是否继续时增加大写转换,兼容小写y/n输入。
修复后的完整可运行代码如下:
too_large_value = 100000 pennies = 0 continue_execution = 'Y' # 持续运行直到用户选择退出 while continue_execution == 'Y': # 每次新一轮计算前重置所有硬币计数变量 dimes = -1 quarters = -1 nickels = -1 print("Please enter the number of coins:") # 输入25美分硬币数量 while quarters < 0 or quarters >= too_large_value: try: quarters = int(input("# of quarters:")) if quarters < 0: print("Please Enter a positive Value:") elif quarters >= too_large_value: print("Entered Value is too large.\nPlease Enter between 0 and 99999:") except ValueError: print("Please Enter Integer value only:") quarters_total = quarters * 25 # 输入10美分硬币数量 while dimes < 0 or dimes >= too_large_value: try: dimes = int(input("# of dimes:")) if dimes < 0: print("Please Enter a positive Value:") elif dimes >= too_large_value: print("Entered Value is too large.\nPlease Enter between 0 and 99999:") except ValueError: print("Please Enter Integer value only:") dimes_total = dimes * 10 # 输入5美分硬币数量 while nickels < 0 or nickels >= too_large_value: try: nickels = int(input("# of nickels:")) if nickels < 0: print("Please Enter a positive Value:") elif nickels >= too_large_value: print("Entered Value is too large.\nPlease Enter between 0 and 99999:") except ValueError: print("Please Enter Integer value only:") nickels_total = nickels * 5 # 计算总美分数 pennies = quarters_total + dimes_total + nickels_total print(f'The total is {pennies} pennies') # 询问用户是否继续 print("Do You want to Enter another value?") continue_execution = input("Y for Yes and N for N:").strip().upper() # 校验用户输入合法性 while continue_execution not in ('Y', 'N'): print("Invalid Choice\nPlease Enter again") continue_execution = input("Y for Yes and N for N: ").strip().upper() print("Thank you for doing business with us!")
内容的提问来源于stack exchange,提问作者phil
相关产品推荐
相关产品推荐

