2016-08-18 79 views
-1

我的for循環似乎不會中斷for循環並轉到下一個d值。如果範圍是10000,則需要0.5秒,如果是100000,則需要0.8秒?但範圍不應該的問題時,它應該打破長期獲得上述100 這裏是我的代碼之前:中斷似乎沒有打破for循環

import math 

d = 1 
l = {} 

while d < 10: 
    for y in range(0, 10000): 
     x = y * math.sqrt(d) 
     x = round(x) 
     if x**2 - (d * y**2) == 1: 
      l[d] = x 
      print("x: " + str(x) + " d: " + str(d) + " y: " + str(y)) 
      break 
    d += 1 

m = max(l, key=l.get) 

print("d", m, " :-: x", l[m]) 

這裏就是它輸出:

x: 3 d: 2 y: 2 
x: 2 d: 3 y: 1 
x: 9 d: 5 y: 4 
x: 5 d: 6 y: 2 
x: 8 d: 7 y: 3 
x: 3 d: 8 y: 1 
d 5 :-: x 9 

>[Finished in 0.8s] 
+4

'break'正常工作,但是每次'while'迭代都會啓動一個新循環。 –

+0

哦,你是對的,我沒有注意到它只輸出六個結果,而不是十個輸出。 – Sorrells

+0

'while'循環迭代* 9次(1到9)。因此,對於{1,4,9}中的'd',似乎沒有任何'x ** 2 - (d * y ** 2)== 1'爲真的點,並且測試了整個範圍。 –

回答

0

break工作就好了。但是,您找不到所有d的值的解決方案。

else:套件增加for循環時,沒有break爲那個循環執行,以顯示:

while d < 10: 
    for y in range(0, 10000): 
     x = y * math.sqrt(d) 
     x = round(x) 
     if x**2 - (d * y**2) == 1: 
      l[d] = x 
      print("x: " + str(x) + " d: " + str(d) + " y: " + str(y)) 
      break 
    else: 
     print('No solution for d:', d) 
    d += 1 

,輸出:

No solution for d: 1 
x: 3 d: 2 y: 2 
x: 2 d: 3 y: 1 
No solution for d: 4 
x: 9 d: 5 y: 4 
x: 5 d: 6 y: 2 
x: 8 d: 7 y: 3 
x: 3 d: 8 y: 1 
No solution for d: 9 

while循環也可以同樣被替換順便提一下,for d in range(1, 10):