본문 바로가기

KT 에이블스쿨

[KT AIVLE SCHOOL 7기] 파이썬 기초 (4) 반복문

[KT AIVLE SCHOOL 7기] 파이썬 기초 (4) 반복문

 

1. 반복문

: 반복문은 동일한 작업을 반복시켜야 할 때 사용합니다. 직접 모든 반복 횟수마다 코드를 작성하는 것보다 간단하며 반복 횟수를 유연하게 조정할 수 있으며, 효율적이고 유지보수가 편리한 코드를 만드는데 필수적입니다.

이는 대량 데이터 처리, 자동화 작업, 사용자 입력 처리 등 다양한 상황에서 활용됩니다.

 

2. while 문(While Loop)

: while 문은 특정 조건이 참(True)인 동안 코드 블록을 반복 실행하는 제어문입니다. while문은 반복 횟수가 정해지지 않은 경우 사용하는 반복문입니다. 사용자의 입력을 계속 받는 경우, 특정 조건을 만족할 때까지 반복해야 할 경우 사용됩니다.

 

while문의 기본 문법은 다음과 같습니다.

while {조건식}:
    {실행할 코드}

 

예를 들면 다음과 같습니다.

num = 0

while num < 5:
    num += 1  # num을 1씩 증가
    print(num)

 

 

최초 num의 값은 0입니다.

'while num <= 5:'은 num이 5 미만일 때만 반복하겠다는 조건문입니다. 이 조건이 참이면 반복이 실행되고 거짓이 되면 반복이 종료됩니다. 'num +=1'로 현재 num 값에 1을 더해줍니다. 그 후 'print(num)'을 통해 현재 num값을 출력합니다.

이를 수행한 결과는 다음과 같습니다.

num 조건문 조건 판단 수행 결과 while 문
0 0 < 5 1 반복
1 1 < 5 2 반복
2 2 < 5 3 반복
3 3 < 5 4 반복
4 4 < 5 5 반복
5 5 < 5 거짓   반복 종료

 

 

num += 의 결과가 이 5가 되면 while의 조건(num < 5)이 거짓이 되어 반복이 종료됩니다.

 

 

2. for 문(For Loop)

: for문은 시퀀스(리스트, 튜플, 문자열 등)의 각 요소를 순회하며 반복 작업을 수행할 때 사용됩니다. 이는 코드의 가독성을 높이고, 반복 작업을 간결하게 표현할 수 있게 해줍니다.

 

for문의 기본 문법은 다음과 같습니다.

for {변수} in {시퀀스}:
    {실행할 코드}

 

  • 시퀀스: 리스트, 튜플, 문자열, 딕셔너리, 집합과 같은 반복 가능한 객체 또는 range()를 통해 반복시킨 객체
  • 변수: 시퀀스에서 하나씩 꺼낸 값을 저장하는 임시 변수
  • 실행할 코드: 반복 실행할 코드

예를 들면 다음과 같습니다.

Heroines = ['유다혜', '최미나', '송아라', '소희', '김윤아']

for Selected_Characters in Heroines:
    print(Selected_Characters)
    
결과
유다혜  
최미나  
송아라  
소희  
김윤아

 

위 코드는 Heroines 리스트에 있는 캐릭터의 이름을 하나씩 꺼내어 출력을 반복하도록 하는 for문입니다.

 

튜플 리스트를 순회시킬 수도 있습니다.

pairs = [(1, 2), (3, 4), (5, 6)]
for (first, second) in pairs:
    print(first + second)
    
결과
3
7
11

 

각각의 튜플을 first, second로 나누어 더한 값을 출력하게 되는 for문입니다.

 

range()와 함께 사용하는 예시는 다음과 같습니다.

for i in range(1, 6):
    print(i)

결과
1
2
3
4
5

 

enumerate()와 함께 사용한 경우는 다음과 같습니다.

for index, fruit in enumerate(fruits):
    print(f"{index + 1}번째 과일: {fruit}")
    
결과
1번째 과일: 사과  
2번째 과일: 바나나  
3번째 과일: 포도

 

 

enumerate(fruits)는 fruits 리스트에서 (인덱스, 과일 이름) 쌍을 순서대로 꺼냅니다. index는 0부터 시작하므로, 출력할 땐 index + 1로 1부터 표시합니다. 각 과일을 "n번째 과일: 과일이름" 형식으로 출력합니다.

 

 

3-1. 반복문 흐름 제어(break)

 

: while은 반복 횟수가 정해져 있지 않은 경우 사용되므로 무한 반복(또는 무한 루프)에 빠질 수 있습니다.

이를 막기 위해 break문을 사용합니다. 예를 들어 설명해드리겠습니다.

while문 예시는 다음과 같습니다.

while True:
    num = int(input("숫자를 입력하세요 (0을 입력하면 종료): "))
    
    if num == 0:
        print("프로그램을 종료합니다.")
        break  # 반복문 즉시 종료
    
    print(f"입력한 숫자는 {num}입니다.")

 

무한 반복을 시작하기 위해 조건을 항상 참으로 설정합니다.

input()을 통해 사용자로부터 숫자를 입력받고 이를 정수형으로 변환합니다. 여기에 조건문(if)을 걸어 사용자가 0을 입력하면 break를 실행하여 반복문을 즉시 종료합니다. 0이 아닌 경우에는 입력한 숫자를 그대로 출력하고 반복문을 계속하게 됩니다.

 

여기서 if문과 break를 이용해 0을 입력하면 무한 반복을 종료할 수 있도록 만들어주었습니다.

저는 공부를 진행 중에 if  ~ break 문장이 print() 뒤로 가도 동일한 결과가 나올지 궁금했는데요?

 

채찍피티에게 물어본 결과 '기능적으로 비슷하나, 출력 순서의 차이가 있어 동일한 코드는 아니다'라는 답변을 받았습니다. 이를 여러분께 알려드리겠습니다.

(편의상 위의 코드를 1번, 아래 순서를 바꾼 코드를 2번이라 하겠습니다.)

 

먼저 1번 코드의 흐름을 다시 설명드리면 다음과 같습니다. 

  • 사용자가 숫자를 입력함
  • 0인지 먼저 확인
    • 0이면 종료 메시지를 출력하고 바로 break
    • 아니면 숫자를 출력함

즉, 0을 입력했을 때는 숫자 출력 없이 바로 종료합니다.

while True:
    num = int(input("숫자를 입력하세요 (0을 입력하면 종료): "))
    
    print(f"입력한 숫자는 {num}입니다.")

    if num == 0:
        print("프로그램을 종료합니다.")
        break  # 반복문 즉시 종료

 

2번 코드의 흐름은 다음과 같습니다.

  • 사용자가 숫자를 입력함
  • 입력한 숫자를 먼저 출력
  • 그 다음에 0인지 확인
    • 0이면 종료 메시지를 출력하고 종료

이 경우에는 0을 입력해도 "입력한 숫자는 0입니다."가 먼저 출력됩니다.

 

더보기

for문 예시는 다음과 같습니다.

for i in range(1, 11):
    print(i)
    if i == 5:
        print("5를 찾았습니다. 반복을 종료합니다.")
        break

결과
1  
2  
3  
4  
5  
5를 찾았습니다. 반복을 종료합니다.

 

range(1, 11)이면 원래는 1부터 10까지 출력되지만, 5까지만 출력되고 i가 5일 때 break가 실행되며 반복이 그 즉시 멈춥니다.

 

3-2. 반복문 흐름 제어(continue)

: continue는 반복문 안에서 현재 반복을 건너뛰고, 다음 반복을 바로 시작하도록 만드는 명령어입니다.

이는 후에 for 문에서도 사용됩니다.

 

예를 들면 다음과 같습니다.

 

for i in range(1, 6):
    if i == 3:
        continue  # i가 3이면 아래 코드 실행하지 않고 다음 반복으로 넘어감
    print(i)
    
결과
1
2
4
5

 

1부터 5까지 출력하되, 3는 건너뛰도록 작성되었습니다.

 

시험 점수 평가를 예시로 들면 다음과 같습니다.

scores = [85, 42, 90, 58, 77]

for score in scores:
    if score < 60:
        continue  # 60점 미만이면 축하 메시지를 생략
    print(f"{score}점 - 합격입니다!")
    
결과
85점 - 합격입니다!
90점 - 합격입니다!
77점 - 합격입니다!

 

60점이 넘어야 "{score}점 - 합격입니다!"라는 문자열이 출력되도록 조건문을 넣었고 score가 60점 미만일 경우 print()를 생략하도록 하여 42, 58점의 경우 출력되지 않는 것을 볼 수 있습니다.

 

3- α. f-string

: 지금까지 설명드린 코드를 보면 "{score}점 - 합격입니다!" 앞에 f가 붙어 있는 것을 볼 수 있습니다.

이는 f-string을 사용한 것으로 파이썬의 문자열 포매팅 기능 중 하나입니다. 문자열 안에 변수나 표현식을 바로 넣을 수 있게 해주는 문법으로 파이썬 3.6 이상부터 사용이 가능하다고 합니다.

 

기본 문법은 다음과 같습니다.

: 문자열 앞에 f를 붙이고, 중괄호 {} 안에 변수나 수식을 넣으면 실행 시 해당 값으로 자동으로 치환됩니다.

 

위의 시험 점수 평가에서  f"{score}점 - 합격입니다!" 를 해석하면 다음과 같습니다.

문자열 앞에 f가 붙었으니 문자열 안의 score 변수에 들어 있는 값이 문자열로 자동으로 삽입된다.

 

이를 사용하지 않을 경우 변수를 따로 선언하고 문자열을 출력하도록 해당 문자열을 포함한 변수도 따로 선언해주어야 하는데, f-string을 사용하면 그 작업을 생략할 수 있습니다.