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

3.13.1 zybooks挑战活动:Python找零程序输入45输出异常排查

zyBooks 3.13.1 硬币找零程序Bug定位

问题现象

程序核心逻辑基本完成,但存在特定输入异常:输入总便士数为45时,仅输出2 Dimes,缺失其他面值的输出;输入44、46等数值时输出符合预期。

根因分析

我们先跟踪输入45时的变量执行流程:

  1. 初始输入pennies = 45,所有面值计数器初始为0
  2. 45小于100,美元计数分支不触发,pennies保持45
  3. 45大于25,进入25美分(Quarter)计数:quarters = 45//25 = 1,剩余pennies = 45%25 = 20
  4. 20大于10,进入10美分(Dime)计数:dimes = 20//10 = 2,剩余pennies = 20%10 = 0
  5. 剩余pennies为0,后续5美分、1美分计数分支不触发

此时最终计数结果为:quarters=1, dimes=2,其余面值为0,本该输出1 Quarter和2 Dimes,但实际只输出了后者,问题来自两处逻辑错误:

  • 核心错误:所有面值的单数输出分支,错误增加了pennies > 0的前置条件。比如Quarter的输出判断:
    if (quarters > 1):
        print ( quarters,'Quarters')
    elif (pennies > 0) and (quarters == 1):
        print (quarters, 'Quarter')
    
    输入45时最终剩余pennies为0,即使quarters计数为1,也不满足elif的判断条件,因此不会输出1 Quarter的内容。只有dimes的数量为2,走了dimes>1的分支被正常输出,就出现了只打印2 Dimes的现象。
  • 边界错误:所有面值计数的判断条件用了>而非>=,当剩余便士数刚好等于某面值(比如刚好25、10、5、100)时,不会进入对应计数分支,会导致找零结果完全错误。比如输入25时,程序不会统计1个Quarter,会错误计算为2个Dime加5个Penny。

修复方案

  • 所有面值计数的判断条件,将>替换为>=,覆盖面值相等的边界场景
  • 所有面值的输出判断,移除多余的pennies > 0条件,单复数仅根据当前面值的计数判断:计数大于1输出复数形式,计数等于1输出单数形式,计数为0不输出。

修复后的完整代码:

pennies=int(input())
dollars = 0
quarters = 0
dimes = 0
nickels = 0

if pennies == 0:
    print('No change')

if pennies >= 100:
    dollars = int(pennies/100) 
    pennies = (pennies%100)

if pennies >= 25:
    quarters = (pennies//25)
    pennies = (pennies%25)

if pennies >= 10:
    dimes = int(pennies/10)
    pennies = pennies%10

if pennies >= 5:
    nickels = int(pennies/5)
    pennies = (pennies%5)

if (dollars > 1):
    print ( dollars,'Dollars')
elif dollars == 1:
    print (dollars, 'Dollar')

if (quarters > 1):
    print ( quarters,'Quarters')
elif quarters == 1:
    print (quarters, 'Quarter')
    
if (dimes > 1):
    print ( dimes,'Dimes')
elif dimes == 1:
    print (dimes, 'Dime')

if (nickels > 1):
    print ( nickels,'Nickels')
elif nickels == 1:
    print (nickels, 'Nickel')
    
if (pennies > 1):
    print ( pennies,'Pennies')
elif pennies == 1:
    print (pennies, 'Penny')

内容的提问来源于stack exchange,提问作者Rylan Champion

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.26 17:06:25