반응형
How to break out of multiple loops in python?
원래 C 코드 상에서 반복문이 여러 개로 겹쳐있을 때, 어떻게 하면 반복문들을 효율적으로 break할 수 있는지 찾아보다가 python 코드 상에서의 질문을 보게되었다.
코드가 더러워지지만 조건문을 사용하자는 파 vs 이럴 때 쓰라고 goto가 아직까지 남아있는 것이다라는 파, 두 파의 대립을 보게되었다. 참고로 나는 goto에 마음이 갔다. 코드도 예쁘고 어차피 어셈상에서 보면 다 똑같은 jmp 명령어가 아닌가.
어쨋든 python에서 여러 반복문 탈출에 대한 다음 질문을 살펴보면 예시로 든 multiple loop는 다음과 같다.
while True:
#snip: print out current state
while True:
ok = get_input("Is this ok? (y/n)")
if ok.lower() == "y": break 2 #this doesn't work :(
if ok.lower() == "n": break
#do more processing with menus and stuff
문제의 요지는 위의 y
조건에서 한 번에 두 반복문을 탈출할 수 있는 예쁜 방법을 찾는 것이었는데, 나온 방법들은 다음과 같다.
- Flag를 이용한 방법
- Function를 이용한 방법
- else를 이용한 방법 <-제일 신박했음
특정 조건을 만족했을 때 loop 문마다 Flag를 사용하여 break함
Flag = False
while True:
#snip: print out current state
while True:
ok = get_input("Is this ok? (y/n)")
if ok.lower() == "y":
Flag = True
break
if ok.lower() == "n": break
if Flag:
break
#do more processing with menus and stuff
Function의 return을 이용함
def foo():
while True:
#snip: print out current state
while True:
ok = get_input("Is this ok? (y/n)")
if ok.lower() == "y": return 1
if ok.lower() == "n": break
else를 이용함
사실 이거 때문에 이 글을 쓴다. 반복문에 else를 쓸 수 있다는 걸 처음 알았다... else 문은 반복문 내에서 break를 만나지 않고 반복문이 종료되었을 때 실행된다. 사실 위 사례에서는 break가 y
일 때 유일한 게 아니라서 아주 적합한 것은 아니지만, multiple loop일 때 else를 사용할 수 있다는 것에 의의를 두자.
while True:
#snip: print out current state
while True:
ok = get_input("Is this ok? (y/n)")
if ok.lower() == "y": break
else:
continue
break
#do more processing with menus and stuff
for else
else에 관하여 다시 살펴보면, 예를들어 다음과 같은 코드가 있을 때, else 문은 동작하지 않는다.
for i in range(10):
if i == 2:
break
else:
print('zzzzzzz')
그러나 다음과 같은 코드에서는 else 문이 동작한다.
for i in range(10):
if i == 12:
break
else:
print('zzzzzzz')
참고로 else는 for, while, try 문 등에 사용할 수 있다.
다양한 else에 관련된 논의는 링크에서 확인할 수 있다.
Reference
반응형
'Information* > 알면도움됨' 카테고리의 다른 글
고려대 안전교육 스킵 코드 (0) | 2021.12.29 |
---|---|
프로세스 종료 확인 shell script (0) | 2021.12.11 |
특정 프로그램이 지원하는 파일 확장자 알아보기 in windows 10 (1) | 2021.10.12 |
Index를 unsigned 변수로 사용 시 주의할 점 (0) | 2021.09.28 |
CMakeLists.txt 로 Visual Studio Code Debugging 하기 (0) | 2021.08.04 |