2025-01-20T02:26:20
This commit is contained in:
224
doc/05_flow_controls.md
Normal file
224
doc/05_flow_controls.md
Normal file
@@ -0,0 +1,224 @@
|
||||
# 흐름 제어
|
||||
파이썬의 흐름 제어: 조건문과 반복문
|
||||
파이썬의 흐름 제어는 프로그램의 실행 순서를 조절하여 다양한 작업을 수행할 수 있도록 해줍니다. 주로 조건문과 반복문을 사용하여 프로그램의 흐름을 제어합니다.
|
||||
|
||||
## 조건문
|
||||
|
||||
### 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 # 아무 것도 실행되지 않습니다.
|
||||
```
|
||||
|
||||
Reference in New Issue
Block a user