파이썬맛보기

[7] 파이썬 입문 - if 조건문

plas 2022. 6. 26. 22:14

이제까지 이름으로 값을 기억하는 것과 연산과 수식을 계산하는 것을 살펴보았습니다. 또한 입력받은 값에 따라 동작하도록 프로그램을 작성해 보았고 결과를 사용자가 보기 좋게 출력하는 방법도 살펴보았습니다. 이번 회에는 계산을 수행할 때 값에 따라 또는 조건에 따라 다른 동작을 하도록 작성하는 법을 알아보겠습니다.

프로그램은 컴퓨터에게 어떤 계산이나 작업을 수행하게 하는 작업지시서인데, 작업은 값에 따라 또는 상황에 따라 하는 일이 달라져야 하는 경우가 많습니다. 식당가에서 돌아다니는 배민 딜리버리 로봇은 자기 위치와 목적지에 따라 그리고 맵에 따라 갈림길에서 직진할지 우회전할지 좌회전할지 결정해야 합니다. 이 때 어떤 조건을 만족하면 우회전하도록 프로그램이 작성되어 있을 것입니다. 이런 경우를 표현하는 것이 if 조건문입니다.

조건은 참 또는 거짓이 될 수 있는 수식으로 표현됩니다. 우리는 앞에서 값이나 이름으로 비교식을 만들거나 비교식을 and와 or로 연결하여 복잡한 조건을 표현하는 방법을 살펴보았습니다. 이러한 비교 및 논리 수식이 바로 조건식입니다. 조건식에 따라 참이면 이쪽 길로 가고 거짓이면 저쪽 길로 가는 것이 가능합니다.

조건식에 따라 어떤 판단을 하는 예시를 같이 살펴보겠습니다. 주어진 물건이 박스 크기 20*30에 맞는지 여부를 판단하는 프로그램을 생각해 봅시다. 물건의 길이와 넓이를 입력받습니다.

  1. 긴 쪽을 a, 짧은 쪽을 b로 둡니다.
  2. a가 30보다 작고 b는 20보다 작으면 박스에 넣을 수 있습니다.
  3. 아니면 이 박스에 넣을 수 없습니다.

이것을 프로그램으로 나타내면 어떻게 표시할 수 있을까요?

먼저 프로그램이 어떻게 실행될지 생각해 보겠습니다.

> 넓이: 20
> 높이: 15
20*30 박스에 들어갑니다
> 넓이: 30
> 높이 14
20*30 박스에 들어갑니다
> 넓이: 30
> 높이: 25
20*30 박스에 들어가지 않습니다

이렇게 동작하도록 프로그램을 작성해 봅시다.

먼저 우리는 넓이와 높이를 입력받아야 되고 큰 값을 a, 작은 값을 b에 넣습니다. 큰 값을 a, 작은 값을 b에 넣기 위해 우리는 a와 b에 넓이와 높이를 입력받고 b가 a보다 크면 두 값을 바꾸려고 합니다. 이것을 알고리즘이라고 할 수 있습니다.  컴퓨터에게 작업을 지시하기 위해 어떤 방식으로 입력받고 조건에 따라 바꿀지 결정하는 것이 사람이 하는 역할입니다. 컴퓨터는 시키는 그대로 작업을 수행할 뿐입니다.

a = int(input('넓이 => '))
b = int(input('높이 => '))
if a < b:
    b, a = a, b

if 조건문을 작성하는 방식은 위에서 한 것처럼 if라는 키워드를 써주고 조건식 뒤에 콜론(:)을 씁니다. 그리고 다음 줄은 왼쪽에 빈칸 네번(탭)을 들어가서 if 조건식이 참일 때 수행할 명령을 써주게 됩니다. 여기서는 a가 b보다 작으면 두 값을 바꿉니다. if 조건식이 만족할 때만 그 다음 문장을 수행하게 됩니다. 조건식이 거짓일 때는 바꾸지 않고 그대로 다음으로 넘어갑니다. 들여쓰기 한 부분이 조건식이 만족될 때 수행되고 들여쓰기를 마치고 다시 앞으로 내어쓰면 if 문이 끝났으므로 조건식과 상관없이 수행됩니다.

다음으로 이 크기가 박스에 들어가는지 검사하는 코드를 생각해 보겠습니다. 크기가 맞는지 검사하여 맞으면 "들어갑니다", 아니면 "들어가지 않습니다"를 출력합니다. 

if a < 30 and b < 20:
    print('20*30 박스에 들어갑니다')
else:
    print('20*30 박스에 들어가지 않습니다')
print('감사합니다')

여기서는 if 조건식이 만족되는 경우 다음 명령문을 수행하고 그렇지 않은 경우는 else 로 다른 명령문을 수행합니다. 앞에서 본 예는 else 부분이 없었는데 여기서는 else인 경우에만 수행할 명령문이 따로 있는 경우입니다.

다음으로 몇가지 박스가 있어서 물건의 길이와 넓이에 따라 그에 맞는 박스를 선택하는 경우를 생각해 보겠습니다. 박스는 20*30, 30*50, 50*70 이렇게 세가지가 있다고 가정해 보겠습니다.

  • 1)   가장 긴 것을 a, 그 다음 긴 것을 b로 둡니다.
  • 2)   a가 30보다 작고 b는 20보다 작으면 1번 박스를 사용합니다.
  • 3)   2)가 만족되지 않은 경우, a가 50보다 작고 b는 30보다 작으면 2번 박스를 사용합니다.
  • 4)   2), 3)이 만족되지 않은 경우, a가 70보다 작고 b는 50보다 작으면 3번 박스를 사용합니다.
  • 5)   1), 2), 3)이 만족되지 않은 경우 맞는 박스가 없다고 출력합니다.

그러면 a와 b를 입력받아 큰 값을 a에 넣은 후 다음과 같이 여러 번의 조건식을 차례로 검사하게 됩니다. 이런 경우 if와 elif, else라는 세 개의 키워드를 사용하게 됩니다. else는 else if의 준말이어서 그게 아닌 경우에 if 조건식을 나타냅니다.

if a < 30 and b < 20:
    print('1번 박스를 사용합니다')
elif a < 50 and b < 30:
    print('2번 박스를 사용합니다')
elif a < 70 and b < 50:
    print('3번 박스를 사용합니다')
else:
    print('맞는 박스가 없습니다')
print('감사합니다')

여기서는 처음 조건식이 만족되면 1번 박스를 출력하고 감사합니다를 출력하게 됩니다. 처음 조건식이 만족되지 않으면 두번째 조건식을 검사합니다. 즉 a가 30보다 크거나 b가 20보다 큰 경우는 두번째 조건식을 검사하고 그것이 만족되면 2번 박스를 출력하고 역시 감사합니다를 출력하고 마칩니다. 두번째 조건식도 만족되지 않을 때는 a가 50보다 크거나 b가 30보다 큰 경우가 됩니다. 이때는 세번째 조건식을 검사하게 되고 세번째 조건식도 만족하지 않으면 else 부분을 수행합니다.

이와 같이 여러 개의 조건문을 if와 elif, else로 연결하는 경우 앞의 조건식이 만족되지 않으면 다음 조건식을 검사하게 됩니다. 조건문은 프로그램을 작성할 때 아주 기본이 되는 기법입니다. 중요한 것은 조건식을 잘 작성하는 것입니다.