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
相关产品推荐
相关产品推荐

