複数のネストされたfor
ループを使用しています。最後のループには、if
ステートメントがあります。 True
と評価されると、すべてのfor
ループが停止するはずですが、それは起こりません。それは、最も内側のbreak
ループからfor
sだけで、それ以上継続しません。 break
ステートメントが検出された場合、すべてのループが停止する必要があります。
私のコード:
for i in range(1, 1001):
for i2 in range(i, 1001):
for i3 in range(i2, 1001):
if i*i + i2*i2 == i3*i3 and i + i2 + i3 == 1000:
print i*i2*i3
break
ループを関数内に入れてから返してください:
def myfunc():
for i in range(1, 1001):
for i2 in range(i, 1001):
for i3 in range(i2, 1001):
if i*i + i2*i2 == i3*i3 and i + i2 + i3 == 1000:
print i*i2*i3
return # Exit the function (and stop all of the loops)
myfunc() # Call the function
return
を使用すると、すぐに囲んでいる関数が終了します。このプロセスでは、すべてのループが停止します。
例外を発生させることができます
try:
for a in range(5):
for b in range(5):
if a==b==3:
raise StopIteration
print b
except StopIteration: pass
ジェネレータ式を使用しない理由:
def my_iterator()
for i in range(1, 1001):
for i2 in range(i, 1001):
for i3 in range(i2, 1001):
yield i,i2,i3
for i,i2,i3 in my_iterator():
if i*i + i2*i2 == i3*i3 and i + i2 + i3 == 1000:
print i*i2*i3
break
これが最もクリーンな方法であるかどうかはわかりませんが、すべてのループの先頭でブールチェックを行うことができます。
do_loop = True
for i in range(1, 1001):
if not do_loop:
break
for i2 in range(i, 1001):
# [Loop code here]
# set do_loop to False to break parent loops