规格:Ubuntu 13.04,Python 3.3.1
一般背景:Python初学者
特定问题背景:我已经为解决这个问题而疲惫不堪,而且我知道,除了学习Python的指导价值外,这个问题也很无聊,而且不会让这个世界变得更美好:-(因此,如果您能就这个令人疲惫不堪的问题提供一些指导,我将不胜感激。但如果你对这类问题不感兴趣,真的不想浪费时间。
我打算做的是:“计算一美元以下的基本美国硬币的数量。一分钱值一分,五分钱值五分,一角钱值十分, 四分之一等于25美分。一美元要100美分。因此,给定小于1美元的金额(如果使用浮点数,则将其转换为整数进行此练习),计算获得该金额所需的每种硬币的数量,从而最大限度地增加面额较大的硬币的数量。例如,给定0.76美元或76美分,正确的输出将是“3个季度和1便士”。不接受“76便士”和“2个季度、2美分、1个镍和1便士”等输出
我能想到的:
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
美分,并且想要找到四分位数。使用76 % 25
会导致1
,而76 // 25
是3
。关于代码,您可能应该考虑迭代可能的硬币值,而不是一个巨大的
if
,elif
混乱。试试这样的。唯一需要解释的部分是使用
divmod
,但它实际上只是整数除法的tuple
,模结果。你可以用它分别得到硬币的数量和新的数量。我觉得你的算法太复杂了, 你不需要所有的elif和else 只需核对一下,然后修改剩余的金额,直到你达到零
像这样的东西
相关问题 更多 >
编程相关推荐