gpt4 book ai didi

Python-Modulus-Stuck 与给定美元金额的硬币场景

转载 作者:行者123 更新时间:2023-11-28 21:59:11 27 4
gpt4 key购买 nike

规范:Ubuntu 13.04、Python 3.3.1

一般背景:Python 初学者;

特定问题的背景:我已经精疲力竭地试图解决这个问题,而且我知道,除了它对学习 Python 的指导值(value)之外,这个问题很无聊而且没有任何意义让这个世界变得更美好 :-( 所以,如果你能就这个令人筋疲力尽的问题分享一些指导,我将更加感激。但如果你对这类问题不感兴趣,我真的不想浪费你的时间。

我打算做的事情:“计算面值小于 1 美元的基本美国硬币的数量。一便士值 1 美分,一镍币值 5 美分,一角硬币值10 美分,四分之一值(value) 25 美分。赚 1 美元需要 100 美分。因此,给定少于 1 美元的金额(如果使用 float ,在本练习中转换为整数),计算达到该金额所需的每种硬币的数量,最大限度地增加大面额硬币的数量。例如,给定 0.76 美元或 76 美分,正确的输出将是“3 季度 1 便士”。诸如“76 便士”和“2 25 美分、2 角、1 镍和 1 便士”之类的输出是 Not Acceptable 。

我能想出什么:

penny = 1
nickel = 5
dime = 10
quarter = 25

i = input("Please enter an amount no more than 1 dollar(in cents): ")
i = int(i)

if i > 100:
print ("Please enter an amount equal or less than 100. ")
elif i >= quarter:
quarter_n = i % quarter
i = i - quarter * quarter_n
if i >= dime:
dime_n = i % dime
i = i - dime * dime_n
if i >= nickel:
nickel_n = i % nickel
i = i - nickel * nickel_n
if i >= penny:
penny_n = i % penny
print (quarter_n,"quarters,",dime_n,"dimes",nickel_n,"nickels",penny_n,"pennies")
else:
if i >= penny:
penny_n = i % penny
print (quarter_n,"quarters,",dime_n,"dimes",penny_n,"pennies")
else:
if i >= nickel:
nickel_n = i % nickel
i = i - nickel * nickel_n
if i >= penny:
penny_n = i % penny
print (quarter_n,"quarters,",nickel_n,"nickels",penny_n,"pennies")
else:
if i >= penny:
penny_n = i % penny
print (quarter_n,"quarters,",penny_n,"pennies")
else:
if i >= dime:
dime_n = i % dime
i = i - dime * dime_n
if i >= nickel:
nickel_n = i % nickel
i = i - nickel * nickel_n
if i >= penny:
penny_n = i % penny
print (dime_n,"dimes",nickel_n,"nickels",penny_n,"pennies")
else:
if i >= penny:
penny_n = i % penny
print (dime_n,"dimes",penny_n,"pennies")
else:
if i >= nickel:
nickel_n = i % nickel
i = i - nickel * nickel_n
if i >= penny:
penny_n = i % penny
print (nickel_n,"nickels",penny_n,"pennies")
else:
if i >= penny:
penny_n = i % penny
print (penny_n,"pennies")

这个解决方案虽然是我能想到的最好的解决方案,但在输入实际输入数字时无法按预期工作。而且我无法弄清楚为什么。此外,我知道即使从代码的绝对大小来看也有问题。我搜索了类似的问题,但我得到的最接近的是一个涉及非常困难的数学的问题,我无法理解。

我的问题:我知道我不能要求一个完整的解决方案,因为这取决于我自己想办法。我会很感激 a) 关于正确思路的一般指示 b) 对我当前代码/思路的批评,以便我可以改进它。

感谢您花时间阅读本文!

最佳答案

如果您对所有 mod 运算符 % 进行“查找和替换”,并在整数除法 // 中切换,我认为您的解决方案实际上可能有效。

假设您有 76 美分并且想要找到 25 美分的数量。使用 76 % 25 结果是 176//253

关于代码,您可能应该考虑迭代可能的硬币值而不是巨大的 ifelif 困惑。

尝试这样的事情。唯一可能需要解释的部分是使用 divmod 但它实际上只是整数除法的 tuple,取模结果。您可以使用它分别获取硬币数量和新数量。

def coins_given(amount):
coins = [(25, 'quarter'), (10, 'dime'), (5, 'nickel'), (1, 'penny')]
answer = {}
for coin_value, coin_name in coins:
if amount >= coin_value:
number_coin, amount = divmod(amount, coin_value)
answer[coin_name] = number_coin
return answer

print coins_given(76)
# {'quarter': 3, 'penny': 1}

关于Python-Modulus-Stuck 与给定美元金额的硬币场景,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16978755/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com