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