Eri*_*man 2 python infinite-loop python-3.x
我正在研究一个模拟自动售货机的程序.对于一些我的代码的这一部分创建一个无限循环,我无法弄清楚为什么.我通过python导师运行它来查看我的问题所在,似乎当我的变量price_remaining = 5时,它有时不会通过elif语句.我不完全确定会以某种方式触发它.我打算将我输入的内容复制并粘贴到python导师中,希望有人能够根据这一点进行解释.编辑:我刚刚通过python导师检查了一些,它似乎只发生在我有一个以5结尾的price_remaining的值时.例如2.05,0.05,1.15等.
price_remaining = 2.55
price_remaining = price_remaining * 100
q_stock = 25
q_returned = -0
d_stock = 25
d_returned = 0
n_stock = 25
n_returned = 0
while price_remaining > 0:
if price_remaining >=25 and q_stock > 0:
price_remaining = price_remaining - 25
q_stock = q_stock - 1
q_returned = q_returned + 1
elif price_remaining >=10 and d_stock > 0:
price_remaining = price_remaining - 10
d_stock = d_stock - 1
d_returned = d_returned + 1
elif price_remaining >=5 and n_stock > 0:
price_remaining = price_remaining -5
n_stock = n_stock - 1
n_returned = n_returned + 1
print( q_returned)
print( d_returned)
print( n_returned
Run Code Online (Sandbox Code Playgroud)
)
当我添加该行
print(repr(price_remaining), repr(n_stock))
Run Code Online (Sandbox Code Playgroud)
在while循环开始时,代码生成
254.99999999999997 25
229.99999999999997 25
204.99999999999997 25
179.99999999999997 25
154.99999999999997 25
129.99999999999997 25
104.99999999999997 25
79.99999999999997 25
54.99999999999997 25
29.99999999999997 25
4.999999999999972 25
4.999999999999972 25
4.999999999999972 25
[.. forever ..]
Run Code Online (Sandbox Code Playgroud)
由于浮点数的工作原理(请参阅此处提醒),您无法始终完美地表示每个可能的数字,因此所有9都是如此.
在任何情况下,一旦price_remaining < 5,即使它只是少量,你的代码也没有任何if触发的分支.
| 归档时间: |
|
| 查看次数: |
287 次 |
| 最近记录: |