Python | 반복문 while문과 for문

Sua·2020년 12월 22일
0

Python

목록 보기
10/28
post-thumbnail
post-custom-banner

반복문

왜 사용하지?

반복이란 같은 작업을 여러 번 실행하는 것이다. 이런 반복 작업은 힘도 들고 실수하기도 쉽다. 하지만 컴퓨터는 몇 번이든 정확하게 해낼 수 있다. 우리가 할 일은 컴퓨터가 정확하게 반복 작업을 수행할 수 있도록 프로그램을 만드는 것 뿐이다.

반복문을 작성할 때 생각해야 할 것

반복 작업을 프로그래밍할 때는 전체 반복을 생각하기보다 반복의 ‘한 주기’에서 일어나는 일이 무엇인지 생각해야 한다. 한 주기를 정확하게 수행해 내는 것이 핵심이고, 그 주기를 몇 번 반복할 것인지는 부차적이다.


while문이란?

while문은 조건이 유지되는 동안 계속 반복한다.

while문은 반복 횟수가 정해져 있지 않을 때 지정한 조건이 유지되는 동안 코드를 계속 반복하는 명령이다.

while 조건:   # 첫 행
    본문      # 조건이 참인 동안 반복 실행할 코드 블록

while문과 if문의 비교

while문은 if문처럼 지정된 조건이 참일 때만 본문을 실행한다.
차이는 본문의 코드가 실행되는 횟수다.
if문은 본문을 최대 한 번만 실행하지만, while문은 조건이 참으로 유지되는 동안에는 몇 번이든 조건 검사와 코드 실행을 반복한다.

while문을 어떻게 활용하지?

while문은 기능이 단순해서 사용하기 다소 불편할 때도 있지만, 특별한 제약 없이 다양한 반복 처리를 수행할 수 있다.

반복 횟수 관리하기

i = 0              # 현재 반복된 횟수를 기억하기 위한 변수

while i < 3:       # 조건(i < 3)이 유지되는 동안 본문을 반복 실행하라
    print('안녕')  # 화면에 텍스트를 출력하라 (반복을 통해 수행하려는 일)
    i += 1         # 반복된 횟수가 한 번 증가한 것을 기억하기

컬렉션 순회하기

rainbow = ['Red', 'Orange', 'Yellow', 'Green', 'Blue', 'Indigo', 'Violet']
index = 0                    # 몇 번째 요소를 읽을 차례인지 기억하는 변수

while index < len(rainbow):  # index 변수가 리스트의 길이보다 작은 동안 반복
    print(rainbow[index])    # rainbow 리스트의 index 번째 요소를 화면에 출력
    index += 1               # 다음 요소를 가리키도록 index 값을 1 증가

흐름이 예정되지 않은 반복

text = "아무 메시지나 입력하세요. 그만하려면 '그만'을 입력하세요."
while text != '그만':
    print('컴퓨터: ' + text)
    text = input()
컴퓨터: 아무 메시지나 입력하세요. 그만하려면 '그만'을 입력하세요.
안녕?
컴퓨터: 안녕?
따라하지마
컴퓨터: 따라하지마
그만

사용자가 입력한 텍스트가 ‘그만’이 아닌 동안(즉, 사용자가 ‘그만’을 입력할 때까지) 사용자에게 메시지를 입력받고 화면에 출력하는 것을 반복한다. while문은 어떤 ‘횟수’만큼이 아니라 ‘조건이 유지되는 동안’ 코드를 반복한다. 그러므로 예정되지 않은 반복을 나타내기에도 적합하다.

다음과 같이 다양한 조건을 지정할 수 있다.

  • 사용자가 엔터 키를 누를 때까지
  • 다음 공휴일 자정까지
  • 읽을 파일 내용이 남아있는 동안
  • 서버에서 응답이 올 때까지

무한 반복

while 문의 조건을 잘못 지정하면 무한 반복이 발생할 수 있어 주의해야 한다. 그런데 의도적으로 무한 반복을 발생시키는 경우도 있다. 무한 반복을 발생시킬 때는 while문의 조건으로 True를 지정하는 방법이 가장 좋다.

다음과 같은 상황에서 의도적으로 무한 반복을 발생시킨다.

  • 사용자와 계속 상호작용하는 프로그램
  • 웹 문서를 지속적으로 탐색하며 정보를 수집하는 크롤링 프로그램
  • 음악을 무한 반복 재생하는 프로그램
  • 컴퓨터가 켜진 동안 내내 시스템을 관리하는 운영 체제

while문을 언제 사용하면 좋을까?

while문을 이용하면 모든 반복 상황을 프로그래밍할 수 있지만, 흐름이 예정되지 않은 반복이나 무한 반복을 나타낼 때 특히 유용하다.
작업을 순차적으로 처리하거나 컬렉션을 순회할 때는 for문을 사용하는 것이 더 편리하다.


for문이란?

for문은 while문과 달리 지정한 횟수만큼을 반복할 때 주로 사용된다.
리스트, 문자열, 튜플 등 컬랙션 타입의 아이템을 하나씩 순회하면서 사용한다.

while문이 여러 목적에 활용할 수 있는 범용적인 반복 기능이라면, for 문은 순차적 처리와 컬렉션 순회에 특화된 반복 기능이다. for문을 이용하면 반복 횟수를 관리하는 데 신경을 쓰지 않고 간단히 컬렉션을 순회할 수 있다. 컬렉션에는 리스트, 문자열, 튜플, range 등이 있으며, 컬렉션의 길이만큼 반복한다.

for 변수 in 컬렉션:   # 첫 행
    본문              # 컬렉션의 각 항목마다 반복 실행할 코드 블록

for문을 어떻게 활용하지?

컬렉션 순회하기

rainbow = ['Red', 'Orange', 'Yellow', 'Green', 'Blue', 'Indigo', 'Violet']

for color in rainbow:  
    print(color)       

조건문과 함께 사용하기

a = [1, 10, 3, 4, 5]
for num in a:
    if num % 2 == 0:
        print(num/2)
    else:
        print(num+1)
2
5.0
4
2.0
6

range와 함께 사용하기

# 1부터 10까지의 모든 짝수의 합

total = 0  # 합계
for n in [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]:
    if n % 2 == 0:  # n 이 짝수인 경우,
        total += n  # total에 n을 더함
print(total)
30

for에서 index 사용, enumerate

기본적으로 for에서 리스트를 순회하는 경우, 값만 추출됨
enumerate 함수를 이용하면 인덱스와 값 모두 사용 가능

for i, name in enumerate(['body', 'foo', 'bar']):
    print(i, name)
0 body
1 foo
2 bar

continue와 break

continue와 break는 for문과 while문 둘 다에서 똑같이 사용할 수 있다.

반복문 끝내기 break

반복문에서 break를 사용하면 반복문을 끝낼 수 있다.

break 문은 반복의 한 주기만이 아니라 ‘반복 전체’를 중지시킨다. 사용법은 continue 문과 동일하다.

while 조건식1:
    if 조건식2:
        break    # 반복문을 끝냄

반복문의 코드 건너뛰기 continue

반복문에서 continue를 사용하면 반복문의 일부 코드를 건너뛸 수 있다. 단, 반복문을 끝내지 않고 계속 반복한다.

continue 문은 반복 도중에 ‘한 주기의 실행’을 중지하고 다음 주기로 넘어도록 하는 명령이다.

while 조건식1:
    if 조건식2:
        continue    # 아래 코드를 건너뛴 뒤 계속 반복함
    코드

continue 문과 break 문의 활용

total = 0

while True:                                 # 본문 코드를 무한 반복한다
    print('더할 수를 입력하세요: ', end='')
    user_input = input()
    
    if user_input == '그만':            # '그만'이 입력되면 반복을 종료한다
        break
    
    if not user_input.isnumeric():  # 입력이 수가 아니면 다음 주기로 넘어간다
        print('잘못된 입력입니다.')
        continue
    
    total += int(user_input)
    print('합계:', total)

print('프로그램을 종료합니다.')
더할 수를 입력하세요: 500
합계: 500
더할 수를 입력하세요: 2000
합계: 2500
더할 수를 입력하세요: 안녕
잘못된 입력입니다.
더할 수를 입력하세요: 10000
합계: 12500
더할 수를 입력하세요: 그만
프로그램을 종료합니다.

while문과 for문의 else절

while문에서의 else절

while문에서 else절의 본문은 반복이 정상적으로 종료되었을 때 실행된다.
단, 반복 도중 break 문이 실행되면 else 절의 본문이 실행되지 않는다.

while(조건):
    본문 1     # 조건이 참인 동안 반복 실행할 코드 블록
else:
    본문 2     # 조건이 거짓일 때 실행할 코드 블록

while 문의 else 절은 if 문과 마찬가지로 조건이 거짓일 때 실행할 코드를 포함한다.

i = 0
while(i < 3):
    print(i, '번째 실행')
    i += 1
else:
    print('반복 완료')
0 번째 실행
1 번째 실행
2 번째 실행
반복 완료

while 문은 조건이 거짓이 될 때 반복이 끝나므로, 반복이 끝날 때 항상 else 절의 본문이 실행될 것이라고 생각할 수 있다. 정상적으로 반복이 끝난 경우에는 그렇다. 하지만 break 문을 통해 반복이 종료된 경우에는 ‘조건이 거짓으로 평가’된 것이 아니므로 else 절의 본문이 실행되지 않는다.

i = 0
while(i < 100):
    print(i, '번째 실행')
    i += 1
    if (i > 2):
        print('반복 중지')
        break
else:
    print('반복 완료')
0 번째 실행
1 번째 실행
2 번째 실행
반복 중지

for문에서의 else절

for문에서 else절의 본문은 순회가 정상적으로 종료되었을 때 실행된다.
단, 반복 도중 break 문이 실행되면 else 절의 본문이 실행되지 않는다.

for 변수 in 컬렉션:
    본문 1        # 컬렉션의 각 항목마다 반복 실행할 코드 블록
else:
    본문 2        # 반복이 정상 종료된 직후 실행할 코드 블록

for 문의 else 절은 전체 반복 과정이 정상적으로 종료된 직후에 본문의 코드를 실행한다. break 문으로 반복이 중지된 경우는 정상적인 종료가 아니므로 else 문의 본문이 실행되지 않는다.

반복에서 else절의 활용

단순히 반복이 끝난 후에 코드를 실행해야 한다면 else 절을 사용할 필요 없이 그저 while 문과 for 문의 다음 행에 그 코드를 입력하면 된다. else 절의 가치는 반복이 정상적으로 종료되었는지 아니면 임의로 중지되었는지를 구분하는 데 있다.

다음은 이를 활용해 수 리스트에서 첫 번째 짝수를 찾아내는 프로그램이다.

def 첫_짝수_찾기(numbers):
    """numbers에서 첫 번째 짝수를 찾아 화면에 출력한다."""
    for n in numbers:
        if n % 2 == 0:
            print(n, '이 첫 짝수입니다.')
            break;
    else:
        print('짝수가 없습니다.')

첫_짝수_찾기([1, 3, 5, 33, 47, 55])
첫_짝수_찾기([7, 5, 6, 72, 19, 81])
짝수가 없습니다.
6 이 첫 짝수입니다.

본 포스팅은 아래의 사이트를 참고하여 작성되었습니다.
연오의 파이썬 https://python.bakyeono.net/chapter-6.html
코딩도장 https://dojang.io/
점프투파이썬 https://wikidocs.net/book/1

profile
Leave your comfort zone
post-custom-banner

0개의 댓글