Python 기초

조건문

개요

우리가 문제를 해결할 때 어떤 조건에 따라 두 개 또는 여러 개의 실행 경로 가운데 하나를 선택해야 하는 경우가 있습니다.

예를 들어 전구가 작동하지 않을 때 전구가 꽂혀 있는지, 전구가 탔는지에 대한 의심을 해볼 수 있는데 이를 순서도로 그리면 아래 그림과 같습니다.

순서도에 대한 이미지 검색결과

프로그램도 외부에서 들어오는 정보에 따라 많은 선택을 하게 됩니다.

이런 식으로 조건에 따라 결정을 내리는 문장을 조건문이라고 하는데 if-else 문은 조건에 따라 2개 중 하나를 선택하는 경우에 사용됩니다.

 

예를 들어 성적이 60점 이상이면 합격, 60점 미만이면 불합격으로 처리해야 한다고 합시다. 파이썬으로 아래의 예제를 작성해봅시다.

if score >= 60:
	print("합격입니다.")
else:
	print("불합격입니다.")

 

코드를 한 줄씩 살펴보겠습니다.

if score >= 60:   

이 문구가 조건식입니다. 콜론은 아직 문장이 종료되지 않았다는 것을 의미합니다.
 

    print("합격입니다.")

조건식이 참일 때 실행되는 문장이며 then 절이라고 합니다. if문에 해당하는 then 절은 반드시 들여쓰기를 해야 합니다.

 

else:      

'그렇지 않으면' 이라는 의미입니다.

 

    print("불합격입니다.")

조건식이 거짓일 때 실행되는 문장이며 else 절이라고 합니다. then 절과 마찬가지로 들여쓰기를 해야 합니다.

 

if-else 문장은 "만약 조건이 참이면 이것을 실행하고, 조건이 참이 아니라면 실행한다." 라고 말하는 것과 같습니다.

if-else 문에서 조건을 수식으로 표현하는 데 이것을 '조건식'이라고 합니다.

 

일반적으로 조건식에는 연산의 결과값이 참이나 거짓으로 나오는 수식이 사용됩니다. 조건식은 일반적으로 "score >= 60"과 같은 수식이 됩니다.

 

조건식 뒤에는 콜론(:)이 있는데 파이썬 인터프리터에게 "아직 전체 문장이 끝나지 않았으니 해석을 미뤄달라"고 요청하는 기호입니다.

if-else 문은 주어진 조건식을 계산하여 조건식이 참(true)으로 계산되면 if 아래에 있는 문장을 실행합니다. 만약 거짓이면 else 아래에 있는 문장을 실행합니다.

 

아래 예제는 봉민이의 나이를 변수 age에 설정한 후 봉민이가 슬기보다 나이가 많으면 "슬기보다 나이가 많거나 같습니다!"를 출력합니다.

그렇지 않으면 "슬기보다 나이가 어립니다!"를 출력하는 조건문입니다.

age = 20

if (age >= 25) :
	print("슬기보다 나이가 많거나 같습니다!")
else :
	print("슬기보다 나이가 어립니다!")

 

<실행 결과>

슬기보다 나이가 어립니다!

 

대화형 Python에서 else를 입력할 때는 들여쓰기를 지우고 줄의 처음으로 가서 else를 입력해야 합니다.

 

경우에 따라 else 문은 생략될 수 있습니다. 아래 예제는 else문을 생략하고 if문만 사용하는 예제입니다.

age = 30

if (age >= 25) :
	print("슬기보다 나이가 많거나 같습니다.")
	print("나이차는", age - 25, "살입니다.")

 

<실행 결과>

슬기보다 나이가 많거나 같습니다.
나이차는 5 살입니다.

 

위의 예제에서 만약 age가 25보다 작은 수라면 if문의 조건에 해당하지 않아 출력 결과가 나오지 않습니다.

 

관계 연산자

if-else 문에서 조건에 해당하는 부분은 score >= 60 과 같이 수식으로 나타내게 됩니다.

조건을 나타내기 위한 연산자가 관계 연산자이며 피연산자 간의 관계를 검사하고 참 또는 거짓을 반환합니다.

 

score >= 60

 

관계 연산자(relational operator)는 두 개의 피연산자를 비교하는데 사용됩니다. 예를 들어 "봉민이가 슬기보다 나이가 많은가?"를 따지는데 사용됩니다.

관계 연산자의 결과는 참(True) 아니면 거짓(False)으로 계산됩니다.

 

파이썬에서는 아래 6가지의 관계 연산자를 사용합니다.

연산 의미
x == y x와 y가 같은가?
x != y x와 y가 다른가?
x > y x가 y보다 큰 가?
x < y x가 y보다 작은가?
x >= y x가 y보다 크거나 같은가?
x <= y x가 y보다 작거나 같은가?

 

관계 수식은 참이나 거짓이라는 값을 생성합니다. (100 > 1) 라는 관계식을 예로 들면 100이 1보다 크기 때문에 이 수식은 참(True)을 생성합니다.

(1 > 100) 수식은 1이 100보다 크지 않으므로 이 수식은 거짓(False)을 생성합니다. 파이썬에서는 참과 거짓을 True와 False 기호로 나타냅니다.

print(2 == 2)
print(2 == 3)

 

<실행 결과>

True
False

 

문자열에 대해서도 관계 연산자를 적용할 수 있습니다.

print('hello' == 'hello')
print('hello' == 'Hello')
print(12 == 12.0)
print(12 == '12')

 

<실행 결과>

True
False
True
False

 

조건식에는 변수를 사용할 수 있습니다. 즉 ( x > y ) 와 같은 수식이 가능합니다.

변수 x가 y보다 크면 이 수식의 값은 1이 됩니다. 반대로 변수 x의 값이 y보다 크지 않으면 0이 됩니다.

 

예를 들어 봉민이의 나이가 20살이므로 (age == 20) 수식은 참(true)을 반환할 것입니다. 그렇지 않다면 거짓을 반환할 것입니다.

또한 슬기의 나이는 봉민이의 나이보다 많으므로 둘의 나이를 비교하는 (25 > 20) 수식은 참을 반환할 것입니다.

age = 25

print(age >= 20)

 

<실행 결과>

True

 

WARNING

코딩을 처음 배우시는 '코린이'(코딩 어린이란 뜻ㅎ) 분들이 많이 혼동하는 것이 == 연산자입니다.

파이썬에는 "~와 같다" 라는 조건을 나타낼 때는 등호 2개를 사용하여 == 라고 표시하여야 합니다. = 연산자는 전혀 다른 의미이며 = 연산자는 변수에 값을 저장하는 연산자입니다.

 

부울(bool) 변수

조건식의 결과는 항상 True(참) 아니면 False(거짓) 입니다. 파이썬에서 참과 거짓을 저장하는 변수를 만들 수 있는데 이러한 변수를 부울 변수라고 합니다.

정수, 실수, 문자열 변수는 많은 값을 가질 수 있지만 부울 변수는 True(참) 또는 False(거짓) 값만을 가집니다.

아래 코드에서 부울 변수 flag를 생성하고 사용하는 것을 확인할 수 있습니다.

flag = True

print(flag)

 

<실행 결과>

True

 

다른 변수처럼 부울값은 수식에서 사용될 수 있으며 변수 안에 저장될 수 있습니다.

파이썬에서는 참을 표현할 때 true가 아닌 True를 사용합니다. 첫 글자가 대문자인 것을 잊지 맙시다.

flag = ( 2 > 3 )

print(flag)

 

<실행 결과>

False

 

NOTE

"부울형"이란 자료형은 19세기 영국의 수학자였던 Geroge Boole을 기리기 위해 만들어졌습니다.

부울은 1과 0(또는 참과 거짓)만을 사용하는 논리 시스템을 고안하였습니다. 이것은 결국 현대 컴퓨터의 초석이 됩니다.

컴퓨터에서 결정을 내리기 위해 부울형의 수식을 사용하는데 실행 경로 중 하나를 선택할 때 부울형의 값에 따릅니다.

 

간단한 예로 스마트폰은 배터리가 낮아지면(battery_low == True) 경고 아이콘을 화면에 표시합니다.

배터리가 충전되면(battery_low == False) 화면에서 경고 아이콘을 제거합니다.

 

NOTE

실수와 실수를 비교할 때 아래와 같은 문장을 사용하는 것은 문제가 될 수 있습니다.

result = 1/3

if (result == 0.33):
	print("result is 0.33")

 

<실행 결과>


 

위의 예제는 if문의 조건식이 참이 아니므로 아무런 결과가 출력되지 않았습니다. 왜나하면 1/3은 0.333333... 이 되기 때문입니다.

실수를 표현할 때, 단순한 값은 정확하게 표현되지만 복잡한 값은 정확하게 표현되지 않습니다.

 

WARNING

아주 많이 하는 오류 중 하나는 두 값을 비교할 때 == 연산자를 사용하지 않고 = 연산자를 사용하는 것입니다.

이 경우에 비교가 되지 않고 값이 단순히 변수에 대입되므로 파이썬에서 문법 오류가 발생합니다.

result = 1/3

if (result = 0.33):
	print("result is 0.33")

 

<실행 결과>

SyntaxError: invalid syntax

 

도전 과제

1. 프로그램을 정식으로 작성하기 전에는 순서도(flowchar)를 그려보는 것이 도움됩니다.

아래의 조건과 순서도 기호 표를 참고하여 비가 올 때 어떻게 대처할 것인지를 Microsoft PowerPoint 또는 그림판 등의 도구로 순서도를 그려봅시다.

 

<조건>

  1. 비가 오지 않으면 외출한다.
  2. 비가 오면 우산을 가지고 있는지 검사한다.
  3. 우산을 가지고 있다면 외출한다.
  4. 우산을 가지고 있지 않다면 무한정 비가 그칠 때까지 기다린다.

 

<순서도 기호표>

순서도에 대한 이미지 검색결과
 


2. 다시 돌아온 거북이! 사용자로부터 명령어를 받아 터틀을 움직이는 프로그램을 만들어 봅시다.

사용자가 "left"를 입력하면 왼쪽으로 60도 회전하여 앞으로 50 픽셀 이동하고 "right"를 입력하면 오른쪽으로 60도 회전하여 앞으로 50 픽셀 이동하게 합시다.

 

<실행 결과>

왼쪽 = left, 오른쪽 = right : left
왼쪽 = left, 오른쪽 = right : right
왼쪽 = left, 오른쪽 = right : left
왼쪽 = left, 오른쪽 = right : right
왼쪽 = left, 오른쪽 = right :

 

HINT

프로그램을 종료시키지 않고 계속 반복하려면 아래의 반복문을 사용하면 됩니다.

while True:
	(계속 반복할 코드 입력)

3. 키보드에서 입력받은 정수가 홀수인지 짝수인지, 3의 배수인지 3의 배수가 아닌지 구별하는 프로그램을 작성해 봅시다.

 

<실행 결과>

  • 15를 입력했을 때
정수를 입력하시오 : 15
입력된 정수는 홀수입니다.
입력된 정수는 3의 배수입니다.
  • 22를 입력했을 때
정수를 입력하시오 : 22
입력된 정수는 짝수입니다.
입력된 정수는 3의 배수가 아닙니다.

 


4. 사용자로부터 두 개의 정수를 입력받아 두 수 중 큰 수와 작은 수를 출력하는 프로그램을 작성하여 봅시다.

 

<실행 결과>

  • 첫 번째로 10, 두 번째로 20을 입력했을 때
첫 번째 정수 입력 : 10 # 10을 입력
두 번째 정수 입력 : 20 # 20을 입력
큰 수는 20 작은 수는 10