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

Python硬币计算程序输入Y继续后无法正确重启重算故障

问题原因

你的代码运行异常是两个核心问题导致的:

  • 开头变量名拼写错误:第一行定义的是oo_large_value,后续所有判断逻辑调用的是too_large_value,代码运行时会直接抛出NameError
  • 硬币计数变量初始化位置错误:你把quarters/dimes/nickels三个变量定义在了外层循环外部,第一次循环执行时,用户输入硬币数量后,变量会被直接乘上面值覆盖为美分数值;第二次进入循环时,这三个变量存储的是上一轮计算出的面值,不满足输入校验while循环的进入条件(值既不小于0也不超过100000),程序会直接跳过用户输入步骤,拿上一轮残留的数值继续乘面值计算,最终结果完全错误。
修复方法

只需要做几处核心改动即可:

  1. 修正开头的变量名拼写错误
  2. 将三个硬币计数变量的初始化语句移到外层while循环内部,保证每次开启新一轮计算时,变量都会被重置为初始值-1,正常触发输入校验流程
  3. 优化编码逻辑:不要直接覆盖存储用户输入数量的变量,单独定义变量存储对应硬币的总面值,从习惯上避免变量值残留的问题;询问用户是否继续时增加大写转换,兼容小写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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.28 15:39:25