Break似乎没有打破for循环

时间:2016-08-18 09:07:59

标签: python for-loop break

我的for循环似乎没有打破for循环并继续下一个d值。范围为10000时需要0.5秒,而当其范围为100000时需要0.8秒。但是,在达到100以上时,它应该在很长时间内断开,这个范围无关紧要。 这是我的代码:

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]

1 个答案:

答案 0 :(得分: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):