Python使用>=

2024-09-25 12:26:56 发布

您现在位置:Python中文网/ 问答频道 /正文

我现在正在学习Python(2.7),一个练习说要编写一个程序来计算您需要支付多少硬币来支付特定的金额。 我的解决方案是:

sum = input("Bitte gebe einen Euro Betrag ein: ")
coins = []
euro = [20,10,5,2,1,0.5,0.2,0.1,0.05,0.02,0.01]

for i in euro:
    while sum >= i:
        sum -= i
        coins.append(i)

print coins

这几乎可以工作了,但是当我输入例如17,79,它会给我17,78的硬币。在

^{pr2}$

为什么?这和圆形有关吗?在


Tags: 程序forinput硬币解决方案金额sumcoins
3条回答

是的。如果在执行代码后检查“sum”值,就会得到类似0009999999999133这样的值,它比最小的硬币还小。在

我的建议?做任何事都要分文!在

sum = int(input("Your text") * 100)
cents = [2000,1000,500,200,100,50,20,10,5,2,1]
coins = []

for i in euro:
    while True:
        if i <= sum:
            coins.append(i)
            sum -= i
        else:
            break

for i in range(len(coins)):
    coins[i] /= 100

print(coins)

对于货币计算,最好尽量避免float类型,因为会累积舍入误差。您可以用类似的方法进行操作:

amount= input("Bitte gib einen Euro Betrag ein: ")
coins = []
cents = [2000, 1000, 500, 200, 100, 50, 20, 10, 5, 2, 1]
amount = int(float(amount) * 100)
for cent in cents:
    while amount >= cent:
        amount -= cent
        coins.append(cent)

print [coin / 100.0 for coin in coins]

我还将变量名从sum更改为amount-sum将隐藏^{}内置函数。在

结果:

^{pr2}$

或者,您可以在不使用内部while循环的情况下实现此操作,如下所示:

for cent in cents:
    n = int(math.floor(amount / cent))
    amount -= n * cent
    coins += [cent] * n

可以提前退出循环(if not amount: break)并避免不必要的操作(if not n: continue),但为了可读性,我省略了这些保护。在

另一个可能的替代方法是使用^{}数据类型。在

这是一个与float精度有关的问题。经过计算,我得到:

sum == 0.009999999999999133

也就是说,比一欧元美分稍微少一点(注意,你不应该叫它sum,因为这样你就隐藏了内置的sum函数,并且不能使用sum(coins)来计算总数)。你可以用一种宽容的方法来解决这个问题

^{pr2}$

while (sum - i) > -0.001: # allow for slight inaccuracy

同样,最好使用公差来比较浮动,而不是:

if a == b:

使用

if abs(a - b) < tolerance:

相关问题 更多 >