簡體   English   中英

Python:使用float時,程序不斷陷入無限循環

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM