■ 반복문은 코드 블록을 반복 실행할 수 있는 제어문이다. 파이썬에는 2가지 종류의 반복문이 있는데, 바로 for과 while 반복문이다.
■ for 문은 정해진 횟수만큼 반복하는 횟수 반복문이라고 할 수 있으며, while 문은 특정한 조건이 성립되는 동안 반복하는 조건 반복문이라고 할 수 있다.
1. while 반복문 - 조건 반복문
■ 조건 반복문인 while 문은 특정한 조건이 만족되는 동안 계속 루프가 계속 실행된다.
1.1 while 문의 기본 구조
■ while 문의 기본 구조는 다음과 같다.
while 조건식:
실행할_문장_1
실행할_문장_2
....
■ while 문은 일정한 조건을 만족하기까지 위와 같이 들여쓰기한 명령문 블록을 반복 실행한다.
■ while 문 기본 구조에서 while로 시작한 행은 반복문의 '헤더'라고 한다. 헤더의 조건은 해당 반복문의 연속 조건이라고 한다.연속 조건은 True나 False를 연산하는 boolean 표현이다. 즉, 헤더의 조건식이 반복 여부를 결정하게 된다.
■ while 문은 헤더의 조건의 값을 확인하고, 조건이 True이면 명령문 블록을 반복 실행하며, False이면 반복을 종료한다. 이 과정에서 매번 헤더의 조건을 재확인하고, 조건 결과(True인지 False인지)에 따라 반복문을 진행한다.
money = 1000
year = 0
rate = 0.03
while money < 2000:
money += money * rate
year += 1
print(year)
```#결과#```
24
````````````
money = 1000
year = 5
rate = 0.03
while year:
money += money * rate
year -= 1
print(year)
print(money)
```#결과#```
4
3
2
1
0
1159.2740743
````````````
■ 위의 예시들은 모두 조건문이 False가 될 때까지 루프가 실행되는 것을 볼 수 있다. 두 번째 예시의 경우 False인 year = 0이 될 때까지 루프를 실행한다.
■ while 문도 for 문처럼 횟수 반복을 수행할 수 있다. 반복할 횟수를 알고 있다면, 아래와 같이 while 문 헤더의 조건식에 반복 횟수를 제어하는 조건을 설정하면 된다.
year = 0
money = 1000
rate = 0.03
while year <= 10:
money += money * rate
year += 1
print(money)
```#결과#```
1384.2338707244455
````````````
■ 위의 예시는 year가 0부터 시작해서 year <= 10이 될 때까지 반복하기 때문에 총 11번 루프가 수행된다.
■ while 문의 경우 조건식을 잘못 설정하면 무한히 반복된다. 이것을 무한 루프(infinite loop)라고 한다. 아래 예시는 year = year + 1이 빠져 있기 때문에 while 문 헤더의 조건식이 계속 True로 설정되어 무한 루프가 발생하는 예시이다.
year = 0
while year <= 10:
money += money * rate
1.2 else가 포함된 while 문
■ 파이썬에서는 while 루프에 else를 붙일 수 있다. else는 조건식이 False이면 실행된다. 만약, while 루프가 break 문으로 종료되면 else는 실행되지 않는다.
i = 0
while i < 3:
print(i)
i += 1
else:
print('종료')
```#결과#```
0
1
2
종료
````````````
i = 4
while i < 3:
print(i)
i += 1
else:
print('종료')
```#결과#```
종료
````````````
i = 1
while i < 5:
print(i)
if i % 3 == 0:
break
i += 1
else:
print('종료')
```#결과#```
1
2
3
`````````````
■ 이와 같이 while 문은 문장을 수행하다 조건이 맞지 않으면 루프를 종료한다. 이때 while 문을 빠져나가지 않고 while 문의 조건문으로 다시 돌아가게 만들어야 할 경우, continue 문을 사용한다.
i = 0
while i < 5:
i += 1
if i % 2 == 0:
continue
print(i)
```#결과#```
1
3
5
````````````
- i = 1, 3, 5일 때 if 문의 조건식을 만족하지 않아 print(i)를 수행하지만, i = 2일 때 if 문의 조건식이 True이므로 continue 문이 수행된다.
- continue 문이 수행되어 다시 while 문의 조건문으로 다시 돌아가고 i += 1에 의해 i = 3이 된다. i = 4일 때도 동일한 방식으로 while 루프가 작동한다.
2. for 반복문 - 횟수 반복문
2.1 for 문의 기본 구조
■ 일반적인 for 루프의 구조는 다음과 같다.
for 변수 in 반복 가능한 객체(리스트/튜플/문자열):
실행할_문장_1
실행할_문장_2
....
# 리스트
for i in [1, 2, 3, 4, 5]:
print('Hellow World')
```#결과#```
Hellow World
Hellow World
Hellow World
Hellow World
Hellow World
````````````
# 튜플
a = [(1, 2), (3, 4), (5, 6)]
for (one, two) in a:
print(one, two)
```#결과#```
1 2
3 4
5 6
````````````
# 문자열
for i in 'abcde':
print(i)
```#결과#```
a
b
c
d
e
````````````
■ 위와 같이 리스트/튜플/문자열의 요소를 첫 번째 요소부터 마지막 요소까지 하나씩 꺼내 변수에 대입되어 들여쓰기된 명령문이 수행되는 것을 볼 수 있다.
- 문자열이라면 문자열의 첫 번째 문자로 시작해서 마지막 문자까지 하나씩 꺼내 본문에 있는 명령문을 실행한다.
- 리스트나 튜플이라면, 리스트나 튜플 내에 존재하는 요소별로 한 번씩 본문에 있는 명령문을 실행한다.
2.2 range( ) 함수
■ 위와 같은 방법으로도 반복할 수 있지만, 반복 횟수가 1000번, 10000번, .... 이라면 이 방법은 불가능하다. 이런 경우 range( )함수를 사용하면 된다.
■ range() 함수의 일반적인 형식은 다음과 같다.
range(start=0, stop, step=1)
for i in range(5): # 0, 1, 2, 3, 4
...
for i in range(1, 5): # 1, 2, 3, 4
...
for i in range(1, 10, 2): # 1, 3, 5, 7, 9
...
■ start와 step이 생략되면, start와 step의 기본값은 start는 0으로, step은 1로 간주된다.
■ 위와 같이 range 함수의 start값이 stop값보다 작고 증분값인 step의 값은 양수이면, 변수 i에 할당되는 값은 start값으로 시작하여 stop값에 도달하기 전까지 증가하는 순열을 생성한다.
■ 반대로 step 값이 음수이고 start값이 stop값보다 크면 range() 함수는 start값으로 시작하여 stop값에 도달하기 전까지 감소하는 순열을 생성한다.
for i in range(10, 0, -1): # 10, 9, 8, 7, 6, 5, 4, 3, 2, 1
...
2.3 중첩 반복문(nested loop)
■ 반복문은 중첩해서 사용할 수 있다. 즉, 반복문 안에 다른 반복문이 포함될 수 있다. 이런 형태를 중첩 반복문(nested loop)이라 하며, 외부에 있는 반복문을 외부 반복문(outer loop), 외부 반복문 안에 있는 반복문을 내부 반복문(inner loop)이라 한다.
for x in range(3):
for y in ['a','b','c']:
print(x, y)
```#결과#```
0 a
0 b
0 c
1 a
1 b
1 c
2 a
2 b
2 c
````````````
■ 위와 같이 중첩 반복을 할 경우 작동 방식은 예를 들어, 외부 반복문이 먼저 수행되어 x = 0일때, 내부 반복문이 모두 실행되어 (x = 0, y = a), (x = 0, y = b), (x = 0, y = c)가 된다.
■ 이러한 중첩 반복문은 다음과 같이 컴프리헨션에도 사용할 수 있다.
# 리스트 컴프리헨션
[표현식 for 변수1 in 반복 가능한 객체1 if 조건문1
for 변수2 in 반복 가능한 객체2 if 조건문2
...,
...,
for 변수n in 반복 가능한 객체n if 조건문n]
[print(x, y) for x in range(3) for y in ['a', 'b', 'c']]
```#결과#```
0 a
0 b
0 c
1 a
1 b
1 c
2 a
2 b
2 c
````````````
3. break, continue 명령문
■ while, for 반복문 내에 if 조건식:을 작성하고, if 문의 결과에 break나 continue 명령문을 사용하면, if 문 조건식 결과에 따라 반복문을 즉시 종료하거나 반복문의 처음으로(헤더 부분으로) 돌아가게 만들 수 있다.
while True: # 무한 루프
if 조건:
break
if 조건:
continue
for i in ~:
if 조건:
break
if 조건:
continue
■ break 명령문이 반복문 내부에서 실행될 때, 반복문은 즉시 종료된다.
■ continue 명령문은 반복문 내부에서 실행되면, while/for 문의 헤더 부분으로 돌아가는데, 예를 들어 1부터 10까지 숫자 중에서 2의 배수만 제외하고 출력하고 싶다면 다음과 같이 continue 명령문을 사용하면 된다.
for i in range(10):
if i%2==0:
continue
print(i, end=' ')
```#결과#```
1 3 5 7 9
````````````
■ 위의 코드는 0부터 9까지 모든 정수에 대하여 반복한다. 만약 정수가 2의 배수이면 continue 명령문이 실행되어 for 문으로 돌아가게 된다.
- 예를 들어 i = 0이라면 if 문이 True이므로 continue가 실행되어, if 문 아래의 print() 명령문을 수행하지 않고 for 문으로 돌아가서 다음 반복이 시작된다. 즉, i = 1이 되는 것이다.
참고) pass 명령문
■ while/for 반복문에는 적어도 들여쓰기한 1개 이상의 명령문 블록이 들어가야 한다. 만약, 아무것도 하지 않으면서 반복하는 명령문이 필요한 경우 명령문 블록으로 pass 명령문을 사용하면 된다.
■ pass 명령문은 아무런 작업도 하지 않고 자리만 차지하는 명령문이기 때문이다.
'파이썬' 카테고리의 다른 글
함수 (1) | 2024.09.06 |
---|---|
파일 읽고 쓰기 (0) | 2024.09.03 |
제어문(control statement) (1) - 조건문 if (0) | 2024.08.28 |
자료형(Data Type) (4) - 세트(집합), 딕셔너리 (0) | 2024.08.24 |
자료형(Data Type) (3) - 튜플, 불(bool) (0) | 2024.08.23 |