반복문이란,
프로그램 내에서 똑같은 명령을 일정 횟수만큼 반복하여 수행하도록 제어하는 명령문입니다.
파이썬에서는 크게 2종류의 반복문이 존재하는데요, 바로 while문과 for문 입니다.
1. while문
while문의 기본 구조는 다음과 같습니다.
while 조건문:
실행문...
실행문...
종료
만일 조건식이 거짓이라면 실행문의 코드가 실행되지 않고 while문을 빠져나갑니다.
반면 조건식이 참이라면 실행문의 코드가 실행된 후에 다시 조건식으로 돌아가 조건식의 참/거짓 여부를 판단합니다.
이때, 실행문 내부에서 조건식의 참/거짓 여부에 영향을 미칠 수 있는데요, 다음 예시를 보도록 하겠습니다.
a = 0
while a < 5:
a += 1
print(a)
print('while문 종료')
[출력 결과]
1
2
3
4
5
while문 종료
while문 내부에서 a의 값이 바뀌도록 연산을 해 주었는데요,
그 결과 while문이 5번 실행된 후 while문을 빠져나간 것을 볼 수 있습니다.
만일 while문에서 조건식이 없다면 어떻게 될까요?
이 경우, 실행문의 코드가 무한히 실행되는, 즉 '무한 루프'에 빠지게 됩니다.
위의 예제를 무한 루프가 되도록 만들어 볼까요?
a = 0
while a>=0:
a+=1
print(a)
print('while문 종료')
[출력 결과]
1
2
3
4
5
...
a>=0은 항상 참이므로, 조건식이 항상 참이기 때문에 이 while문에서 영영 빠져나갈 수 없습니다.
따라서 'while문 종료'는 출력될 수 없습니다.
일반적으로는 코드에 무한루프가 있으면 안 되는데요(프로그램이 정상적으로 실행되지 않을 뿐더러, 많은 에러를 발생시킵니다),
프로그램을 코딩하다 보면 일부러 무한루프를 생성시키는 경우가 생각보다 많습니다. 이 경우, 특정 조건에서 무한루프를 탈출시킬 수 있도록 조치를 취해 놓는데요, 이때 사용하는 것이 break문 입니다.
반복문 내부에서 break문은 반복문을 강제로 탈출시키는 역할을 합니다.
처음 예시를 break문을 이용해 다시 써 볼까요?
a = 0
while true:
a += 1
print(a)
if a >= 5:
break
print('while문 종료')
[출력 결과]
1
2
3
4
5
while문 종료
while문이 5번 실행되면 a=5이므로 if문의 조건식을 만족하게 되고, break문이 실행되어 while문을 탈출할 수 있습니다.
2. for문
for문에서는 while문과 달리, 반복되는 범위를 조금 더 직관적으로 지정할 수 있습니다.
for 변수 in 범위:
수행문...
수행문...
종료
이때, 범위는 주로 리스트를 이용해 지정합니다. 리스트의 첫 번째 요소부터 마지막 요소까지 차례로 변수(i)에 대입되어 수행문의 코드가 실행됩니다. 다음 예시를 통해 반복문이 어떻게 작동하는지 자세히 알아봅시다.
for i in [혜진, 연수, 상아, 하연, 연우]:
print(i)
print("for문 종료")
[출력 결과]
혜진
연수
상아
하연
연우
for문 종료
for문의 범위로 리스트 [혜진, 연수, 상아, 하연, 연우]를 넣었습니다. 이때, 변수 i의 값에 리스트의 [0] 요소가 대입된 후 이를 출력합니다.
이처럼 for문은 변수 값을 리스트에서 대입하고 실행문의 코드를 실행하는 것을 반복합니다.
range 함수를 사용하면 for문의 실행 범위를 정수로 지정할 수 있습니다.
for i in range(5):
print(i)
print("for문 종료")
[출력 결과]
0
1
2
3
4
for문 종료
range 함수는 숫자 리스트를 자동으로 만들어 주는데요, 크게 3가지 방법으로 사용됩니다.
range(n) -> [0,1,2,...n-1]
range(a,b) -> [a,a+1,a+2,...b-1]
range(p,q,r) -> [p,p+r,p+2r,...q-1]
range 함수는 3개의 정수 - 시작 숫자, 끝 숫자, 간격을 매개변수로 받습니다.
하지만 반드시 3개의 수를 모두 지정해 줄 필요는 없는데요, 끝 숫자와 간격은 각각 0과 1로 기본값이 설정되어 있기 때문에 지정되지 않을 경우에는 기본값으로 인식하게 됩니다.
따라서, 다음과 같이 3가지의 방법으로 사용할 수 있습니다.
1) 1개의 정수 지정(1번째 줄의 경우) : 0~n-1까지 숫자 리스트 생성
2) 2개의 정수 지정(2번째 줄의 경우) : a~b-1까지 숫자 리스트 생성
3) 3개의 정수 지정(3번째 줄의 경우) : p~q-1까지 r의 간격을 둔 수열로 숫자 리스트 생성
다음과 같이 일반화할 수도 있겠네요.
반복문 안에 반복문을 넣을 수 있는데요, 이는 중첩 반복문이라고 불립니다.
반복문 내부의 실행문이 반복문인 경우로, 2개의 반복문 각각의 반복 횟수가 각각 a,b회라고 하면 중첩 반복문의 실행 횟수는 a*b회가 됩니다.
다음 예시를 통해, 중첩 반복문에 대해 자세히 알아봅시다. 이는 구구단을 출력하는 코드입니다.
for i in range(2, 10):
for j in range(1, 10):
print(i*j, end=' ')
print('')
[출력 결과]
2 4 6 8 10 12 14 16 18
3 6 9 12 15 18 21 24 27
4 8 12 16 20 24 28 32 36
5 10 15 20 25 30 35 40 45
6 12 18 24 30 36 42 48 54
7 14 21 28 35 42 49 56 63
8 16 24 32 40 48 56 64 72
9 18 27 36 45 54 63 72 81
2개의 반복문이 중첩된 구조에서, 반복문의 변수 i, j가 어떻게 변하는지 확인해 볼까요?
i=2일 때 j=1~9까지 반복,
i=3일 때 j=1~9까지 반복,
...
반복문의 종류(for, while)와 상관없이 중첩시킬 수 있으며, 중첩시키는 횟수 또한 제한이 없습니다.
(하지만, 보통 2중 반복문까지만 사용합니다. 반복문을 너무 많이 중첩시킬 경우 비효율적일 수 있습니다)
마지막으로, continue문에 대해 알아보겠습니다.
위에서 break문을 반복문 내부에서 실행시키면 반복문을 탈출할 수 있다고 했죠?
continue문 또한 break문처럼 반복문을 탈출시키는 역할을 하지만, break문과는 달리 반복문에서 완전히 탈출시키지는 않고 특정 반복 회차만 건너뛸 수 있게 하는 역할을 합니다. 반복문 내부에서 continue문을 만나면 반복문의 처음으로 돌아가게 됩니다.
다음 예시를 통해 continue문에 대해 자세히 알아봅시다.
marks = [90, 25, 67, 45, 80]
number = 0
for mark in marks:
number += 1
if mark < 60:
continue
print(number,"번 학생 축하합니다. 합격입니다!!!")
[출력 결과]
1 번 학생 축하합니다. 합격입니다!!!
3 번 학생 축하합니다. 합격입니다!!!
5 번 학생 축하합니다. 합격입니다!!!
mark < 60인 경우, continue문이 실행되어 합격을 축하하는 문구가 출력되지 않음을 확인할 수 있습니다.
위 코드는 사실 continue문을 사용하지 않고 if~else 문을 사용해 작성할 수도 있지만, 더 복잡한 코드에서는 반복문에서 특정 회차를 건너뛰거나 할 때 실행문의 코드를 실행하지 않고 건너뛰기 위해 continue문을 사용하는 일이 많습니다.
지금까지 반복문에 대해서 알아보았습니다.
< 참고자료 및 예시 코드 출처 >
- 혼자 공부하는 파이썬(윤인성)
- 점프 투 파이썬(박응용)
'달구는 오늘도 코딩중!' 카테고리의 다른 글
[Pandas] DataFrame의 구조 (2) | 2024.01.09 |
---|---|
[Python] 함수 (0) | 2023.08.01 |
[Python] 집합 자료형 (0) | 2023.07.13 |