python

[7장] 반복문

hoazzinews 2024. 11. 29. 09:28

프로그램에서 반복문은 조건문과 함께 프로그램의 흐름을 제어하는 제어문 중 하나입니다. 이번 장에서는 연속적이고, 동일한 업무를 반복 수행할 수 있는 반복문에 대해 살펴봅니다.

파이썬에서는 반복문으로 for문과 while문을 제공합니다. 먼저 for문을 살펴보고 다음으로 while문을 살펴보겠습니다.  

 

1. for문

반복문으로 가장 많이 사용하는 구문은 for문입니다. for문은 횟수에 의한 반복문으로 for~in키워드, iterable객체, item, 콜론(:) 그리고 실행문으로 구성됩니다. 다음은 for문의 기본 구조입니다.

for i in range(0, 5, 1):
    print('i: ' + str(i))

for~in: 반복문을 나타내는 키워드로 '~하는 동안 반복해라!'의 의미를 가지고 있습니다.

range(0, 5, 1): 반복 범위로 '0부터 4(5-1)까지 1씩 증가'를 의미합니다.

i: 반복 아이템(item)입니다.

print('i: ' + str(i)): 반복하는 동안 실행하는 실행문입니다.

 

 iterable객체는 반복가능한 데이터를 말합니다. (ex. range(), 문자열, 리스트 등)

 

위의 코드를 해석하면 '0부터 4까지 1씩 증가하면서 총 5회 반복하면서 i값 을 출력해라!'입니다. 즉 range(0, 5, 1)에 의해서 0부터 4(5-1)까지 순차적으로 i변수에 값이 할당되고 실행문에서 i값을 출력합니다.

 

※ 참고. range()에 대해서 낯설 수 있습니다. 뒤에서 자세히 살펴볼 텐데요, 우선은 반복의 범위를 설정한다고 이해합니다.

 

for문에 익숙해 지기 위해서 다른 예를 살펴보겠습니다. 다음은 구구단의 2단을 출력하는 코드입니다.

for i in range(1, 10, 1):
    print('2 * ' + str(i) + ' = ' + str(2 * i))

range(1, 10, 1)에 의해서 1부터 9까지 1씩 증가하면서 총 9회 반복을 진행합니다. 그리고 실행문에서는 2에 i의 값을 곱해서 출력합니다. 결국 2단이 출력됩니다.

 

하나 더 살펴보겠습니다. 다음은 1부터 30까지의 정수 중에서 3의 배수에 해당하는 숫자만 출력하는 코드입니다.

for i in range(1, 31, 1):
    if i % 3 == 0:
        print(str(i) + '는 3의 배수입니다.')

range(1, 31, 1)에 의해서 1부터 30까지 1씩 증가하면서 총 30회 반복을 진행합니다. 그리고 실행문에서는 i를 3으로 나눈 나머지가 0과 같으면 i를 출력합니다. 즉 3의 배수만 출력합니다.

 

2. range() 기본 사용 방법

range()는 범위를 설정하는 함수로 범위의 '시작'과 '끝' 그리고 '단계'를 이용합니다.

range(1, 10, 1)

1: 범위의 시작을 나타내는 값입니다.

10: 범위의 끝을 나타내는 값으로 '10'보다 '1'작은 '9'를 반복의 끝으로 설정합니다.

1: 시작(1)부터 끝(9)까지 반복하면서 증감되는 단계를 나타내는 값으로 지금은 '1'씩 증가합니다.

 

위의 코드를 1부터 9까지 2씩 증가는 범위를 설정하는 코드로 변경하면 다음과 같습니다.

range(1, 10, 2)

 

만약 10부터 1까지 1씩 감소하는 반복 범위를 설정하려면 어떻게 할까요?

range(10, 0, -1)

위 코드는 10부터 시작에서 0이전의 값인 1까지 범위를 설정합니다. 그리고 단계를 '-1'로 설정합니다.

 

for i in range(10, 0, -1):
    print('i: ' + str(i))

 

3. range() 단축 사용 방법

range()를 이용할 때 '단계'와 '시작'을 생략할 수 있습니다.

 

3-1. 단계 생략

range()를 이용할 때 '단계' 값이 '1'인 경우 생략 가능합니다.

# 0부터 4까지 1씩 증가하면서 총 5회 반복한다.
for i in range(0, 5, 1):
    print('i: ' + str(i))

위의 코드는 1씩 증가하는 반복문입니다. 이렇게 1씩 증가하는 경우 '단계'를 생략할 수 있습니다. 다음은 '단계'를 생략한 코드입니다.

# 0부터 4까지 1씩 증가하면서 총 5회 반복한다.
for i in range(0, 5):   # 단계 생략
    print('i: ' + str(i))

 

  3-2. 시작 생략

range()를 이용할 때 '시작' 값이 '0'인 경우 생략 가능합니다. 단, '시작'을 생략하려면 '단계'가 생략돼있어야 합니다.

# 0부터 4까지 1씩 증가하면서 총 5회 반복한다.
for i in range(5):   # 시작과 단계 생략
    print('i: ' + str(i))

위의 코드는 0부터 4까지 1씩 증가하는 반복문으로, '시작'과 '단계'가 생략된 코드입니다.

 

다음은 '시작'과 '단계'를 생략한 코드와 의미입니다.

range(1, 5, 2)			# 1부터 4까지 2씩 증가한다.
range(1, 5)			# 1부터 4까지 1씩 증가한다.
range(5)			# 0부터 4까지 1씩 증가한다.

 

 

4. for문과 문자열

for문을 이용할 때 range()대신 문자열을 이용할 수 있습니다.

for c in 'Good morning':
    print(c)

위 코드는 range()대신 문자열('Good morning')을 사용했습니다. 이렇게 하면 문자열의 길이(12) 만큼 반복되며, 반복할 때마다 문자 하나가 c변수에 할당됩니다. 

 

※ for문에서 in 다음에는 range() 또는 문자열 외에도 반복 가능한 데이터라면 어떤 것이든 상관없습니다. 우리가 아직 학습하지 않았지만 수학 시간에 배운 배열 등과 같은 데이터도 올수 있습니다. 추후 컨테이너 자료형을 학습할 때 다시 살펴보겠습니다.

 

5. while문

for문이 횟수에 의한 반복문이라면 while문은 조건식에 의한 반복문입니다.

 

※참고. 일반적으로 반복 횟수가 정해져 있는 경우 for문을 사용하고, 반복 횟수가 정해지지 않은 경우에 while문을 사용합니다.

예를 들어 메일을 회원 100명에게 발송한다면 for문을 사용하고, 학생의 시험 성적이 90을 넘을 때까지 학습지를 발송한다면 while문을 사용합니다.

 

whie문은 while 키워드, 조건식, 콜론(:) 그리고 실행문으로 구성됩니다.

i = 0
while i < 5:
    print('i: ' + str(i))
    i += 1

while: 반복문을 나타내는 키워드로 '조건식의 결과가 True인 동안 반복해라!'의 의미를 가지고 있습니다.

i < 5: 반복을 실행하기 위한 조건식으로 조건식의 결과가 True라면 실행문이 실행합니다.

 

while조건식의 결과가 True이면 ~을 반복 실행해라!’의 뜻을 가지고 있습니다. 따라서 반복 횟수는 모르지만 조건이 True인 동안 반복 실행합니다.

 

while문에 익숙해 지기 위해서 다른 예를 살펴보겠습니다. 다음은 시험 성적이 90을 넘을 때까지 '학습지 발송!'을 출력하는 코드입니다.

# 시험 성적이 90을 넘을 때까지 학습지 발송한다.
score = 50
while score <= 90:
    print('학습지 발송!')
    score += 10

반복될때 마다 score의 값이 10씩 증가됩니다. 그리고 score가 90넘는 순간 반복문을 중단 합니다.

 

6. 무한 반복

while문을 사용할 때 조심해야 하는 부분이 있습니다. 조건식의 결과가 항상 True라면 while문을 영원히 실행하게 됩니다. 이를 '무한 반복(loop)'이라고 합니다.

num = 0
while num < 10:
    print('num: ' + str(num))

위 코드는 문제가 없어 보입니다. 물론 실행도 됩니다. 하지만 while문이 종료되지 않는 문제가 있습니다. 이유는 조건식의 결과가 항상 True이기 때문입니다. num의 값이 항상 0이므로 while문은 종료되지 않고 무한 반복 실행하게 됩니다.

 

다음은 while문에서 num 값을 증가시켜 while문이 종료되도록 수정한 코드입니다.

num = 0
while num < 10:
    print('num: ' + str(num))
    num += 1

while문에서 num이 1씩 증가하기 때문에 num의 값이 10이 되면 조건식의 결과가 False가 되고 while문은 종료됩니다.

 

개발자는 while문을 사용할 때 뜻하지 않게 '무한 반복'이 발생하지 않도록 주의해야 합니다.

 

7. continue 키워드

continue는 이번 실행을 생략하고 다음 실행으로 건너뛰는 기능입니다.

for i in range(1, 11):
    if i % 2 == 0:
        continue    # i가 짝수라면 이번 실행을 건너뛴다.
    print('i: ' + str(i))

위 코드는 1부터 10까지 1씩 증가하면서 반복하는데요, 만약 i가 짝수라면(if i % 2 == 0:) continue에 의해서 이번 실행을 건너뜁니다. 즉 print('i: ' + str(i))를 실행하지 않고 다음 반복이 진행됩니다. 다음은 실행 결과로 i가 짝수인 경우 i를 출력하지 않아 홀수만 출력됐습니다.

 

8. break 키워드

break 키워드는 실행을 중단하고 반복문을 종료하는 기능이 있습니다.

for i in range(1, 11):
    if i > 5:
        break    # i가 5보다 크다면 for문을 종료한다.
    print('i: ' + str(i))

위 코드는 1부터 10까지 1씩 증가하면서 반복하는데요, 만약 i가 5보다 크다면 반복 횟수가 남아 있더라도 for문을 종료합니다.

 

 

9. for ~ else문

for ~ else문는 for문의 반복 업무를 모두 완료하고 난후 else문이 실행됩니다. 다음은 1부터 5까지 정수를 출력하고 반복문이 끝나면 완료 메시지를 출력하는 코드입니다.

for i in range(1, 6):
    print(i)
else:
    print('for문 종료!!')

 

만약 for문 안에 반복을 중단하는 break가 있다면 어떻게 될까요?

for i in range(1, 6):
    if i > 4:
        break
    print(i)
else:
    print('for문 종료!!')

위 코드는 i가 4보다 크다면 break를 실행하고 반복문을 중단하게 됩니다. 이렇게 하면 반복문을 완전하게 빠져나오기 때문에 else문도 실행되지 않습니다.

 

이번 시간에는 파이썬 프로그램의 실행을 반복하는 반복문에 대해서 살펴봤습니다.

 

이전 글: [6장] 조건문

다음 글: [8장] 리스트 - I

'python' 카테고리의 다른 글

[9장] 리스트 - II  (1) 2024.12.01
[8장] 리스트 - I  (1) 2024.11.29
[6장] 조건문  (0) 2024.11.28
[5장] 연산자  (0) 2024.11.27
VSCode 폰트 크기 및 테마 변경  (0) 2024.11.26