簡體   English   中英

為什么這段代碼會跳出循環?

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

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