파이썬 루프는 내부 블록 바로 다음에 else 블록을 추가할 수 있다.
for i in range(3):
print('Loop', i)
else:
print('Else block!')
Loop 0 Loop 1 Loop 2 Else block!
루프가 끝나면 실행이된다.
if/else는 '이 블록 앞의 블록이 실행되지 않으면 이 블록을 실행하라' 라는 뜻.
try/except 문에서 except와 비슷하다.
try/except/else도 이런 패턴을 따르는데, 여기서 else는 '처리할 예외가 없는 경우 이 블록을 실행하라' 이다.
try/finally 도 '앞의 블록을 실행한 다음에는 이 블록을 실행하라'는 뜻이다.
for/else에서 else가 '루프가 정상적으로 완료되지 않으면 이 블록을 실행하라'라고 이해할 수 있다.
하지만 반대로 동작된다.
for i in range(3):
print('Loop', i)
if i == 1:
break
else:
print('Else block!')
Loop 0 Loop 1
또 놀라운 점은 빈 시퀀스에 대한 루프를 실행하면 else 블록이 바로 실행된다.
for x in []:
print('이 줄은 실행되지 않음')
else:
print('For Else block!')
For Else block!
while False:
print('이 줄은 실행 x')
else:
print('While Else block!')
While Else block!
서로소임을 검사하는 루프
a = 4
b = 9
for i in range(2, min(a, b) + 1):
print('검사 중', i)
if a % i == 0 and b % i == 0:
print('서로소 아님')
break
else:
print('서로소')
검사 중 2 검사 중 3 검사 중 4 서로소
이러한 방식보다는 도우미 함수를 사용하는 것이 좋음
def coprime(a, b):
for i in range(2, min(a, b) + 1):
if a % i == 0 and b % i == 0:
return False
return True
assert coprime(4, 9)
assert not coprime(3, 6)
def coprime_alternate(a, b):
is_coprime = True
for i in range(2, min(a, b) + 1):
if a % i == 0 and b % i == 0:
is_coprime = False
break
return is_coprime
assert coprime_alternate(4, 9)
assert not coprime_alternate(3, 6)