Python硬币找零代码计算数值83时镍币计数错误问题求助
错误原因
你的代码核心问题是计算各面额硬币数量时,始终基于原始输入的total值运算,没有扣除已经兑换完成的大面额金额,导致小面额硬币的计算基准错误。
以你出错的输入值83为例,原有逻辑的计算过程如下:
- 半美元(half):
83 // 50 = 1,结果正确,对应金额50 - 25美分(quarter):
83 % 50 //25 = 33//25 =1,结果正确,累计兑换金额75 - 10美分(dimes):
83%25//10 =8//10=0,结果正确,剩余待兑换金额8 - 镍币(nickels):你用了
83%10//5 = 3//5=0,这里直接用原始total取余10得到3,和实际剩余的待兑换金额8不符,所以结果错误 - 1美分同理也会基于错误的基准计算。
修正方案
你可以新增一个变量存储剩余待兑换的金额,每计算完一种硬币的数量就更新剩余金额,后续所有运算都基于更新后的剩余值即可,不会影响其他数值的计算结果。
修正后的代码如下:
total = int(input("Enter change [0...99]: ")) remain = total # 计算半美元数量 half = remain // 50 remain = remain % 50 # 计算25美分数量 quarter = remain // 25 remain = remain % 25 # 计算10美分数量 dimes = remain // 10 remain = remain % 10 # 计算5美分、1美分数量 nickels = remain // 5 pennies = remain % 5 print(half, "half (ves)") print(quarter, "Quarter (s)") print(dimes, "Dime (s)") print(nickels, "Nickel (s)") print(pennies, "penny (s)")
输入83时运行结果为:1个半美元、1个25美分、0个10美分、1个镍币、3个1美分,符合实际找零需求。
内容的提问来源于stack exchange,提问作者user17144102
相关产品推荐
相关产品推荐

