[英]why does this code break out of loop?
import math
t=raw_input()
k=[]
a=0
for i in range(0,int(t)):
s=raw_input()
b=1
c=1
a=int(s)
if a==0:
continue
else:
d=math.atan(float(1)/b) + math.atan(float(1)/c)
v=math.atan(float(1)/a)
print v
print d
print float(v)
print float(d)
while():
if float(v)== float(d):
break
b=b+1
c=c+1
d=math.atan(float(1)/float(b)) + math.atan(float(1)/float(c))
print d
k.append(int(b)+int(c))
for i in range(0,int(t)):
print k[i]
因為很明顯float(v) != float(d)
直到b
變成2並且c
變成3。
您的while
循環在一個空的元組上進行測試,該元組的值為False
。 因此, while
循環中的語句將永遠不會執行:
如果希望while
循環運行直到遇到break
語句,請執行以下操作:
while True:
if (some_condition):
break
else:
# Do stuff...
如果進行比較非常危險,例如float(a)== float(b),因為float變量沒有確切的表示形式。 由於舍入錯誤,您可能沒有相同的值。
甚至2 * 0.5也可能不等於1。您可以使用以下方法:
if abs(float(a)-float(b)) < verySmallValue:
http://www.cygnus-software.com/papers/comparingfloats/comparingfloats.htm
浮點數學並不精確。 使用二進制浮點數不能精確地表示像0.2這樣的簡單值,並且浮點數的有限精度意味着操作順序中的微小變化會改變結果。 不同的編譯器和CPU體系結構以不同的精度存儲臨時結果,因此結果將根據環境的詳細信息而有所不同。 如果您進行計算,然后將結果與某個預期值進行比較,則極不可能會獲得預期的結果。 換句話說,如果您先進行計算然后進行以下比較:if(結果== ExpectedResult)
那么這種比較不可能是真的。 如果比較正確,則可能不穩定-輸入值,編譯器或CPU的微小變化可能會改變結果並使比較結果為假。
好吧,它還沒有達到斷點。 問題在於while()
根本不會循環。 要進行無限循環,請執行while (1):
因為while條件必須評估為true。這是一個有效的(清理后的)示例。
import math
t = raw_input()
k = []
a = 0.0
for i in range(0,int(t)):
s = float(raw_input())
b = 1.0
c = 1.0
a= float(s)
if a == 0:
continue
else:
d = math.atan(1.0/b) + math.atan(1.0/c)
v = math.atan(1.0/a)
print v
print d
while True:
if v == d:
print 'bar'
break
b += 1
c += 1
d = math.atan(1.0/b) + math.atan(1.0/c)
print d
k.append(int(b)+int(c))
for i in range(0,int(t)):
print k[i]
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.