코딩 노트

03-2 if~else와 elif 구문 본문

Python

03-2 if~else와 elif 구문

newbyeol 2021. 4. 20. 19:59

0. 시작하기 전에...

세상에는 두 가지로만 구분되는 것들이 많다. 예를 들어 오전이 아니면 반드시 오후이다. 

앞에서는 나머지 연산자를 활용해 홀수와 짝수를 구분했는데 if 조건문을 두 번이나 사용해서 조건을 비교 했다.

하지만 홀수가 아니라면 반드시 짝수이기 때문에 이런 정반대되는 상황에서 두 번이나 조건을 비교해야 하는 것은

낭비이다.

 

1. else 조건문의 활용

if 조건문 뒤에 사용하며, if 조건문의 조건이 거짓일 때 실행되는 부분이다.

 

if 조건:
	조건이 참일 때 실행할 문장
else: 
	조건이 거짓일 때 실행할 문장

· if 조건문에 else 구문을 추가해서 짝수와 홀수 구분

# 입력을 받습니다.
number = input("정수 입력>")
number = int(number)

#조건문을 사용합니다.
if number % 2 == 0:
	#조건이 참일 때, 즉 짝수 조건
    print("짝수입니다")
else:
	# 조건이 거짓일 때, 즉 홀수 조건
    print("홀수입니다")

조건문이 오로지 두 가지로만 구분될 때 if else 구문을 사용하면 조건 비교를 한 번만 하므로 코드보다 두 배

효율적이라고 할 수 있다.

 

2. elif 구문

딱 두가지만으로 구분되지 않는 것도 있다. 예를 들어 계절만 해도 네 개가 있으며, 요일만 해도 일곱 개가 있다.

따라서 세 개 이상의 조건을 연결해서 사용하는 방법이 필요하다. 그 것이 바로 elif 구문이다.

 

if 조건문과 else 구문 사이에 입력하며, 다음과 같은 형태로 사용 된다.

if 조건A:
	조건A가 참일 때 실행할 문장
elif 조건B:
	조건B가 참일 때 실행할 문장
elif 조건C:
	조건C가 참일 때 실행할 문장
...
else:
	모든 조건이 거짓일 때 문장

 

· 계절 구하기

#날짜/시간과 관련된 기능을 가져옵니다.
import datetime

#현재 날짜/시간을 구하고
#쉽게 사용할 수 있게 월을 변수에 저장합니다.
now = datetime.datetime.now()
month = now.month

#조건문으로 계절을 확인합니다.
if 3 <= month <= 5:
	print("현재는 봄입니다.")
elif 6 <= month <= 8:
	print("현재는 여름입니다.")
elif 9 <= month <= 11:
	print("현재는 가을입니다.")
else:
	print("현재는 겨울입니다.")

7행까지의 실행으로 현재 날짜에서 월을 추출하여 month에 넣고(1~7행), 첫 번째 조건인 month에 저장된 값이

3보다 크거나 같고 5보다 작거나 같은지(3 <= month <=5)를 비교한 후(10행), 그 결과가 참이므로 바로 밑에 있는

실행문 "현재는 봄입니다."를 출력하고(11행) 코드 실행을 끝낸다.

 

3. if 조건문을 효율적으로 사용하기

 

· 예제

조건

설명(학생 평가)

조건

설명(학생 평가)

4.5

1.75~2.3

오락문화의 선구자

4.2~4.5

교수님의 사랑

1.0~1.75

불가촉천민

3.5~4.2

현 체제의 수호자

0.5~1.0

자벌레

2.8~3.5

일반인

0~0.5

플랑크톤

2.3~2.8

일탈을 꿈꾸는 소시민

0

시대를 앞서가는 혁명의 씨앗

일단 소수점을 사용하므로 입력을 숫자로 변환할 때 float()함수를 사용해야한다.

 

· 유머를 조건문으로 구현하기(1)

#변수를 선언합니다.
score = float(input("학점 입력> "))

#조건문을 적용합니다.
if score == 4.5:
	print("신")
elif 4.2 <= score < 4.5:
	print("교수님의 사랑")
elif 3.5 <= score < 4.2:
	print("현 체제의 수호자")
elif 2.8 <= score < 3.5:
	print("일반인")
elif 2.3 <= score < 2.8:
	print("일탈을 꿈꾸는 소시민")
elif 1.75 <= score < 2.3:
	print("오락문화의 선구자")
elif 1.0 <= score < 1.75:
	print("불가촉천민")
elif 0.5 <= score < 1.0:
	print("자벌레")
elif 0 <= score < 0.5:
	print("플랑크톤")
elif score == 0:
	print("시대를 앞서가는 혁명의 씨앗")

그런데 이는 초보자일 때 가장 많이 하는 형태의 비효율적인 조건문이라고 할 수 있다.

if 조건문은 위에서 아래로 흐르며, else 구문과 elif 구문은 이전의 조건이 맞지 않을 때 넘어오는 부분이다.

따라서 위에서 이미 제외된 조건을 한 번 더 검사할 필요는 없다.

앞의 코드를 좀 더 효율적으로 구성하면 다음과 같다.

 

· 유머를 조건문으로 구현하기(2)

#변수를 선언합니다.
score = float(input("학점 입력> "))

#조건문을 적용합니다.
if score == 4.5:
	print("신")
elif 4.2 <= score:
	print("교수님의 사랑")
elif 3.5 <= score:
	print("현 체제의 수호자")
elif 2.8 <= score:
	print("일반인")
elif 2.3 <= score:
	print("일탈을 꿈꾸는 소시민")
elif 1.75 <= score:
	print("오락문화의 선구자")
elif 1.0 <= score:
	print("불가촉천민")
elif 0.5 <= score:
	print("자벌레")
elif 0 < score:
	print("플랑크톤")
else:
	print("시대를 앞서가는 혁명의 씨앗")

이미 한 번 비교한 것은 제외하고 작성한 코드이다. 즉 5행에서 score가 4.5인지 비교해서 거짓임을 확인하고

7행을 실행하고 있으므로 하위 값만 검사하고 상위 값은 검사를 생략한 것이다.

elif 4.2 <= score < 4.5:   --->   elif 4.2 <= score:

elif 구문을 사용할 때는 앞 단계 조건문에서 비교했던 것을 다음 단계에서 한 번 더 하고 있지는 않은지 확인해야한다.

 

4. False로 변환되는 값

if 조건문의 매개변수에 불이 아닌 다른 값이 올 때는 자동으로 이를 불로 변환해서 처리한다. 따라서 어떤 값이 True로

변환되고, 어떤 값이 False로 변환되는지 알고 있어야 코드를 이해할 수 있다. False로 변환되는 값은 None, 숫자 0과 0.0,

빈 컨테이너(빈 문자열, 빈 바이트열, 빈 리스트, 빈 튜플, 빈 딕셔너리 등)이다. 이 외에는 모두 True로 변환되므로 위에

언급한 세 가지만 기억하면 된다.

 

· False로 변환되는 값

print("# if 조건문에 0 넣기")
if 0:
	print("0은 True로 변환됩니다")
else:
	print("0은 False로 변환됩니다")
print()

print("# if 조건문에 빈 문자열 넣기")
if "":
	print("빈 문자열은 True로 변환됩니다")
else:
	print("빈 문자열은 False로 변환됩니다")

2행의 조건문에 0이 있으므로 이것은 False로 변환되어 5행의 else 구문으로 이동한 후 "0은 False로 변환됩니다"를

출력하고, 9행의 조건문에는 빈 문자열 ""이 있으므로 이 또한 False로 변환되어 12행의 else 구문으로 이동한 후 

"빈 문자열은 False로 변환됩니다"를 출력합니다.

(뭐가 없는 것 같은 것은 False)

 

5. pass 키워드

프로그래밍을 하다 보면 일단 프로그래밍의 전체 골격을 잡아 놓고 내부에서 처리할 내용은 차근차근 생각하며 만들겠다는 의도로 다음과 같이 코딩하는 경우가 많다. 이때 골격은 일반적으로 조건문, 반복문, 함수, 클래스 등의 기본 구문을

말한다.

 

if zero == 0
	빈 줄 삽입
else:
	빈 줄 삽입

· 나중에 구현하려고 비워 둔 구문

#입력을 받습니다.
number = input("정수 입력> ")
number = int(number)

#조건문 사용
if number > 0:
	#양수일 때: 아직 미구현 상태입니다.
else:
	#음수일 때: 아직 미구현 상태입니다.

다음 프로그래밍 언어에서는 위의 7행과 9행처럼 아무 내용을 작성하지 않아도 실행이 정상적으로 되지만,

파이썬의 경우에는 if 조건문 사이에는 무조건 들여쓰기 4칸을 넣고 코드를 작성해야만 구문이 성립되기 때문에

위와 같이 작성한 경우에는 indentationError(들여쓰기가 잘못되어 있다)를 발생한다.

 

그렇기 때문에 if 구문 사이에는 어떤 내용이라도 넣어 줘야 한다. 그래서 0이라는 의미 없는 숫자를 넣어줄 수 있는데

그렇게 되면 일단 실행은 정상적으로 되지만, 다른 개발자들이 이 코드를 보면 "왜 0이 있지?"라고 이상하게

생각할 수도 있다. 그래서 파이썬에서는 이러한 고민을 덜어주기 위해 pass라는 키워드를 제공한다.

pass 키워드의 의미는 "진짜로 아무것도 안 함" 또는 "곧 개발하겠음"이라는 의미이다.

 

· pass키워드를 사용한 미구현 부분 입력

#입력을 받습니다.
number = input("정수 입력> ")
number = int(number)

#조건문 사용
if number > 0:
	#양수일 때: 아직 미구현 상태입니다.
    pass
else:
	#음수일 때: 아직 미구현 상태입니다.
    pass

 

· 좀 더 알아보기...

pass 키워드를 입력해 놨어도 잊어버릴 수 있다. raise 키워드와 미구현 상태를 표현하는 NotImplementedError를 

조합해 raise NotImplementedError를 사용하면 '아직 구현하지 않은 부분이에요!'라는 오류를 강제로 발생시킬 수 있다.

#입력을 받습니다.
number = input("정수 입력> ")
number = int(number)

#조건문 사용
if number > 0:
	#양수일 때: 아직 미구현 상태입니다.
    raise NotImplementedError
else:
	#음수일 때: 아직 미구현 상태입니다.
    raise NotImplementedError

코드를 실행하면 코드의 실행은 정상적으로 진행 된다. 대신 구현되지 않은 부분에 들어서는 순간

NotImplementedError 라는 오류를 발생시킨다. 따라서 구현을 안 했다는 것을 인지 할 수 있는 것이다.

'Python' 카테고리의 다른 글

04-2 딕셔너리와 반복문  (0) 2021.04.26
04-1 리스트와 반복문  (0) 2021.04.22
03-1 불 자료형과 if 조건문  (0) 2021.04.18
02-4 숫자와 문자열의 다양한 기능  (0) 2021.04.17
02-3 변수와 입력  (0) 2021.04.17