使用python计算最小硬币兑换量的问题

使用python计算最小硬币兑换量的问题,python,python-3.x,algorithm,Python,Python 3.x,Algorithm,我有一个家庭作业,我们必须写一个程序,用最少的硬币数输出自动售货机所给的零钱。例如,3.67英镑可按1x英镑2+1x英镑1+1x50p+1x10p+1x5p+1x2p的形式分配 然而,我的程序输出了错误的数字。我知道可能会有舍入问题,但我认为当前的问题与我的编码方法有关 change=float(input("Input change")) twocount=0 onecount=0 halfcount=0 pttwocount=0 ptonecount=0 while change!=0:

我有一个家庭作业,我们必须写一个程序,用最少的硬币数输出自动售货机所给的零钱。例如,3.67英镑可按1x英镑2+1x英镑1+1x50p+1x10p+1x5p+1x2p的形式分配

然而,我的程序输出了错误的数字。我知道可能会有舍入问题,但我认为当前的问题与我的编码方法有关

change=float(input("Input change"))

twocount=0
onecount=0
halfcount=0
pttwocount=0
ptonecount=0

while change!=0:
     if change-2>-1:
          change=change-2
          twocount+=1
     else:
          if change-1>-1:
               change=change-1
               onecount+=1
          else:
               if change-0.5>-1:
                    change=change-0.5
                    halfcount+=1
               else:
                    if change-0.2>-1:
                         change=change-0.2
                         pttwocount+=1
                    else:
                         if change-0.1>-1:
                              change=change-0.1
                              ptonecount+=1
                         else:
                              break

print(twocount,onecount,halfcount,pttwocount,ptonecount)
结果:

Input: 2.3
Output: 11010
i.e. 3.2

Input: 3.2
Output:20010
i.e. 4.2

Input: 2
Output: 10001
i.e. 2.1

问题在于它如何使用
if/else
语句计算更改。如果您遍历第一个示例
change-2>-1
将注册为true,然后结果将为
.3
,但在下一个循环中
如果change-1>-1
您希望为false,但实际上不是
-0.7
。最好的方法之一是使用Python的floor
/
和mod
%
操作符。你必须对一些计算进行四舍五入

但考虑到它产生的投入

Input: 2.3
Output: 1 0 0 1 1


Input: 3.2
Output:1 1 0 1 0


Input: 2
Output: 1 0 0 0 0

您所有的比较都使用>-1,所以只要您的余额超过-1,您就会给出更改

如果您只处理整数,这是正确的,因为这里的>-1等于>=0

然而,对于浮点数,我们有例如-0.5>-1,所以我们将给出负平衡的变化(我们不想要)


因此,正确的方法是将所有>-1比较替换为>=0(大于或等于0)比较。

谢谢,这似乎很有帮助!然而,答案仍然是错误的-我猜是一个取整的事情?可能是的。一种更一致的方法是将输入乘以100并转换为int,换句话说,只处理便士的余额,这样就可以避开那些讨厌的浮点问题。
Input: 2.3
Output: 1 0 0 1 1


Input: 3.2
Output:1 1 0 1 0


Input: 2
Output: 1 0 0 0 0