[바로바로 파이썬 05] if 문
드디어 프로그램의 흐름을 다루는 제어문을 시작합니다. 우선 제어문의 기본 문법 중 하나인 if 문부터 시작해봅시다.
트롤리 딜레마로 이해하는 if 문
if 문은 앞에서 살짝 살펴봤습니다. 그때는 if 문을 문지기처럼 설명했죠. 하지만 if 문의 역할을 이해하려면 문지기보다 열차의 선로를 바꾸는 레버를 떠올리는 것이 좋습니다. 다음은 《정의란 무엇인가》라는 도서에도 소개된 유명한 사고 실험인 트롤리 딜레마입니다. 여기서는 윤리적인 문제가 아니라 레버 하나로 이동할 길이 달라진다는 구조만 빌려오겠습니다. 이때 선로를 바꾸는 레버가 if 문과 비슷한 역할을 합니다.
선로 옆에 서 있는 사람이 레버를 당겨 열차의 방향을 결정합니다. 레버를 그대로 두면 트롤리가 직진하고, 레버를 당기면 선로를 바꿔 아래로 향합니다. 이렇게 코드의 흐름을 결정하는 것이 if 문입니다. 이 개념을 머릿속에 넣어두고 기초 문법부터 응용까지 쭉 알아봅시다.
if 문 구조 알아보기
if 문은 조건에 따라 코드를 실행할지 말지 결정하는 제어문입니다. if 문의 기본 구조는 다음과 같습니다.
if와 콜론 사이에 조건식을 입력하고, 콜론(:)으로 조건식의 끝을 표시한 후 다음 줄부터 일정하게 들여쓰기하여 실행할 코드를 입력합니다. 이때 들여쓰기로 묶인 코드는 코드 블록이라고 합니다. 코드 블록은 잠시 뒤에 자세히 알아보고, 먼저 조건식부터 살펴봅시다.
if 문의 조건식은 참(True) 또는 거짓(False)으로 평가됩니다. 다음 코드를 봅시다. 코드에 하이라이트로 표시한 부분이 조건식입니다. temperature 변수의 값과 25를 >= 연산자로 비교합니다. 기초적인 수학 지식이 있다면 이 조건식의 결과가 True라는 것을 직관적으로 알 수 있습니다.
실제로 코드를 실행해봅시다. temperature의 값이 35이므로 temperature >= 25라는 조건식은 35 >= 25로 계산되며, 그 결과는 True입니다. 따라서 들여쓰기한 if 문의 코드 블록이 실행됩니다.
코드 블록 개념 알아보기
앞에서 언급했듯이 : 다음 줄부터 일정하게 들여쓰기한 코드의 묶음을 코드 블록이라고 합니다. if 문에서는 조건식의 결과에 따라 이 코드 블록을 실행할지 결정합니다.
예를 들어 다음과 같이 코드를 작성하면 첫 번째 if 문의 코드 블록과 두 번째 if 문의 코드 블록은 별개입니다. 다음 코드에서는 각각의 코드 블록을 하이라이트로 표시했습니다.
같은 코드 블록에 속하는 코드는 같은 수준으로 들여쓰기해야 합니다. 들여쓰기란 코드 앞에 삽입하는 띄어쓰기나 탭(Tab)을 말합니다. 파이썬에서는 띄어쓰기 4칸을 권장합니다. 2칸이나 3칸으로 들여쓰기해도 간격이 같으면 같은 코드 블록으로 간주하지만, 띄어쓰기 4칸을 지키는 습관을 기르기 바랍니다. 사람 눈에는 같은 수준으로 들여쓰기한 것처럼 보여도 파이썬 인터프리터는 탭과 띄어쓰기를 서로 다르게 처리하므로 오류가 발생할 수 있습니다. 앞으로 if 문을 비롯한 다양한 문법에서 들여쓰기와 코드 블록을 계속 사용하므로 자연스럽게 익숙해질 것입니다.
if~else 문 구조 알아보기
앞에서 공부한 if 문은 조건식이 True일 때 코드 블록을 실행했습니다. if 문을 설명할 때 트롤리 딜레마 그림을 예로 들었지만, 사실 if 문만으로는 그림의 상황과 정확히 들어맞지 않습니다. if 문만 사용하면 조건식이 True일 때 실행할 코드만 지정하기 때문입니다. 만약 조건식이 False일 때 실행할 코드까지 지정하려면 else 문을 함께 사용하면 됩니다.
age가 15이므로 if 문의 조건식은 False입니다. 따라서 if 문의 코드 블록은 실행하지 않고 else 문의 코드 블록을 실행합니다.
그러면 ‘if 문만 사용하고 print("미성년자입니다. 입장이 제한됩니다.")는 if 문 바깥으로 빼면 안 될까?’라고 생각할 수도 있습니다. 좋은 질문입니다. 현재처럼 age가 15일 때는 방금 작성한 if~else 문과 같은 결과가 나옵니다.
언뜻 보면 코드를 이렇게 작성해도 될 것 같습니다. 하지만 age를 20으로 바꿔서 실행해보면 문제가 드러납니다.
age가 20이면 조건식을 만족하므로 if 문의 코드 블록이 실행됩니다. 하지만 if 문 바깥에 있는 코드는 조건식의 결과와 관계없이 실행되므로, 결국 두 메시지가 모두 출력됩니다.
실행 결과를 보면 ➊ 조건식을 만족해 True가 되므로 ➋ 조건식의 코드 블록을 실행하고, ➌ 조건식과 무관한 코드도 실행됩니다.
if~else 문은 실생활의 다양한 판단 상황을 프로그램으로 만들 때 유용합니다. 이번에는 좀 더 실용적인 예제로 연습해보겠습니다. 온라인 쇼핑몰에서 쓸 수 있는 배송비 계산 프로그램을 만들어봅시다. 보통 일정 금액 이상 구매하면 무료 배송을 해주는데, 이런 조건에 따른 처리를 if~else 문으로 표현할 수 있습니다. 코드를 실행해보면 구매 금액에 따라 배송비가 자동으로 계산되는 것을 알 수 있습니다.
