[6장] 조건문
일반적인 프로그램은 특정 조건에 따라서 실행이 다르게 됩니다. 이런 경우 사용하는 구문을 조건문 또는 분기문이라고 합니다. 이번 시간에는 조건문 사용방법에 대해서 살펴보겠습니다.
1. if문
if문은 가장 기본적인 구문으로 if키워드, 조건식, 콜론(:) 그리고 실행문으로 구성됩니다.
score = 90
if score > 60:
print('합격입니다.')
- if키워드: if
- 조건식: score > 60
- 콜론: :
- 실행문: print('합격입니다.')
if키워드는 ‘만약 ~라면’의 뜻을 가지고 있습니다. if문은 조건식의 결과에 따라서 실행문의 실행 여부가 결정됩니다. 위 코드에서는 score가 60보다 크다면 실행문이 실행되고, score가 60과 같거나 작다면 실행문은 실행되지 않습니다. 따라서 조건식의 결과는 항상 불(Bool) 타입으로 True 또는 False이고 Ture인 경우에 실행문이 실행됩니다.
위의 조건문은 "score가 60보다 크다면 '합격입니다.'라는 문자열을 출력한다."라고 해석할 수 있습니다. 다음은 num 값에 따라 실행되는 실행문이 달라지는 코드입니다.
num = 10
if num > 0:
print('num은 양수 입니다.') # 조건식의 결과가 True이므로 실행문이 실행된다.
if num == 0:
print('num은 0입니다.') # 조건식의 결과가 False이므로 실행문은 실행 안 된다.
if num < 0:
print('num은 음수 입니다.') # 조건식의 결과가 False이므로 실행문은 실행 안 된다.
2. 코드 블록
코드 블록이란, 실행문의 시작과 끝을 나타냅니다.
if score > 60:
print('합격입니다.')
위 코드에서 실행문은 콜론(:) 다음부터 시작되고 print('합격입니다.')에서 끝나는데요, 이것을 코드 블록이라고 합니다. 그리고 중요한 것은 파이썬에는 코드 블록에서 반드시 들여 쓰기를 해야 합니다. 들여 쓰기는 2칸, 4칸 또는 8칸 등으로 개발자가 원하는 데로 할 수 있지만 코드 블록 안에서는 모두 동일해야 합니다. 다음 코드로 이해합니다.
if score > 60:
print('합격입니다.') # 들여 쓰기 4칸
print('축하합니다.') # 들여 쓰기 4칸
실행문 내 들여 쓰기가 4칸으로 동일하게 적용되어 정상 코드입니다.
if score > 60:
print('합격입니다.') # 들여 쓰기 2칸
print('축하합니다.') # 들여 쓰기 4칸
실행문 내 들여 쓰기가 2칸, 4칸으로 적용되어 틀린 코드입니다.
if score > 60:
print('합격입니다.') # 들여 쓰기 4칸
print('축하합니다.') # 들여 쓰기 2칸
실행문 내 들여 쓰기가 4칸, 2칸으로 적용되어 틀린 코드입니다.
if score > 60:
print('합격입니다.') # 들여 쓰기 2칸
print('축하합니다.') # 들여 쓰기 2칸
실행문 내 들여 쓰기가 2칸으로 동일하게 적용되어 정상 코드입니다.
※참고. 일반적으로 들여 쓰기는 4칸을 사용합니다.
만약 다음과 같은 코드가 있다면 결과는 어떻게 될까요?
score = 50
if score > 60:
print('합격입니다.') # 들여 끄기 4칸
print('축하합니다.') # 들여 끄기 0칸
우선 코드는 정상입니다. 'print('합격입니다.')'는 들여 쓰기가 4칸 적용되어 있기 때문에 if문의 실행문입니다. 그리고 print('축하합니다.')는 들여 쓰기가 적용되어 있지 않기 때문에 if문과는 상관이 없습니다. 즉 print('축하합니다.')는 if문의 조건식과는 상관없이 항상 실행됩니다.
3. if ~ else문
다음과 같은 경우를 생각해 보겠습니다.
"시험 성적이 60을 넘으면 '합격'메시지를 출력하고 그렇지 않으면 '재시험'을 출력하자!"
if문을 이용해서 위의 내용을 구현하면 다음과 같이 코딩할 수 있습니다.
score = 80
if score > 60:
print('합격')
if score <= 60:
print('재시험')
if문을 두 번 사용해서 성적이 60을 넘는 경우와 그렇지 않은 경우로 구분했습니다. 이것도 틀린 코드는 아니지만, 프로그램에서는 이를 좀 더 간단하게 개선할 수 있습니다. 60을 기준으로 60을 넘는 경우와 그렇지 않은 경우라면 경우의 수는 항상 2가지입니다.(60 초과와 그렇지 않은 경우) 이렇게 조건의 결과가 양자택일인 경우 if ~ else문을 이용할 수 있습니다. 다음은 위의 코드를 if ~ else문으로 개선한 코드입니다.
score = 80
if score > 60:
print('합격')
else:
print('재시험')
else를 이용해서 조거식에 만족하지 않는 경우의 실행 구문을 나타낼 수 있습니다. 이처럼 if ~ else문은 조건식의 결과가 딱 2가지 인 경우에 사용할 수 있는 조건문입니다.
4. if ~ elif문
if ~ else문은 양자택일인 경우에 사용합니다. if~elif는 다중 비교를 할 때 사용하는 조건문으로 elif 다음에는 조건식을 코딩합니다.
다음과 같은 경우를 생각해 보겠습니다.
"
시험 성적이
90 ~ 100사이면 'A학점'을 출력하고,
80 ~ 89사이면 'B학점'을 출력하고,
70 ~ 79사이면 'C학점'을 출력하고,
그 외는 '재시험을 출력하자!
"
이런 경우 조건이 다양하기 때문에 if ~ elif문을 사용할 수 있습니다.
score = 80
if score >= 90:
print('A학점')
elif score >= 80:
print('B학점')
elif score >= 70:
print('C학점')
else:
print('재시험')
가장 먼저 score가 80으로 첫 번째 조건식(score >= 90)은 만족하지 않습니다(False). 그러면 프로그램은 다음 조건식으로 이동해서 score가 80 이상인지 판단합니다. 결과가 True이기 때문에 해당 실행문을 실행하고 더 이상의 조건식은 실행하지 않습니다.
만약에 score가 60이라면 모든 조건식에서 False가 나오므로 마지막의 else문이 실행됩니다.
score = 60
if score >= 90:
print('A학점')
elif score >= 80:
print('B학점')
elif score >= 70:
print('C학점')
else:
print('재시험')
5. pass 키워드
코딩하다 보면 실행문이 정해지지 않아서 우선은 생략해야 하는 경우가 있습니다.
예를 들어 시험 성적이 60이상인 경우 '출력 메시지가 정해지지 않아서 일단은 생략해야 한다.'고 가정하면 다음과 코딩할 수 있습니다.
score = 80
if score >= 60:
출력 메시지가 아직 정해지지 않아서 실행문이 생략됐습니다.
이제 프로그램을 실행하면 다음과 같은 에러가 발생합니다.
에러는 조건 문의 실행문이 없어서 발생하는데요, 이런 경우 pass를 이용해서 임시로 에러가 발생하지 않게 할 수 있습니다. 즉 pass는 '실행문이 없지만 그냥 넘어가자~' 정도로 해석할 수 있습니다. pass를 추가하고 실행하면 에러가 발생하지 않습니다.
score = 80
if score >= 60:
pass
6. 중첩 조건문
조건문은 중첩해서 사용할 수 있습니다. 다음은 조건문을 중첩한 예입니다.
score = 80
if score > 0:
if score > 60:
print('합격!')
else:
print('재시험')
else:
print('score는 0보다 커야합니다.')
if문안에 또 다른 if ~ else문이 있습니다. if ~ else문은 score가 0보다 큰 경우에 동작합니다.
7. 사용자 입력
지금까지는 프로그램의 실행과를 터미널에 출력만 했습니다. 이번에는 사용자로부터 데이터를 입력받는 방법에 대해서 살펴보겠습니다. 출력할 때 사용한 함수가 print()라면 입력받을 때 사용하는 함수는 input()입니다. 다음은 사용자한테 성적을 입력받는 코드입니다.
score = input('시험 성정 입력하세요. ') # 사용자로부터 성적을 입력받는다.
if score > 0:
if score > 60:
print('합격!')
else:
print('재시험')
else:
print('score는 0보다 커야합니다.')
실행하면 프로그램은 사용자가 성적을 입력할 때까지 기다리게 됩니다.
사용자가 설정을 입력하고 'Enter'를 누르면 계속해서 프로그램을 실행합니다.
프로그램 실행 결과를 보면 에러가 발생합니다. 프로로그램에 문제가 있는듯 합니다.
input()를 이용해서 사용자한테 입력받은 데이터는 'String' 타입니다. 따라서 score에 할당된 데이터의 타입은 문자열입니다.
이런 문자열 데이터를 조건식(score > 0)에서 숫자와 비교했기 때문에 에러가 발생했습니다. 그럼 어떻게 해야 할까요?
이전 시간에 학습한 형변환 기억하시나요? 사용자가 입력한 데이터를 숫자로 형변환 하면 됩니다. 다음은 수정 코드입니다.
score = int(input('시험 성정 입력하세요. ')) # 사용자각 입력한 데이터를 숫자로 형변환한다.
if score > 0:
if score > 60:
print('합격!')
else:
print('재시험')
else:
print('score는 0보다 커야합니다.')
이제 정상 코드로 수정했으므로, 실행하면 에러가 발생하지 않습니다.
결론적으로, input()을 이용해서 입력한 데이터는 항상 String 타입이기 때문에 개발자는 상황에 맞게 형변환해서 사용해야 합니다.
이번 시간에는 파이썬 프로그램의 실행을 분기하는 조건문에 대해서 살펴봤습니다. 다음 시간에는 반복문에 대해서 살펴보겠습니다.