Python 제어 흐름 (Control Flow)

PythonBeginner
지금 연습하기

소개

제어 흐름 (Control flow) 은 개별적인 구문 (statement), 명령어 (instruction) 또는 함수 호출이 실행되거나 평가되는 순서를 의미합니다. Python 프로그램의 제어 흐름은 조건문, 반복문, 그리고 함수 호출에 의해 규제됩니다.

본 랩 (lab) 에서는 Python 에서 프로그램 실행을 제어하는 핵심 개념들을 학습합니다. if 문을 사용한 조건부 논리, 다양한 연산자들, 새로운 match-case 문, 그리고 while 및 for 반복문을 사용한 반복 (iteration) 을 탐구하게 됩니다. 본 랩이 끝날 때쯤이면, 여러분은 더욱 동적이고 강력한 Python 프로그램을 작성할 수 있게 될 것입니다.

비교 및 부울 연산자 (Comparison and Boolean Operators)

이 단계에서는 비교 연산자와 불리언 연산자를 사용하여 논리 표현식을 구성하는 방법을 배웁니다. 이러한 표현식은 True 또는 False로 평가되어 프로그램의 진행 방식을 결정하므로 제어 흐름의 기본이 됩니다.

비교 연산자 (Comparison Operators)

비교 연산자는 두 값을 비교하는 데 사용됩니다. 일반적인 비교 연산자 표는 다음과 같습니다.

연산자 의미
== 같다 (Equal to)
!= 같지 않다 (Not equal to)
< 보다 작다 (Less than)
> 보다 크다 (Greater Than)
<= 보다 작거나 같다 (Less than or Equal to)
>= 보다 크거나 같다 (Greater than or Equal to)

이러한 연산자는 True 또는 False로 평가됩니다. 예를 들어, 42 == 42는 True이지만, 타입 (정수와 문자열) 이 다르므로 42 == '42'는 False입니다.

불리언 연산자 (Boolean Operators)

세 가지 불리언 연산자, 즉 and, or, not이 있습니다. 이들은 불리언 값을 결합하거나 반전시키는 데 사용됩니다. 연산자 우선순위는 not, and, 그 다음 or 순서입니다.

and 연산자는 두 표현식 모두 참일 때만 True를 반환합니다. or 연산자는 표현식 중 하나라도 참이면 True를 반환합니다. not 연산자는 불리언 값을 반전시킵니다 (not True는 False가 됩니다).

연산자 혼합 사용

비교 연산자와 불리언 연산자를 결합하여 더 복잡한 논리 표현식을 만들 수 있습니다.

참고: WebIDE(VS Code 와 유사) 사용이 익숙하지 않다면, 이 랩에서 먼저 학습하십시오.

예를 들어:

(4 < 5) and (5 < 6)

출력:

True

이제 이를 연습해 봅시다. 왼쪽 파일 탐색기에서 operators_example.py 파일을 엽니다. 다음 코드를 파일에 추가하십시오. 이 코드는 여러 연산자를 결합하여 단일 불리언 결과를 평가합니다.

## operators_example.py
result = 2 + 2 == 4 and not 2 + 2 == 5 and 2 * 2 == 2 + 2
print(result)

스크립트를 실행하려면 WebIDE 에서 터미널을 열고 다음 명령을 실행하십시오.

python3 operators_example.py

표현식이 True로 평가되므로 다음과 같은 출력을 보게 될 것입니다.

True

If 문과 삼항 연산자 (If Statements and Ternary Operator)

이 단계에서는 특정 조건에 따라 코드 블록을 실행하기 위해 if, elif, else 문을 사용하여 프로그램 흐름을 제어하는 방법을 학습합니다. 또한, 이 단계에서는 간결한 한 줄 조건부 표현식을 작성하기 위한 삼항 조건 연산자 (ternary conditional operator) 를 소개합니다.

if, elif, 그리고 else 문

  • if 문은 해당 조건이 True일 때 코드 블록을 실행합니다.
  • elif (else if) 문은 앞선 if 또는 elif 조건들이 False일 경우 다른 조건을 확인합니다.
  • else 문은 모든 앞선 if 및 elif 조건들이 False일 때 코드 블록을 실행합니다.

기본 구조는 다음과 같습니다:

if condition1:
    ## condition1 이 True 일 때 실행할 코드
elif condition2:
    ## condition1 이 False 이고 condition2 가 True 일 때 실행할 코드
else:
    ## 모든 조건이 False 일 때 실행할 코드

삼항 조건 연산자

삼항 연산자는 간단한 if-else 문을 한 줄로 작성하는 간결한 방법을 제공합니다. 구문은 다음과 같습니다:

<표현식1> if <조건> else <표현식2>

예를 들어, print('kid' if age < 18 else 'adult')는 전체 if-else 블록을 작성하는 압축적인 방법입니다.

이제 전체 조건부 블록 사용을 연습해 봅시다. if_example.py 파일을 열고 다음 코드를 추가하십시오. 이 스크립트는 name 변수의 값을 확인하고 그에 따라 다른 메시지를 출력할 것입니다.

## if_example.py
name = 'Antony'

if name == 'Debora':
   print('Hi Debora!')
elif name == 'George':
   print('Hi George!')
else:
   print('Who are you?')

터미널에서 스크립트를 실행하십시오:

python3 if_example.py

name이 'Antony'이므로 if 조건과 elif 조건 모두 충족되지 않아 else 블록이 실행됩니다.

출력:

Who are you?

Switch Case 문 (Switch Case Statement)

이 단계에서는 Python 3.10 에서 도입된 강력한 switch-case 동등 기능인 구조적 패턴 매칭 (Structural Pattern Matching) 을 탐구합니다. match 및 case 키워드를 사용하여 값 매칭, OR 패턴 사용, 기본 케이스 구현을 연습합니다.

match 문은 표현식을 받아 그 값을 하나 이상의 case 블록으로 제공된 연속적인 패턴과 비교합니다.

기본 매칭

숫자나 문자열과 같은 리터럴 값에 대해 매칭할 수 있습니다.

OR 패턴

| (또는) 연산자를 사용하여 단일 case 내에 여러 리터럴 패턴을 결합할 수 있습니다. 예를 들어, case 200 | 201:과 같습니다.

기본 케이스 (Default Case)

밑줄 기호 (_) 는 와일드카드이며, 다른 어떤 케이스도 일치하지 않을 때 일치하도록 정의하는 기본 케이스로 사용됩니다.

이를 연습해 봅시다. match_example.py 파일을 열고 다음 코드를 추가하십시오. 이 스크립트는 HTTP 응답 코드를 기반으로 동작을 결정하기 위해 match 문을 사용합니다.

## match_example.py
response_code = 800

match response_code:
    case 200 | 201:
        print("OK")
    case 300 | 307:
        print("Redirect")
    case 400 | 401:
        print("Bad Request")
    case 500 | 502:
        print("Internal Server Error")
    case _:
        print("Invalid Code")

터미널에서 스크립트를 실행하십시오:

python3 match_example.py

response_code가 800이므로 특정 케이스 중 어느 것과도 일치하지 않아 기본 케이스 (_) 가 실행됩니다.

출력:

Invalid Code

While 반복문 및 반복 제어 (While Loops and Loop Control)

이 단계에서는 조건이 참인 동안 반복 실행을 위한 while 반복문을 마스터합니다. 또한, 반복을 종료하기 위한 break 문과 현재 반복을 건너뛰기 위한 continue 문을 사용하여 반복 동작을 관리하는 방법을 배웁니다.

while 반복문

while 반복문은 주어진 조건이 True인 한 대상 명령문을 반복적으로 실행합니다. 무한 루프를 방지하기 위해 조건이 결국 False가 되도록 보장하는 것이 중요합니다.

break 문

break 문은 C 언어의 전통적인 break와 마찬가지로 현재 반복문을 종료하고 다음 명령문에서 실행을 재개합니다.

continue 문

continue 문은 반복문의 현재 반복에서 나머지 모든 명령문을 거부하고 제어를 반복문의 맨 위로 되돌립니다.

간단한 while 반복문을 만들어 보겠습니다. while_example.py 파일을 열고 다음 코드를 추가하십시오. 이 스크립트는 메시지를 다섯 번 출력합니다.

## while_example.py
spam = 0
while spam < 5:  ## spam 이 5 보다 작은 동안 계속
    print('Hello, world.')
    spam = spam + 1  ## 무한 루프를 피하기 위해 카운터 증가

이제 터미널에서 스크립트를 실행하십시오:

python3 while_example.py

spam이 5 보다 작은 동안 반복문이 실행됩니다. 각 반복에서 spam은 1 씩 증가합니다.

출력:

Hello, world.
Hello, world.
Hello, world.
Hello, world.
Hello, world.

For 반복문 및 반복 (For Loops and Iteration)

이 단계에서는 리스트나 문자열과 같은 시퀀스 (sequence) 의 항목들을 반복하기 위해 for 반복문을 사용합니다. 이 단계에서는 특정 횟수만큼 반복하기 위해 range() 함수를 사용하는 방법, for 반복문의 선택적 else 블록, 그리고 sys.exit()를 사용하여 프로그램을 완전히 종료하는 방법을 다룹니다.

for 반복문

for 반복문은 시퀀스 (리스트, 튜플, 딕셔너리, 세트 또는 문자열) 를 반복하는 데 사용됩니다.

range() 함수

range() 함수는 숫자 시퀀스를 생성하며, 이는 특정 횟수만큼 반복할 때 유용합니다.

  • range(stop): 0 부터 stop 미만까지의 숫자를 생성합니다.
  • range(start, stop): start부터 stop 미만까지의 숫자를 생성합니다.
  • range(start, stop, step): start부터 stop 미만까지의 숫자를 step 간격으로 생성합니다.

sys.exit()를 사용한 프로그램 종료

sys.exit() 함수를 호출하여 프로그램을 즉시 종료할 수 있습니다. 사용하려면 먼저 import sys를 해야 합니다.

range()와 함께 for 반복문을 사용하는 것을 연습해 봅시다. for_example.py 파일을 열고 다음 코드를 추가하십시오. 이 스크립트는 0 부터 8 까지의 짝수를 출력합니다.

## for_example.py
## range(start, stop, step)
for i in range(0, 10, 2):
   print(i)

터미널에서 스크립트를 실행하십시오:

python3 for_example.py

range(0, 10, 2) 함수는 0 에서 시작하여 2 의 간격으로 10 미만까지의 숫자를 생성합니다.

출력:

0
2
4
6
8

요약

실습을 완료하신 것을 축하드립니다! 이제 Python 의 제어 흐름 (control flow) 에 대한 기본 개념을 숙달하셨습니다.

본 실습에서 다음을 학습했습니다:

  • 논리적 조건을 형성하기 위해 비교 연산자 (comparison operators) 와 부울 연산자 (boolean operators) 를 사용하는 방법.
  • if, elif, else 문과 간결한 삼항 연산자 (ternary operator) 를 사용하여 프로그램 실행을 제어하는 연습.
  • 구조적 패턴 매칭 (structural pattern matching) 을 위해 Python 3.10 의 강력한 match-case 문 탐색.
  • while 및 for를 사용하여 반복문을 생성하고 break 및 continue를 사용하여 반복 동작을 제어하는 방법 학습.

이러한 기술을 통해 이제 결정을 내리고 작업을 반복할 수 있는 더 복잡하고 지능적인 Python 프로그램을 작성할 수 있습니다.