python的语法并不支持跳出多重循环,break只能跳出一重循环,如下面的这个:
a, b, c = 0, 0, 0
total = 0
for i in range(3):
for j in range(3):
for k in range(3):
if i == j == k == 1:
a, b, c = i, j, k
total = i * j * k
print(f'\na={a} b={b} c={c}')
print(f'total={total}')
break
print(f'i={i} j={j} k={k}', end =' ')
上面这个多重for循环并不会像我们预期的那样在i==j==k==1时中断后不再循环,而是中断当次k的for循环后继续循环
i=0 j=0 k=0 i=0 j=0 k=1 i=0 j=0 k=2 i=0 j=1 k=0 i=0 j=1 k=1 i=0 j=1 k=2 i=0 j=2 k=0 i=0 j=2 k=1 i=0 j=2 k=2 i=1
j=0 k=0 i=1 j=0 k=1 i=1 j=0 k=2 i=1 j=1 k=0
a=1 b=1 c=1
total=1
i=1 j=2 k=0 i=1 j=2 k=1 i=1 j=2 k=2 i=2 j=0 k=0 i=2 j=0 k=1 i=2 j=0 k=2 i=2 j=1 k=0 i=2 j=1 k=1 i=2 j=1 k=2 i=2
j=2 k=0 i=2 j=2 k=1 i=2 j=2 k=2
所以python要跳出多重循环,只能使用一些技巧来退出了,当前我了解到的主要两种:
1. 写成函数利用return来中断循环, 并返回你想要得到的value
a, b, c = 0, 0, 0
total = 0
def find_ijk_equal_6():
for i in range(10):
for j in range(10):
for k in range(10):
if i == j == k == 6:
total = i * j * k
# 返回你想到得到的value
return (i, j, k, total)
a, b, c, total = find_ijk_equal_6()
print(f'a={a} b={b} c={c}')
print(f'total={total}')
2. 利用抛异常来中断循环, 在MyError中对你想要得到的value进行处理
class MyError(Exception):
pass
a, b, c = 0, 0, 0
total = 0
try:
for i in range(10):
for j in range(10):
for k in range(10):
if i == j == k == 6:
a, b, c = i, j, k
total = i * j * k
raise MyError
except MyError:
# 在MyError中你想要得到的value进行处理
print(f'i={i} j={j} k={k}')
print(f'total={total}')