[英]Python: Program keeps getting into a infinite loop when using float
這是我原來的工作程序:
def num_rushes(required_height, rush_height_gain, back_sliding):
current_height = 0
rushes = 0
while current_height < required_height:
rushes += 1
current_height += rush_height_gain
if current_height >= required_height:
break
else:
current_height -= back_sliding
return rushes
print num_rushes(100, 15, 7)
該程序執行的操作將計算直到達到所需的高度( required_height
)之前需要執行多少次“沖動”,每次沖動( rush_height_gain
)之后,我們將回退給定的量( back_sliding
)。
我想要的是每次高峰之后,將獲得的高度乘以0.95(每次都損失5%的高峰)。
如下所示,我完成的工作是將rush_height_gain轉換為浮點數,然后將rush_height_gain *= 0.95
行添加到我的while循環中,但是由於某種原因(我似乎無法弄清楚),我最終陷入了無限循環。
def num_rushes(required_height, rush_height_gain, back_sliding):
current_height = 0
rushes = 0
rush_height_gain = float(rush_height_gain)
while current_height < required_height:
rushes += 1
current_height += rush_height_gain
if current_height >= required_height:
break
else:
current_height -= back_sliding
rush_height_gain *= 0.95
return rushes
print num_rushes(100, 15, 7)
對於為什么發生這種情況以及如何獲得所需結果的任何幫助,將不勝感激。
干杯。
每次通過while-loop
rush_high_gain
會變小。 但是back_sliding
保持不變。 如果通過循環進行了足夠的遍歷(大約15次),則rush_height_gain
可能小於backsliding
。 到那時, current_height
會越來越小,並且您將永遠不會退出循環。
如果您在循環中臨時添加一個print
語句以顯示每次迭代的相關變量的值,您會發現由於不斷縮小rush_height_gain
,最終它變得小於back_sliding
。 一旦發生這種情況,物體在每個步驟中向后滑動的幅度將比其向上滑動的幅度更大,因此您最終會失去身高。 這意味着,如果到那時還沒有達到required_height
,則永遠不會達到。
可能最簡單的解決方案是,如果current_height
變為負值,或者如果rush_height_gain
小於back_sliding
,則將循環條件更改為停止。 另外,您可以更改rush_height_gain
計算方式,使其永遠不會小於back_sliding
。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.