달구는 오늘도 코딩중!

[Python] 반복문

austin lee 2023. 7. 2. 17:42

반복문이란,

프로그램 내에서 똑같은 명령을 일정 횟수만큼 반복하여 수행하도록 제어하는 명령문입니다.

 

파이썬에서는 크게 2종류의 반복문이 존재하는데요, 바로 while문과 for문 입니다.


1. while문

 

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의 간격을 둔 수열로 숫자 리스트 생성

다음과 같이 일반화할 수도 있겠네요.

range 함수 일반화

반복문 안에 반복문을 넣을 수 있는데요, 이는 중첩 반복문이라고 불립니다.

반복문 내부의 실행문이 반복문인 경우로, 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