Python 기초

중첩 if-else문

앞에서까지는 하나의 if-else 문장만을 사용하였습니다.

하지만 만약 조건문 안에 조건문을 넣어야 한다면 어떻게 해야 할까요?

 

if-else 문장 안에 다른 if-else 문장을 넣을 수 있는데 이것을 중첩(nesting)된 if-else문 이라고 부릅니다.

if-else 문장 안에는 여러 개의 if-else 문장이 포함될 수 있습니다.

들여쓰기로 중첩의 수준을 알 수 있는데 이러한 구조는 혼동을 불러올 수 있기 때문에 많이 사용하는 것은 자제해야 합니다.

 

if 조건1:
	문장 A
else:
	if 조건2:
		문장 B
	else:
		문장 C

 

 

예를 들면 인터넷에서 새로 나온지 1년이 되지 않은 레드벨벳 앨범을 사기로 했을 때 앨범이 개당 20,000원 미만이면 2개를 삽니다.

하지만 앨범이 개당 20,000원 이상이면 1개만 살 때 다음과 같이 프로그램으로 작성할 수 있습니다.

albumDay = int(input("앨범이 나온 지 며칠 지났나요? : "))
albumPrice = int(input("앨범 1개의 가격을 입력하시오 : "))

if albumDay < 365:
	if albumPrice < 20000:
		print("2개를 산다")
	else:
		print("1개를 산다")
else:
	print("앨범을 사지 않는다")

 

<실행 결과>

  • 365, 19000을 입력했을 때
앨범이 나온 지 며칠 지났나요? : 365
앨범 1개의 가격을 입력하시오 : 19000
앨범을 사지 않는다
  • 300, 21000을 입력했을 때
앨범이 나온 지 며칠 지났나요? : 300
앨범 1개의 가격을 입력하시오 : 21000
1개를 산다

 

도전 과제

1. 봉민이는 홈페이지를 만드는 연습을 하기 위해 아이디를 입력받아 등록된 아이디인지를 검사하는 프로그램을 만들고자 합니다.

아이디는 리스트(list)에 저장하고 비밀번호는 'redvelvet' 으로 고정하여 아이디와 패스워드를 물어보는 프로그램을 만들어 봅시다.

 

<리스트 예시>

user_list = ['아이린', '슬기', '웬디', '조이', '예리']

 

<실행 결과>

  • 아이디 : 슬기, 패스워드 : redvelvet 을 입력했을 때
아이디 : 슬기
패스워드를 입력하시오 : redvelvet
환영합니다!
  • 아이디 : 슬기, 패스워드 : seulgi 를 입력했을 때
아이디 : 슬기
패스워드를 입력하시오 : seulgi
잘못된 패스워드입니다 ㅠㅠ
  • 아이디 : 봉민 을 입력했을 때
아이디 : 봉민
알 수 없는 사용자입니다!

 


2. 봉민이는 어느 날 동생이 10월이 30일까지 있는지, 31일까지 물어봤을 때 답하지 못하여 동생을 위한 프로그램을 만들기로 하였습니다.

특정 달이 입력되면 그 달의 일 수를 출력하는 프로그램을 만들어 봅시다.

2월은 윤년일 경우 바뀌기 때문에 추가로 연도를 입력받고 아래의 조건을 사용합니다.

 

<조건>

  • 4로 나누어지며 100으로 나누어지지 않으면 윤년입니다.
  • 400으로 나누어지면 윤년입니다.

 

HINT
  • 사용자로부터 달을 입력받은 후에  if-else 선택 구조를 사용하여 각 달의 일수를 출력합시다.
  • 위의 조건을 수식으로 표현하면 아래와 같습니다.
( (연도가 4로 나누어 떨어짐) and (100으로 나누어 떨어지는 연도는 제외) ) or (400으로 나누어 떨어짐) )

 

<실행 결과>

  • 2월, 2018년을 입력했을 때
월을 입력하세요 : 2
연도를 입력하세요 : 2018
월의 날수는 28일입니다.
  • 2월, 2016년을 입력했을 때
월을 입력하세요 : 2
연도를 입력하세요 : 2016
월의 날수는 29일입니다.
  • 12월을 입력했을 때
월을 입력하세요 : 12
월의 날 수는 31일입니다.

 


3. 봉민이는 아이언맨의 "자비스" 같은 인공 지능을 만들고 싶어 그 시작으로 숫자를 입력하면 문자로 변환하는 프로그램을 만들기 시작했습니다.

사용자가 123을 입력하면 "일백이십삼" 이라고 출력하는 프로그램을 만들어 봅시다. 단 999보다 작은 수라고 가정합니다.

 

<출력 결과>

  • 392를 입력했을 때
숫자를 입력하세요 : 392
삼백구십이
  • 205를 입력했을 때
숫자를 입력하세요 : 205
이백오
  • 43을 입력했을 때
숫자를 입력하세요 : 43
사십삼

 


4. 3번 문제를 구현한 봉민이는 자신감이 생겨 이번에는 현재 시각마다 적절한 인사를 출력하는 기능을 추가하려고 합니다.

현재 시각에 따라 연속적인 if문을 사용하여 프로그램을 작성하여 봅시다.

 

<조건>

  • 월 출력
    • 3월부터 5월까지는 '봄이네요' 를 출력합니다.
    • 6월부터 8월까지는 '여름이네요' 를 출력합니다.
    • 9월부터 11월까지는 '가을이네요' 를 출력합니다.
    • 12월부터 3월까지는 '겨울이네요' 를 출력합니다.
  • 시간 출력
    • 6시부터 11시까지는 'Good morning' 을 출력합니다.
    • 11시부터 17시까지는 'Good afternoon' 을 출력합니다.
    • 17시부터 21시까지는 'Good evening' 을 출력합니다.
    • 21시부터 다음날 6시까지는 'Good night' 을 출력합니다.

 

HINT

파이썬에서 현재 월과 시각을 얻어오는 방법은 아래의 예제를 참고하기 바랍니다.

import time
now = time.localtime()

print("현재 시간은 ", time.asctime())
print("현재 월 : ", now.tm_mon)
print("현재 시: %d" % (now.tm_hour))

 

<실행 결과>

  • 오후 4시 05분에 프로그램을 실행했을 때
현재 시간은  Fri Mar 30 16:06:45 2018
봄이네요
Good afternoon