2009-06-15 51 views
0
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變成一個空的元組,其計算結果爲False 3.這段代碼爲什麼會脫離循環?

+0

如何將其格式化爲可讀代碼? – jitter 2009-06-15 06:35:12

+1

現在它被格式化 – 2009-06-15 06:37:50

+3

有趣的是,在Python中,代碼在形式上是模棱兩可的,除非它*是*可讀的...... – Edmund 2009-06-15 06:38:29

回答

8

while循環測試。因此,while循環內的語句永遠不會執行:

如果你希望你的while循環運行,直到它遇到break聲明,這樣做:

while True: 
    if (some_condition): 
     break 
    else: 
     # Do stuff... 
0

那麼,它並沒有達到盈虧點。問題是while()根本沒有循環。做一個無限循環,這樣做while (1):(因爲while條件必須爲真。這裏的工作(清理)樣品。

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] 
2

如果是非常危險做出那樣浮動(一)==浮動comparsisons( 。b)因爲浮點型變量還沒有確切的表示由於四捨五入錯誤,可能不會有同文值

即使是2 * 0.5可能不等於1.您可以使用以下:

if abs(float(a)-float(b)) < verySmallValue: 
2

http://www.cygnus-software.com/papers/comparingfloats/comparingfloats.htm

浮點數學不準確。 像0.2簡單值不能 使用二進制 浮點數精確表示,並且浮點 數的 有限精度意味着 輕微改變操作的順序可以改變 結果。不同的編譯器和架構以不同的精度存儲臨時結果 ,所以結果 將因環境的細節 而有所不同。如果您執行 計算,然後將 結果與某個預期值進行比較,那麼 是不太可能的,您將得到完全符合您預期結果的 。在其他 也就是說,如果你做一個計算 ,然後做比較:如果 (結果== expectedResult)

那麼它是不可能的 比較將是真實的。如果 比較是真的,那麼它可能是 不穩定 - 輸入 值,編譯器或CPU的微小變化可能會更改 結果並使比較結果爲 爲假。