6.1.1 선택: 여러 선택지 중에서 하나 고르기

선택이란 여러 선택지 중에서 하나를 고르는 것이다. 이번 일요일 낮에 무엇을 하면 좋을지 선택지로 꼽아 보자.

  1. 집에서 프로그램을 만들자.
  2. 공원에서 스케이트보드를 타자.

둘 다 좋은 선택지다. 하지만 이 선택지만으로는 의사결정을 하기가 어렵다. 이 가운데 하나를 선택하기 위한 판단 기준이 없기 때문이다. 선택지에 조건을 추가해 보자.

  1. 비가 오면, 집에서 프로그램을 만들자.
  2. 비가 오지 않으면, 공원에서 스케이트보드를 타자.

‘비가 온다’와, ‘비가 오지 않는다’라는 조건을 각각 추가함으로써 의사결정을 위한 판단 기준이 되었다. 비가 실제로 올지는 일요일이 되어 봐야 알 수 있으므로, 그 전까지는 두 선택지 모두 선택될 가능성이 있다. 하지만 일요일이 되면 둘 가운데 하나만 선택될 것이다.

선택은 프로그래밍에서도 매우 중요한 요소다. 앞 장까지 만들어 본 프로그램은 언제나 한 가지 흐름으로만 실행되었는데, 선택지와 조건을 고려하지 않았기 때문이다. 프로그램에 선택지와 조건을 마련해 두면 컴퓨터가 상황에 따라 적절하게 작업을 수행하도록 할 수 있다.

6.1.2 if 문

파이썬에서는 조건과 선택지를 작성할 때 if 문을 사용한다. if 문은 조건을 검사하여 조건이 참이면 본문의 코드(선택지)를 실행하고, 조건이 거짓이면 본문의 코드를 실행하지 않는다. if 문을 작성하는 양식은 다음과 같다.

if 조건:
    본문 (조건이 참일 때 실행할 코드)

if 문은 함수를 정의할 때 사용하는 def 문과 형태가 비슷하다. if 문의 첫 행에는 상황을 판단하기 위한 조건이 들어가고 콜론(:)으로 끝난다. 그 다음 행부터는 조건이 참일 때 실행할 코드를 네 칸씩 들여쓰기 하여 작성한다. 실행할 코드는 여러 행에 걸쳐 작성할 수도 있다.

if 문에 입력하는 조건으로는 날씨 == '비'와 같이 참·거짓으로 가려낼 수 있는 식을 사용한다. 참·거짓으로 가려낼 수 있는 식은 4.4절에서 설명했다.

if 문을 실제 코드로 작성한 예를 들어 보자.

코드 6-1 if 문의 예

if 날씨 == '비':                        # ❶
    print('집에서 프로그램을 만들자.')  # ❷

위 코드의 if 문은 ❶ 헤더 행의 조건과 ❷ 조건이 참일 때 실행할 코드 본문으로 구성되어 있다. if는 ‘만약 … 이라면’이라는 뜻이다. 이 코드를 사람의 말로 옮긴다면, “날씨 변수의 값이 ‘비’라면, 화면에 ‘집에서 프로그램을 만들자.’를 출력하시오”가 된다.

if 문 실행해 보기

if 문을 사용한 프로그램을 실제로 작성하고 실행해 보자. 파이참에서 if1.py 파일을 새로 만들고 다음 코드를 입력해 실행해 보자.

코드 6-2 일요일 낮에 할 일 선택 1 (if1.py)

print('일요일 낮의 날씨를 입력해주세요:')
날씨 = input()           # ❶ 사용자로부터 입력 받음

if 날씨 == '비':         # ❷
    print('집에서 프로그램을 만들자.')

if 날씨 != '비':         # ❸
    print('공원에서 스케이트보드를 타자.')

이 프로그램은 사용자의 입력을 받아 날씨 변수에 대입한 후, 그 값이 '비'일 때와 아닐 때 각각 알맞는 메시지를 출력한다. 프로그램을 실행하고 ‘맑음’이라고 입력해 보자.

실행 결과:

일요일 낮의 날씨를 입력해주세요:
맑음
공원에서 스케이트보드를 타자.

실행 과정을 생각해 보자. ❶에서 사용자의 입력에 의해 날씨 변수에 '맑음'이 대입되었다. 따라서 ❷의 if 문에서는 조건이 '맑음' == '비'가 되므로 거짓으로 평가되어 본문이 실행되지 않는다. ❸의 if 문에서는 조건이 '맑음' != '비'가 되므로 참으로 평가되어 본문이 실행된다. 그 결과, 화면에 ‘공원에서 스케이트보드를 타자.’라는 텍스트만 출력되었다.

선택은 여러 가능성이 열려 있어야 의미가 있다

선택은 여러 가능성이 열려 있어야 의미가 있다. 조건이 언제나 똑같이 평가되거나, 선택지가 하나 뿐이라면 선택을 할 필요가 없다. 다음 경우를 생각해보자.

  1. 조건이 항상 참일 때: if 문의 본문이 항상 실행된다. if 문 없이 코드 본문을 작성하면 된다.
  2. 조건이 항상 거짓일 때: if 문의 본문이 절대 실행되지 않는다. 코드를 작성할 필요가 없다.
  3. 선택지가 하나뿐일 때: 조건을 따지지 않고 실행해야 할 코드다. if 문 없이 코드 본문을 작성하면 된다.

초보 프로그래머는 항상 참인 조건 또는 항상 거짓인 조건을 작성하는 실수를 저지를 때가 있다. 예를 들어, 10 < x and x < 5 같은 조건은 변수 x에 어떤 값이 대입되든지 항상 거짓이 되는 조건이다. 수직선과 진리표(가능한 모든 조건과 결과를 나열한 표) 등을 이용하면 틀린 조건을 작성하는 것을 예방할 수 있다.

개념 정리

  • if 문을 이용해 조건에 따라 실행할 코드를 선택하도록 할 수 있다.

6.1.3 함수 안에서 if 문 활용하기

함수는 매개변수를 통해 데이터를 입력받는다. 무언가를 입력받는다는 것은 여러 가능성이 열려 있다는 뜻이다. 매개변수에 무엇이 전달될지는 함수가 호출되기 전에는 알 수 없다. 함수 중에는 매개변수에 전달된 값에 따라 실행 과정이 달라져야 하는 것도 있다. 이럴 때, 함수 안에서 if 문을 사용하면 된다.

abs() 함수는 입력받은 수의 절대값을 반환한다. if 문을 사용해 이 함수와 같은 함수를 직접 정의할 수 있다.

먼저, 어떤 수 N의 절대값을 구하는 방법을 생각해 보자.

  • N이 0 이상이면 절대값은 N이다.
  • N이 0 미만이면 절대값은 -N이다.

이 계산법에서는 ‘N이 0 이상이다’라는 조건과 ‘N이 0 미만이다’라는 조건에 따라 절대값을 구하는 방법이 다르다. 이를 코드로 옮긴다면, 조건에 따라 실행할 코드가 달라야 하므로 if 문을 사용해야 한다. 함수로 작성해 보자.

코드 6-3 if를 이용한 절대값 계산 함수 정의 (abs.py)

def 절대값(n):
    """수 n을 입력받아, 절대값을 반환한다."""
    if n >= 0:       # n이 0 이상이면 n을 반환한다
        return n
    if n < 0:        # n이 0 미만이면 -n을 반환한다
        return -n

print('10의 절대값:', 절대값(10))
print('-5의 절대값:', 절대값(-5))

실행 결과:

10의 절대값: 10
-5의 절대값: 5

직접 정의한 절대값() 함수는 abs()와 실행 결과가 동일하다. 파이썬의 기본 함수를 흉내내는 함수를 만들어 보는 것은 실력 향상에 도움이 된다. 물론 실전에서는 검증된 기본 함수를 이용하는 것이 바람직하다.

한편, 코드 6-3에서 def 문의 본문 속에 if 문이 있고, 그 if 문의 본문도 있음을 확인하자. if 문의 본문은 두 번 들여쓰기되어 여덟 개의 공백 문자로 시작했다. 이처럼 들여쓰기는 여러 단계에 중첩하여 이루어질 수 있다.

6.1.4 else: 그렇지 않다면

if 문은 조건이 참일 때만 본문의 내용을 실행하고, 조건이 거짓이라면 본문의 내용을 실행하지 않고 그냥 다음 코드로 넘어간다. 조건이 거짓일 때 별도의 코드를 실행하게 할 수도 있다. if 문에 else 절을 추가로 작성하면 된다. if 문의 양식에 else 절을 추가하여 다음과 같이 기억해 두자.

if 조건:
    본문 1 (조건이 참일 때 실행할 코드)
else:
    본문 2 (조건이 거짓일 때 실행할 코드)

‘else’는 ‘그렇지 않다면…‘이라는 뜻이다. 위 양식의 if 문을 사람의 말로 옮긴다면 “조건이 참이라면 본문 1을 실행하고, 그렇지 않다면 본문 2를 실행하라”가 된다. 다음은 코드 6-2를 else 절을 이용하도록 수정한 것이다.

코드 6-4 일요일 낮에 할 일 선택 2 (if2.py)

print('일요일 낮의 날씨를 입력해주세요:')
날씨 = input()

if 날씨 == '비':
    print('집에서 프로그램을 만들자.')
else:  # ❶ 날씨 == '비'가 아닌 경우
    print('공원에서 스케이트보드를 타자.')

위 코드는 코드 6-2와 실행 결과가 동일하다. 코드 6-2에서는 날씨 != '비'인 경우를 별도의 if 문으로 검사하여 처리했지만, 여기서는 ❶의 else 절을 이용해 처리했다. if 문 두 개가 하나로 줄어들어 간결해졌다.

서로 모순인 조건

‘비가 온다’와 ‘비가 오지 않는다’라는 두 조건은 서로 모순이다. 두 조건이 서로 모순이라면, 한 조건이 참일 때 다른 한 조건은 거짓이고, 한 조건이 거짓일 때 다른 한 조건은 참이다. 두 조건이 동시에 참이거나 동시에 거짓일 수는 없다.

이런 경우에는 두 조건을 각각 검사하는 것보다 조건 하나가 참인지 거짓인지 검사하는 것이 더 쉽다. 컴퓨터가 수행해야 할 연산도 줄어들고, 사람도 두 조건을 묶어서 생각할 수 있어 이해하기 편하다.

단, else를 이용해 두 번째 조건을 대체할 수 있는 경우는 두 조건이 서로 모순일 때 뿐이다. 예를 들어, ‘비가 온다’라는 조건과 ‘오늘은 일요일이다’라는 조건은 서로 모순이 아니므로 제각각 검사해야 한다.

pass 문: 코드 실행 생략하기

파이썬에는 컴퓨터에게 아무 것도 하지 말고 다음 코드로 넘어가도록 지시하는 명령, pass 문이 있다. pass 문을 이용하면 if 문에서 조건이 참일 때 아무 것도 하지 않도록 지시할 수 있다.

코드 6-5 코드 실행 생략하기

if 날씨 == '비':
    pass  # 조건이 참이어도 아무 것도 실행하지 않는다

위 코드를 실행하면 날씨 변수의 값에 관계 없이 아무 것도 실행되지 않는다. 이런 코드는 무의미하다. 하지만 이 if 문에 else 절이 추가되면 의미가 생긴다.

코드 6-6 조건이 거짓일 때만 실행되는 코드 1

if 날씨 == '비':
    pass  # 조건이 참일 때는 아무 것도 실행하지 않는다
else:
    print('공원에서 스케이트보드를 타자.')

위 코드는 조건이 거짓일 때만 화면에 메시지를 출력한다. 이처럼 else 절에서만 코드를 실행하고, 조건이 참일 때는 생략하고 싶을 때 pass 문을 이용할 수 있다. 하지만 조건이 거짓일 때만 코드를 실행하고 싶다면 다음과 같이 조건을 부정하여 판단하는 편이 간결하다.

코드 6-7 조건이 거짓일 때만 실행되는 코드 2

if not (날씨 == '비'):
    print('공원에서 스케이트보드를 타자.')

not 연산(4.4절 참고)을 이용하면 조건을 부정할 수 있다. 조건이 반대로 뒤집혔으므로 이전 else 절의 본문은 if 문의 본문으로 옮겼다. 이전 if 문의 else 절로 옮겨졌는데 else 절은 생략이 가능하므로 그냥 삭제했다. 코드 6-6보다 한결 간결하다.

조건을 부정할 때는 not 조건 과 같이 not 연산을 사용해도 되고, 부정 조건을 프로그래머가 직접 계산해 작성해도 된다. 즉, 코드 6-7의 조건을 not (날씨 == '비') 대신 날씨 != 비라고 작성해도 좋다.

나중에 구현하기

pass 문은 def 문이나 if 문처럼 코드 블록을 본문으로 갖는 표현에서 본문을 비워 둘 때 사용한다. 코드 블록에서 본문에 아무 것도 적어두지 않으면 문법 오류가 발생하므로, 코드 블록을 비워두기 위해 pass 문이 필요하다.

pass 문은 def 문이나 if 문의 본문을 나중에 구현하려고 임시로 비워둘 때도 종종 사용한다. 프로그램을 작성할 때 처음부터 세세한 구현을 다 해나가기보다는 전체 얼개부터 구성하는 편이 유리한 경우가 있다. 이 때, 각 함수의 이름과 매개변수 정도만 미리 정의해 두고 본문은 pass 문으로 비워두는 것이다. pass 문을 사용할 때는 코드 작성을 유예한 것인지, 정말로 실행할 것이 없는 것인지 주석으로 설명해두면 좋다.

개념 정리

  • else 절을 이용해 if 문의 조건이 거짓일 때 실행할 코드를 지정할 수 있다.
  • 서로 모순인 조건의 두 선택지를 if … else … 구문으로 나타낼 수 있다.
  • 코드 블록을 비워둘 때 pass 문을 사용한다.

6.1.5 elif: 선택지가 여러 개일 때

선택지가 두 개보다 더 많을 때도 있다. if 문과 else 절 사이에 elif 절을 추가할 수 있다. elif 절을 이용하면 조건과 선택지를 원하는 만큼 추가할 수 있고, 여러 개의 선택지를 하나의 if 문으로 묶을 수 있다.

elif 절을 포함하면 if 문의 양식은 다음과 같이 확장된다.

if 조건 1:
    본문 1 (조건 1이 참일 때 실행할 코드)
elif 조건 2:
    본문 2 (조건 2가 참일 때 실행할 코드)
elif 조건 3:
    본문 3 (조건 3이 참일 때 실행할 코드)
...
else:
    본문 N+1 (모든 조건이 거짓일 때 실행할 코드)

‘elif’는 영어 표현 ‘그렇지 않고 만약 … 이라면(else if …)’을 줄인 것이다. elif 절을 이용해 기온에 따라 할 일을 골라 선택하다록 해 보자.

코드 6-8 일요일 낮에 할 일 선택 3 (if3.py)

print('일요일 낮의 기온을 입력해주세요:')
기온 = float(input())  # 입력받은 기온을 실수로 변환하자

if 28.0 <= 기온:    # ❶ 첫 번째 선택지
    print('바닷가에서 더위를 피하자.')
elif 16.0 <= 기온:  # ❷ 위 조건이 거짓일 때 검사
    print('공원에서 스케이트보드를 타자.')
elif 8.0 <= 기온:   # ❸ 위 조건이 거짓일 때 검사
    print('도서관에서 책을 읽자.')
else:               # ❹ 모든 조건이 거짓일 때 실행
    print('집에서 프로그램을 만들자.')

실행 결과:

일요일 낮의 기온을 입력해주세요:
17.0
공원에서 스케이트보드를 타자.

elif 절은 자신의 앞에 나오는 조건이 거짓일 때만 자기 조건을 검사한다. 코드 6-8의 if 문을 실행하면, 먼저 ❶ 28.0 <= 기온 조건을 검사하여 참이면 본문을 실행하고 if 문의 실행을 끝낸다. 기온을 ‘17.0’이라고 입력했다면 조건이 거짓이 되므로 이어서 ❷ elif 절의 조건을 검사한다. ❷의 조건은 참이므로 본문을 실행하고 if 문의 실행을 종료한다. 이처럼 중간에 하나라도 조건이 참인 선택지가 있다면 그 이후에 나오는 선택지는 고려하지 않는다. 만약 ❷도 거짓이라면, 이어서 ❸ elif 절의 조건을 검사하여 그 결과에 따라 ❸의 본문 또는 ❹ else 절의 본문을 실행한다.

elif 절을 사용하지 않으면?

여러 개의 조건과 선택지를 나타낼 때, elif 대신 if 문을 여러 개 사용하면 어떻게 될까?

코드 6-9 elif 를 사용하지 않고 if 문으로만 선택지를 나타냈을 때 (if4.py)

print('일요일 낮의 기온을 입력해주세요:')
기온 = float(input())  # 입력받은 기온을 실수로 변환하자

if 28.0 <= 기온:
    print('바닷가에서 더위를 피하자.')
if 16.0 <= 기온:  # ❶ 
    print('공원에서 스케이트보드를 타자.')
if 8.0 <= 기온:   # ❷
    print('도서관에서 책을 읽자.')
else:
    print('집에서 프로그램을 만들자.')

실행 결과:

일요일 낮의 기온을 입력해주세요:
17.0
공원에서 스케이트보드를 타자.
도서관에서 책을 읽자.

위 코드를 실행하면 기온이 17.0일 때 ‘공원에서 스케이트보드를 타자.’와 ‘도서관에서 책을 읽자.’가 함께 출력된다. 기온이 17.0이면 ❶의 조건도 만족하고 ❷의 조건도 만족하기 때문이다. 원래는 한 가지 선택지만 출력하려는 프로그램이므로 잘못 작성된 프로그램이다.

elif 절과 else 절을 이용하면 여러 선택지를 묶어 그 중에서 한 번만 선택하도록 한다. 반대로 각 선택지를 별도의 if 문으로 작성하면 작성한 if 문의 개수만큼 선택이 일어난다. 이 차이를 잘 알아두도록 하자.

개념 정리

  • 여러 개의 선택지 중에서 하나를 선택하여 실행해야 할 때, if … elif … else … 구문을 이용한다.

6.1.6 여러 조건 결합하기

if 문에서 여러 조건을 결합하고 싶을 때가 있다. 예를 들어, 날씨만 보는 것이 아니라 오늘이 무슨 요일인지도 확인해야 할 일을 올바르게 결정할 수 있다. 4.4절에서 배운 and 연산과 or 연산을 사용하면 여러 조건을 결합할 수 있다.

and: 여러 조건이 모두 참이다

and 연산은 여러 조건이 모두 참인 경우를 나타낼 때 사용한다. 날씨가 '맑음'이고 요일이 '일요일'인 경우를 가려내고 싶다면 다음과 같이 조건을 작성한다.

코드 6-10 여러 조건이 모두 참일 때 (and 연산)

if (날씨 == '맑음') and (요일 == '일요일'):
    print('공원에서 스케이트보드를 타자.')

이와 동일한 조건을 and 연산을 사용하지 않고 나타내려면, 다음과 같이 if 문을 중첩해야 한다. and 연산을 이용하는 편이 간결하다.

코드 6-11 여러 조건이 모두 참일 때 (중첩 if 문)

if 날씨 == '맑음':
    if 요일 == '일요일':
        print('공원에서 스케이트보드를 타자.')

or: 여러 조건 중 단 하나만이라도 참이다

or 연산은 여러 조건 중 단 하나만이라도 참이면 되는 경우를 나타낼 때 사용된다. 요일이 토요일이거나 일요일인 경우를 가려내고 싶다면, 다음과 같이 조건을 작성한다.

코드 6-12 여러 조건 중 하나만이라도 참일 때 (or 연산)

if (요일 == '토요일') or (요일 == '일요일'):
    print('여유로운 시간을 보내자.')

이와 동일한 조건을 or 연산을 사용하지 않고 나타내려면, 다음과 같이 if 문을 중첩하여야 한다. or 연산을 이용하는 편이 간결하다.

코드 6-13 여러 조건 중 하나만이라도 참일 때 (중첩 if 문)

if 요일 <= '토요일':
    print('여유로운 시간을 보내자.')
else:
    if 요일 <= '일요일':
        print('여유로운 시간을 보내자.')

조건을 결합할 때 주의할 점

or 연산을 이용해 조건을 결합할 때 초보 프로그래머가 저지르기 쉬운 실수가 있다. ‘계절이 봄 또는 가을이다’ 라는 조건을 나타낼 때, 다음 중 어느 것이 올바른 표현인지 생각해 보자.

  1. 계절 == '봄' or '가을'
  2. 계절 == '봄' or 계절 == '가을'

1은 틀렸고 2가 올바르다. 1은 비교식 계절 == '봄'과 문자열 '가을'을 or 연산한 것이다. 문자열 '가을'은 항상 참으로 평가되므로 1은 계절 변수의 값이 무엇이든, 언제나 참으로 평가된다.

일상어에서는 반복되는 단어를 생략할 때가 많다. ‘계절이 봄 또는 가을이다’라고 할 때, ‘가을이다’는 ‘계절이 가을이다’를 줄인 것이다. 이 표현을 프로그래밍 코드로 옮길 때는 ‘계절이 봄이다 또는 계절이 가을이다’와 같이 완전한 문장으로 표현해야 하며, 따라서 2가 올바르다. (계절 == '봄') or (계절 == '가을')과 같이 or 양변의 비교식을 괄호로 둘러싸 표현하면 실수를 줄일 수 있다.

개념 정리

  • and 연산과 or 연산을 이용해 여러 개의 조건을 하나로 합칠 수 있다.
  • 논리 연산을 잘못 작성하지 않도록 주의해야 한다.

6.1.7 조건부 식

카페에서 월요일에만 카페 라테를 1,000 원에 판매하기로 했다. 월요일에만 음료 가격을 다르게 하려면 어떻게 하면 좋을까?

조건부 식(conditional expression)은 조건에 따라 값을 구하는 식이다. 덧셈식이 좌변과 우변의 값에 따라 값을 구하는 것처럼, 조건부 식은 조건을 판단한 결과에 따라 값을 구한다. 조건부 식은 형태가 if 문과 비슷하며, 다음과 같은 양식으로 작성한다.

참값 if 조건 else 거짓값

조건부 식은 if 예약어와 else 예약어 사이에 적어 둔 ‘조건’이 참이면 if 예약어 왼쪽의 ‘참값’으로 평가되고, 조건이 거짓이면 else 예약어 오른쪽의 ‘거짓값’으로 평가된다. 다음은 요일에 따라 음료 가격을 구하는 식이다.

코드 6-14 요일에 따라 음료 가격 구하기 (조건부 식)

가격 = 1000 if 요일 == '월요일' else 2500

코드 6-14의 대입문에서 우변의 조건부 식(1000 if 요일 == '월요일' else 2500)을 살펴보자. 식을 평가하면 조건 요일 == '월요일'을 평가한 결과에 따라 참값 1000 또는 거짓값 2500으로 평가될 것이다. 식을 평가한 값은 가격 변수에 대입할 수 있다.

조건부 식은 조건에 따라 달라지는 값을 구해 다른 문에서 사용하고자할 때 유용하다. if 문으로도 비슷한 작업을 수행할 수 있지만, if 문은 식이 아니라 명령문이기 때문에 평가 결과를 직접 변수에 대입하는 것이 불가능하다. 다음과 같이 if 문 속에서 대입문을 작성해야 하여 코드가 더 복잡해진다.

코드 6-15 요일에 따라 음료 가격 구하기 (if 문)

if 요일 == '월요일':
    가격 = 1000  # ❶ if 문의 본문에 대입문이 하나 필요하고...
else:
    가격 = 2500  # ❷ else 절의 본문에도 대입문이 하나 필요하다

이처럼, 조건에 따라 값을 바로 계산해 사용하고자 할 때는 if 문보다는 조건부 식을 사용하면 코드가 간결해진다. 프로그래머들이 자주 사용하는 표현이기 떄문에 잘 익혀두자. 반대로 단순히 값을 구하는 것이 아니라 조건에 따라 명령을 실행해야 할 때는 조건부 식이 아니라 if 문을 사용해야 한다.

개념 정리

  • 조건부 식을 이용해 조건에 따라 달라지는 값을 표현할 수 있다.
  • 조건부 식의 계산 결과를 변수에 대입할 수 있다.

연습문제

연습문제 6-1 할인된 가격 계산

어떤 상점에서는 상품을 한꺼번에 많이 구매하면 다음과 같이 상품 가격을 할인해 준다.

  • 10개 미만: 상품 하나에 100원
  • 10개 이상 30개 미만: 상품 하나에 95원
  • 30개 이상 100개 미만: 상품 하나에 90원
  • 100개 이상: 상품 하나에 85원

이 쇼핑몰에서 구매할 상품 개수를 입력받아, 총 지불해야 할 가격을 계산하는 함수 price()를 정의하라.

함수를 정의한 후에는 이 함수에 여러 상품 개수를 입력하여 결과가 올바른지 확인해 보아라.

연습문제 6-2 윤년 계산

연을 매개변수로 입력받아 그 해가 윤년인지 아닌지를 True 또는 False로 반환하는 함수 is_leap_year()를 정의하라.

윤년이란 1년이 365일이 아니라 366일로 이뤄진 해다. 윤년에는 2월이 28일까지가 아니라 29일까지 있다. 어떤 해가 윤년인지 아닌지를 판단하는 규칙은 다음과 같다.

  • 그 해의 수가 4로 나누어 떨어지면 윤년이다. (예: 1996년은 윤년이다)
  • 단, 그 해의 수가 100로 나누어 떨어지면 윤년이 아니다. (예: 1900년은 윤년이 아니다.)
  • 단, 그 해의 수가 400으로 나누어 떨어지면 윤년이다. (예: 2000년은 윤년이다.)

연습문제 6-3 한 달의 길이

연과 월을 매개변수로 입력받아, 그 달이 며칠까지 있는지 반환하는 함수 days_in_month()를 작성하라. 이 때, 2월의 길이는 윤년인지 아닌지에 따라 다르다. 윤년 계산을 위해 연습문제 6-2에서 만든 함수를 활용하라.

연습문제 6-4 비만도 검사

사용자로부터 키와 몸무게를 입력받아 비만 정도를 알려주는 프로그램을 작성하라.

비만도를 측정하는 방법:

  1. 체질량 지수를 구한다. 키가 t 미터, 체중이 w 킬로그램일 때, 체질량 지수는 w / (t * t) 다.
  2. 1예서 구한 체질량 지수가 18.5 미만이면 저체중, 18.5 이상 23 미만이면 정상, 23 이상 25 미만이면 과체중, 25 이상이면 비만이다.

실행 예:

키를 입력하세요(m): 1.75
몸무게를 입력하세요(kg): 65
정상입니다.

힌트: 문제를 필요한 만큼 여러 단계로 나누어, 여러 개의 함수를 정의하여 해결하자.

연습문제 6-5 절대값

절대값을 구하는 함수 absolute_number()를 if 문을 사용하지 않고 조건부 식을 활용해 작성하라. abs() 함수를 사용해서는 안 된다.