이번 포스트에서는 파이썬의 프로그램 실행 제어에 대해서 다뤄보도록 하겠습니다.
프로그램 실행 제어란 무엇인가?
파이썬의 프로그램 실행 제어는 프로그램 실행 중간의 다양한 상황에 따라 다른 기능을 수행할 수 있도록 구성된 것입니다. 대표적인 예시로는 조건식(conditional expression), 조건문(conditional statement), 반복문(while-loop, for-loop), 예외처리가 있습니다.
기본적으로 조건식을 만들기 위해서 필요한 것이 바로 연산자라는 것입니다. 다음은 조건식 관련 연산자들을 정리해놓은 표입니다.
연산자의 분류 |
연산자 | 의미 |
관계 연산자 (relationship) | > | a > b : a가 b보다 크면 True, 아니면 False |
>= | a >= b : a가 b보다 같거나 크면 True, 아니면 False | |
< | a < b : a가 b보다 작으면 True, 아니면 False | |
<= | a <= b : a가 b보다 같거나 작으면 True, 아니면 False | |
== | a == b : a와 b가 같으면 True, 아니면 False | |
!= | a != b : a와 b가 다르면 True, 아니면 False | |
논리 연산자 (logical) |
and (논리 곱) | A and B : A와 B가 모두 True이면 True, 아니면 False |
or (논리 합) | A or B : A나 B 둘 중 하나가 True이면 True, 아니면 (즉, A와 B 모두 False이면) False | |
not (논리 역) | not A : A가 True이면 False, A가 False이면 True | |
Ternary selection |
x if condition else y | 조건에 따라 선택 max = x if x > y else y; (만약 x가 y보다 크면 x를 선택, 아니면 y를 선택) |
이어서 파이썬의 조건문에 대해서 배워보겠습니다. 파이썬에서의 조건문은 크게 if, if-else, if-elif-else로 나눌 수 있습니다. 각각의 로직은 다음 그림과 같습니다.
즉 if에는 첫번째 경우, elif에는 그 다음 경우, else에는 if와 elif를 제외한 모든 경우를 의미한다.
다음과 같은 요구사항이 있다고 가정하자.
90점 이상이면 A, 80점 이상이면 B, 그 외는 전부 C학점을 준다.
이는 파이썬의 조건문으로 구현하면 다음과 같습니다.
score = int(input("What's your score: "))
if score > 90:
print("A")
elif score > 80:
print("B")
else:
print("C")
여기서 score에 100을 입력하고 실행해보면
A라는 값이 출력된 것을 확인할 수 있습니다.
이어서 파이썬의 반복문에 대해서 배워보겠습니다. 앞서 설명했듯이 파이썬의 반복문은 크게 while-loop와 for-loop로 분류할 수 있다고 했습니다. 우리는 이것을 흔히 "while문"과 "for문"이라고도 부릅니다.
while 반복문의 기본 구조는 다음과 같습니다.
- 조건식에서 사용되는 조건의 초기값 설정
- 조건식이 만족하는 동안 while문 실행
- while문 내부에서 조건식의 update가 반드시 있어야 함
간단한 예제를 통해 while문을 보겠습니다.
L = list() # 리스트 생성
print("Input integers (-1 to end)") # 코드 내용 출력
x = int(input("data : ")) # 사용자로부터 입력을 받아 x변수에 저장
count = 0 # count를 0으로 초기화
while x >= 0: # 사용자가 입력한 x값이 0보다 클 때 무한 반복
L.append(x) # L리스트에 x값 추가
count += 1 # count를 1 증가
x = int(input("data : ")) # 다시 사용자로부터 입력을 받아 x변수에 저장
print(f"Input data : {L}") # 리스트 내용 출력
코드에 주석문을 추가했지만 간단히 설명하자면 사용자로부터 입력을 계속 받아서 리스트에 저장하는 코드입니다.. 단 사용자가 0보다 작은 수를 입력하면 즉시 종료합니다.
코드 실행 결과는 다음과 같습니다.
또한 while문을 구성할 때 그 내부에 break와 continue를 사용해서 while문을 빠져나오거나 나머지 내용을 생략하게 할 수도 있습니다.
break와 continue에 대한 정리는 다음과 같습니다.
반복문 | 설명 |
condition initialize while condition: statements condition update |
- 먼저 while 반복문 조건식의 초기화를 실행 - 조건식의 연산 결과가 True이면 while 반복문 실행 - while 반복문 내에서 조건식을 update |
while condition1: if condition2: break if condition3: continue statements |
- 만약 condition1이 True이면 while 반복문 실행 - 만약 condition2가 True이면 while 반복문을 중단하고 빠져 나감 - 만약 condition3이 True이면 continue 이후 구간을 생략하고 while 반복문 계속 실행 |
마지막으로 for 반복문에 대해서 배워보겠습니다.
for 반복문의 기본 구조는 다음과 같습니다.
- 변수가 지정된 영역에 있는 경우 반복문 수행
- 변수는 반복문을 실행할 때마다 갱신되어야 함
- 변수가 주어진 조건을 만족하지 않을 때 for 반복문을 벗어남
간단한 예제를 통해 살펴보겠습니다.
n = int(input("Input n to calculate sum of [0..n] : ")) # 사용자로부터 입력을 받아 n변수에 저장
n_sum = 0 # n의 총합을 0으로 초기화
for i in range(0, n + 1): # for문을 0(첫 번째 인자) ~ n + 1(두 번째 인자) - 1까지 수행, 그 값을 i에다가 넣음
n_sum += i # n_sum 변수에 i값을 추가
print(f"Sum of [0..{n}] = {n_sum}") # 총합 출력
주석문에 보태 좀 더 설명하자면 for문을 만드는데, 범위는 0부터 (n + 1) - 1까지입니다. 그러면 n을 10이라고 가정하면 for문은 차례대로 0, 1, 2, 3, ..., 10까지 증가하게 됩니다. 그리고 0~10까지는 i라는 변수에 들어가게 됩니다. 즉, 첫 번째 for문: i = 0, 두 번째 for문: i = 1, ..., 열한 번째 for문: i = 10입니다.
실제 코드를 실행하고 10을 넣은 결과는 다음과 같습니다.
또한 for문에서도 while문처럼 break와 continue를 사용할 수 있습니다.
for문에서의 break와 continue에 대한 정리는 다음과 같습니다.
반복문 | 설명 |
for n in sequence_type_object: statements |
- 시퀀스 객체에 있는 원소들을 차례로 사용하면서 for 반복문을 실행 |
for n in sequence_type_object: if condition1: break if condition2: continue statements |
- 시퀀스 객체에 있는 원소들을 차례로 사용하면서 for 반복문을 실행 - 만약 condition1이 True이면 for 반복문을 중단하고 빠져 나감 - 만약 condition2가 True이면 continue 이후 구간을 생략하고 for 반복문 계속 실행 |