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

Python美元找零计算器金额错误求助:无if语句实现最大面额找零

问题分析与解决方案

你的核心问题是剩余金额传递错误,导致10、5、1美元的找零计算失效。当前代码中,twenty_left错误地使用了原始的dollars_left取余,而非扣除50美元后的fifty_left,后续剩余金额的计算也延续了这个错误,完全偏离了"最大面额优先"的递减逻辑。

修正后的完整代码

def main():
    cost = int(input('Enter the dollar amount of the item(no cents): '))
    h_bill = 100
    dollars_left = h_bill - cost

    # 按最大面额优先计算,每一步用前一步的剩余金额推导
    fifty_change = dollars_left // 50
    remaining = dollars_left % 50

    twenty_change = remaining // 20
    remaining = remaining % 20

    ten_change = remaining // 10
    remaining = remaining % 10

    five_change = remaining // 5
    remaining = remaining % 5

    one_change = remaining // 1

    # 用f-string输出结果
    print('Your change is: ')
    print(f'{fifty_change} Fifty Dollar bill(s)')
    print(f'{twenty_change} Twenty Dollar bill(s)')
    print(f'{ten_change} Ten Dollar bill(s)')
    print(f'{five_change} Five Dollar bill(s)')
    print(f'{one_change} One Dollar bill(s)')

main()

关键逻辑说明

  • 全程只用**地板除法(//)**计算当前面额的数量,**取余(%)**得到扣除当前面额后的剩余金额,完全不需要if语句,符合教授要求。
  • 每一步的remaining变量严格承接上一步的剩余金额,确保始终从最大面额开始递减计算,不会出现逻辑断层。
  • 保留了f-string输出格式,满足作业要求。

对之前尝试的补充

你之前尝试的变量拆分、合并运算思路是对的,但问题出在剩余金额的传递链断裂——比如原代码中twenty_left = dollars_left % 20直接绕过了50美元的扣除结果,导致10美元的计算基于原始找零金额而非扣除50后的剩余值,这才是错误根源,并非数学逻辑本身的问题。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.13 08:35:02