Python:改变计算器

时间:2016-02-19 20:09:29

标签: python

我正在尝试计算所需的季度,硬币和镍币的数量,以便用尽可能少的硬币加总量。这是我的代码:

x = raw_input("Please enter an amount of change")
x = float(x)
q = .25
d = .1
n = .05
numberQ = x/q
numberQ = int(numberQ)
money2 = x - (numberQ * q)
numberD = money2/d
numberD = int(numberD)
money3 = money2 - (numberD * d)
numberN = money3/n
numberN = int(numberN)
print numberQ
print numberD
print numberN

输出已关闭。例如,如果我输入1.95,它将返回7个季度,1个角钱和1个镍,当它应该是7个季度2个角钱和0个镍币。

5 个答案:

答案 0 :(得分:3)

问题出在第二步。如果从1.95开始,第一步将返回7个季度,剩余的0.20美元。所以money2现在是0.20。现在我们除以一角钱的价值。由于浮点错误,我们的结果可能不是偶数2但更像是1.9999999。 Python 2.7的int()方法向零舍入,因此将其舍入为1角钱。剩余部分是0.10美元,这被除以导致同样问题的镍的值,但这次它向下舍入到一个镍。

要解决此问题,我建议使用整数个便士而不是代表美元的浮点值。

因此,1.95变为195,四分之一,一角钱和一个镍的值分别为25,10和5。

修改试试这个:

x = raw_input("Please enter an amount of change (in pennies)")
x = int(x)
q = 25
d = 10
n = 5
numberQ = (x - (x % q))/q
money2 = x % q
numberD = (money2 - (money2 % d))/d
money3 = money2 % d
numberN = (money3 - (money3 % n))/n
pennies = money3 % n
print numberQ
print numberD
print numberN
print pennies

%给出整数除法的余数。如果我们从我们开始的金额中减去余数并将其除以硬币值,我们知道结果将是一个整数。剩余部分成为新的资金。

答案 1 :(得分:2)

这是因为浮动并没有精确地保持这些值。

>>> money2/d
1.9999999999999996

尝试将所有内容乘以100:

x = float(195)
q = float(25)
d = float(10)
n = float(5)
numberQ = x/q
numberQ = int(numberQ)
money2 = x - (numberQ * q)
numberD = money2/d
numberD = int(numberD)
money3 = money2 - (numberD * d)
numberN = money3/n
numberN = int(numberN)
print numberQ
print numberD
print numberN

Online Example

编辑:您也可以使用小数包来执行此操作:

from decimal import Decimal
x = Decimal('1.95')
q = Decimal('.25')
d = Decimal('.10')
n = Decimal('.05')
numberQ = x/q
numberQ = int(numberQ)
money2 = x - (numberQ * q)
numberD = money2/d
numberD = int(numberD)
money3 = money2 - (numberD * d)
numberN = money3/n
numberN = int(numberN)
print numberQ
print numberD
print numberN

答案 2 :(得分:1)

您似乎遇到了浮点精度错误;例如,在IDLE中运行代码后,请求money2money3会给出以下值:

>>> money2
0.19999999999999996
>>> money3
0.09999999999999995

如果您想了解更多信息,Computerphile会在此here上播放一段精彩视频。除此之外,尝试转换它,以便钱由整数美分表示;即1.95美元将是195。

祝你好运。

答案 3 :(得分:0)

问题是你的浮点值有时会接近实际值:在你的例子中,x = x * 100 q = 25 d = 10 n = 5 的值假设为0.2,但值可能是0.1999999 ...所以0.1999999 / 0.10 = 1.9999999999当你转换为int它将截断并变为1而不是2你想要的那样:

你可以尝试乘以100

for(int i=norm.length-1; i > 0; i--)

ClojureScript Unraveled

答案 4 :(得分:0)

我只是遇到了一个类似的问题,而且这个问题似乎奏效了,它可能比需要的时间更长:

编辑:为此,您输入一个整数-输入$ 78.65作为7865。

total = int(input())

if total == 0:
    print('no change')
if total//100 >= 1:
    if total//100 == 1:
        print(total//100, 'dollar')
        total = total % 100
    elif total//100 > 1:
        print(total//100, 'dollars')
        total = total % 100
if total//25 >= 1:
    if total//25 == 1:
        print(total//25, 'quarter')
        total = total % 25
    elif total//25 > 1:
        print(total//25, 'quarters')
        total = total % 25
if total//10 >= 1:
    if total//10 == 1:
        print(total//10, 'dime')
        total = total % 10
    elif total//10 > 1:
        print(total//10, 'dimes')
        total = total % 10
if total//5 >= 1:
    if total//5 == 1:
        print(total//5, 'nickel')
        total = total % 5
    elif total//5 > 1:
        print(total//5, 'nickels')
        total = total % 5
if total//1 >= 1:
    if total//1 == 1:
        print(total//1, 'penny')
    elif total//1 > 1:
        print(total//1, 'pennies')
else:
    total