2016-08-18 4 views
-1

Мой цикл for, кажется, не разбивает цикл for и не переходит к следующему значению d. Требуется 0,5 секунды, если диапазон 10000, а 0.8 - 100 000? Но диапазон не имеет значения, когда он должен сломать долго, прежде чем выше 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' повторяется * девять раз (от 1 до 9). Таким образом, для 'd in {1, 4, 9}' не существует какой-либо точки, где '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 может точно так же быть заменен a for d in range(1, 10):, кстати.

Смежные вопросы