# 흐름 제어 파이썬의 흐름 제어: 조건문과 반복문 파이썬의 흐름 제어는 프로그램의 실행 순서를 조절하여 다양한 작업을 수행할 수 있도록 해줍니다. 주로 조건문과 반복문을 사용하여 프로그램의 흐름을 제어합니다. ## 조건문 ### if, elif, else * if 문: 특정 조건이 참일 때만 코드 블록을 실행합니다. * elif 문: 여러 개의 조건을 검사할 때 사용하며, 앞선 if나 elif 조건이 거짓일 때만 실행됩니다. * else 문: 모든 조건이 거짓일 때 실행됩니다. `if`문의 조건식 뒤에 콜론(`:`)을 붙이고 `if` 블록은 들여쓰기를 합니다. ```python if 조건식: 실행문 ``` ```python if 조건식: 실행문 else: 실행문 ``` ```python if 조건식: 실행문 elif 조건식: 실행문 else: 실행문 ``` ```python age = 20 if age >= 18: print("성인입니다.") elif age >= 13: print("청소년입니다.") else: print("어린이입니다.") ``` ### match case 파이썬 3.10 버전부터 도입된 match-case 문은 if-elif-else 문을 더욱 간결하고 가독성 있게 만들어주는 새로운 패턴 매칭 문법입니다. 다양한 값이나 패턴과 비교하여 코드 블록을 실행할 수 있으며, 특히 데이터 타입에 따른 분기 처리를 효율적으로 수행할 수 있습니다. ```python match value: case pattern1: # pattern1에 일치할 때 실행되는 코드 case pattern2: # pattern2에 일치할 때 실행되는 코드 case _: # 기본 케이스 # 위의 모든 패턴에 일치하지 않을 때 실행되는 코드 ``` * value: 비교할 값 * pattern: 패턴 (리터럴, 변수, 가드(guard)를 포함할 수 있음) * _: 와일드카드 패턴 (모든 경우에 일치) ```python match (n): case 1: return 'One' case 2: return 'Two' case _: return 'Many' ``` ```python case "a" | "b" : return "A or B" ``` ```python case [time, name] : return f"{time}, {name}!\n" case [time, *names] : msg = '' for name in names: msg += f"{time}, {name}!\n" return msg ``` ```python case [item, amount] if amount < 1000: return amount * 1.2 case [item, amount] if amount >=1000: return amount * 1.5 ``` ```python def get_grade(score): match score: case 90 | 100: return "A" case 80 if score >= 85: return "B+" case 80: return "B" case _: return "C 이하" ``` * 순서: 패턴은 위에서부터 아래로 순차적으로 검사되므로, 일반적으로 더 구체적인 패턴을 먼저 작성해야 합니다. * 가드: 가드는 패턴이 일치한 후에 추가적인 조건을 검사하는 역할을 합니다. * 와일드카드: 모든 경우에 일치하지만, 너무 남용하면 코드의 가독성이 떨어질 수 있습니다. ## 반복문 ### for in 시퀀스(리스트, 튜플, 문자열 등)의 요소를 순서대로 반복합니다. ```python for 변수 in range(횟수): 실행문 ``` ```python fruits = ["apple", "banana", "cherry"] for fruit in fruits: print(fruit) ``` `range`외에 리스트, 튜플, 문자열 등의 시퀀스 타입을 사용해도 됩니다. ```python a = [1, 2, 3, 4, 5] for i in a: print(i) for i in range(len(a)): print(a[i]) # 리스트의 인덱스도 필요한 때에는 enumerate()를 사용하면 됩니다. for idx, val in enumerate(a): print(idx, val) ``` #### 리스트 내포 for 문을 이용하여 간결하게 리스트를 생성하는 방법입니다. ```python numbers = [x**2 for x in range(10)] # 0부터 9까지의 제곱수 리스트 생성 ``` ### while 특정 조건이 참인 동안 반복합니다. ```python while 조건식: 실행문 ``` ```python count = 0 while count < 5: print(count) count += 1 ``` ### 반복문에서의 else 파이썬의 반복문(for, while)에서 else 문은 일반적인 조건문의 else 문과는 다르게 동작합니다. for 문에서 모든 요소를 순회했는지 확인하는 데 사용됩니다. 예를 들어, 리스트에서 특정 값을 찾는 경우, 찾지 못하면 else 블록에서 해당 메시지를 출력할 수 있습니다. while 문에서는 조건이 만족되어 반복이 종료되었는지 확인하는 데 사용됩니다. 예를 들어, 파일에서 특정 데이터를 찾는 경우, 파일의 끝까지 검색했지만 찾지 못했다면 else 블록에서 에러 메시지를 출력할 수 있습니다. #### 반복문의 else가 실행되는 조건 * for 문: for 문이 정상적으로 모든 요소를 순회한 후에 실행됩니다. 즉, break 문에 의해 중단되지 않고 모든 반복이 완료되어야 else 블록이 실행됩니다. * while 문: while 문의 조건이 거짓이 되어 반복이 자연스럽게 종료될 때 실행됩니다. 마찬가지로, break 문에 의해 중단되지 않아야 합니다. ```python numbers = [1, 2, 3, 4, 5] for num in numbers: if num == 6: print("숫자 6을 찾았습니다.") break else: print("숫자 6을 찾지 못했습니다.") ``` ```python i = 0 while i < 5: print(i) i += 1 else: print("반복이 끝났습니다.") ``` > break 문이 실행되면 else 블록은 실행되지 않습니다. > for 문이나 while 문이 정상적으로 종료될 때만 else 블록이 실행됩니다. ## 그 외 ### break 반복문을 즉시 종료합니다. ```python for i in range(10): if i == 5: break print(i) ``` ### continue 현재 반복을 건너뛰고 다음 반복으로 이동합니다. ```python for i in range(10): if i % 2 == 0: continue print(i) ``` ### pass 아무런 동작을 하지 않는 문장으로, 조건문이나 반복문에서 코드 블록이 필요하지만 아직 구현하지 않았을 때 사용합니다. Python의 들여쓰기 문법 때문에 사용되는 키워드입니다. 파이썬 3.x부터는 `...`을 사용해도 됩니다. ```python for i in range(10): pass # 아무 것도 실행되지 않습니다. ```