簡體   English   中英

為什么Python不在這個While循環中重新應用公式

[英]Why Doesn't Python Reapply Formula In This While Loop

下面的代碼進入無限循環,但我試圖理解為什么Python每次都不通過循環來更新prob的值,而是將prob綁定為0。每次Python評估prob <.99時,為什么不它也會更新概率的值嗎? 請不要告訴我將問題放在while循環中。 我試圖理解為什么Pyhton會表現出來。 有人可以向我解釋為什么進入while循環后prob不再綁定到x嗎?

days = 365 
i = 0 
x = 1
prob = 1 - x 

while prob < .99: 
    i += 1 
    x = x * ((days - i)/float(days))

print i 

您不會在循環中的任何位置更新prob的值。

您是否正在尋找這樣的東西?

days = 365 
i = 0 
x = 1
prob = 0 # Prob initialised once to a value

while prob < .99: 
    i += 1 
    x = x * ((days - i)/float(days))
    prob = 1 - x # Value of prob is updated each time the loop is executed

print i

您當前使用的方式是,prob在循環之前設置,然后循環不斷地檢查prob的相同值,因此永遠不會退出。

Python語句不是規則(在每個步驟中都會重新應用)。 它們是導致Python做某事的一次性命令。 所以

prob = 1 - x

1 - x的當前值綁定到變量prob 如果您希望再次發生這種情況,則必須將該語句放入while-loop

概率未更新。 表達式1-x立即被1-1 = 0替換,並且prob將不再鏈接到x。 -運算符創建一個與x無關的新對象(!),並將該新對象綁定到prob。

您必須獲取代碼:

prob = 1 -x 

在循環內。 這樣,它在每次循環時都會執行。

days = 365 
i = 0 
x = 1
prob = 1 - x 

while prob < .99: 
    i += 1 
    x = x * ((days - i)/float(days))
    prob = 1 - x  # Here, you see?

print i 

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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