그림: if, else 문의 실행 구조
필자는 파이썬을 배우며 코드에 조건을 추가하려다 어떻게 표현하는지 몰라서 답답했었다.
오늘은 다양한 '조건'을 표현하는 방법을 배워보자.
저번 게시물의 코드를 긁어왔는데.
2019/08/22 - [파이썬 공부 (mac OS X)] - 7.if문(기초)
if people > banana:
print('사람이 많습니다. 몇명을 제거하여 바나나를 먹기위한 밸런스를 맞추십시오')
여기서 people > banana: 는 조건식이다.
'if'와 같이 조건문에 들어가는 조건식은 결국 참이나 거짓으로 판명이 되어,
조건문을 실행할지 실행하지 않을지를 결정해 주어야 하는데.
위의 코드에서 보았던 부등호를 비롯해, 수학 시간에 다 배워서 익숙한 비교 방법 몇 가지,
그리고 생소할 수 있는 'boolean 연산' 몇 가지가 있다.
대소 비교에 대해 알아보자.
빠르게 알아보기 위해 전에 포스팅했던 REPL을 코드 파일 대신에 이용할 거다.
2019/08/13 - [파이썬 공부 (mac OS X)] - 5. 파이썬 REPL 기초 (pwnable fd 풀이 포함)
참고로 이걸 읽어주시는 분들은, 이전 글에 사용된 if 코드를
2019/08/22 - [파이썬 공부 (mac OS X)] - 7.if문(기초)
활용하여 다른 조건도 추가해보고 결과도 확인해보고 하면 더 좋을 것 같다.
부등호 연산.
매우 쉽고 제일 쉽다.
8 < 10이라 입력하고 엔터 하였더니 True라고 나온다.
그 이유는 10이 8보다 큰 것이 사실이기 때문에 참이다.
다음으론 10 < 9 라 입력하고 엔터 하였더니 False라고 나온다.
당연히 10이 9보다 작을 수 없으므로 거짓이라 나온 것이다.
나머지 2개는 딱히 설명할 필요를 못 느낀다.
한편 부등호에는 같거나 크다 또는 같거나 작다 라는 의미를 가진 기호도 존재하는데?
수학에서 쓰듯 등호를 부등호 밑에 쓰는 방법은 쓰기가 어렵기 때문에.
파이썬에서는 이런 식으로 같거나 크다. 같거나 작다. 를 표현한다.
가장 위의 것은 10은 3보다 크거나 같다 이므로 True
그다음은 그 반대 3이 10보다 크거나 같다 이므로 False가 나와야 정상이다.
그 밑은 10이 10보다 크거나 같다 이므로 True이다.
나머지도 이해하기 어렵지 않다.
이런 식으로 파이썬은 등호를 부등호 뒤에 붙여서 쓴다.
주의해야 할 점은, 가끔 등호와 부등호의 순서를 바꾸어서 등호를 먼저 입력하고 싶어 하는 사람도 있는데,
파이썬에선 쓸 수 없는 표현이다.
같다를 표현하는 등호의 경우는?
지금까지 대입에 쓰던 등호 기호를 쓰면 되지 않을까?
라고 생각할 수 있지만, 안타깝게도 이 기호는 대입을 위해서만 예약되어있어 파이썬에서 문법 오류가 된다.
그럼 등호를 대입 말고 써야 할 때는 어떻게 하나?
방법은,
등호 두 개를 연달아 붙여서 이 기호가 대입을 위한 기호가 아니라 대소 비교를 위한 기호라는 것을 표현한다.
한편 부등호 중에는 같지 않다 라는 표현도 있는데.
수학에서는 등호에 빗금을 쳐서 표현하지만,
이 역시 컴퓨터에서 표현하긴 어렵기 때문에.
파이썬에서는 이렇게 표현한다.
! 를 이용하여 '!=' 이렇게 표현한다.
마찬가지로 이것 역시 등호는 반드시 ! 뒤에 써야 한다.
이상의 조건은 모두 참 아니면 거짓을 나타내는 표현이고.
그 결과로 True 나 False 라는 결과가 보인다.
이 두 값은 파이썬에서 쓰이는 특별한 표현이고,
참 이나 거짓 을 표현할 때 쓰는 단어이다.
if문의 조건식은 결국 참 이나 거짓으로 평가되어, 내용을 실행할지, 실행하지 않을지 결정한다고 적었었는데.
그래서 if 뒤의 조건식 자리에 True 나 False를 직접 넣어줘도 잘 동작한다.
추가로 boolean 연산이라 불리는 참이나 거짓 값만을 가지고 하는 특별한 연산에 대해 알아볼 건데.
여러 조건을 합춰서 새로운 조건을 만들고 싶을 때 쓰인다.
가장 흔이 쓰이는 연산으로는
and
or
not
이 있다.
간단하게 동작을 살펴보자.
and는 두 조건이 모두 참인 경우에만 참이다.
위와 같이 두 조건이 모두 참인지를 가리고 싶을 때 사용하면 된다.
(참고로 저거 쓸 때 True의 T와 False의 F를 대문자로 안 쓰면 신텍스 에러가 난다.)
or는 두 조건 중, 하나라도 참이면 참이다.
위와 같이 두 조건 중 하나라도 참인지를 가리고 싶을 때 사용하면 된다.
not은 True는 False로 False는 True로 바꾸어준다.
결과는 위와 같이
True는 False로
False는 True로.
마치 수 연산에서 부호를 뒤집기 위해 앞에 붙이는 -처럼 조건을 뒤집기 위해 쓴다.
예를 들어 a가 음수이고 b는 짝수이다 와 같은 조건을 쓰러면.
위와 같이 쓸 수 있다.
boolean 연산은 어떤 사람에겐 직관적일 수 있고, 어떤 사람에겐 직관적이지 않을 수도 있다.
프로그래밍에 있어선 아주 중요한 내용이지만, 프로그래밍을 입문한 사람에겐 당장 깊게 이해해야 할 필요는 없다.
만약 직관적으로 boolean 연산이 이해가 된다면?
내가 생각한 조건이 boolean 연산자를 이용해 잘 표현이 되는지 살펴보자.
만약 직관적으로 boolean 연산이 이해가 되지 않는다면?
3가지 연산의 결과(and, or, not)를 외우고 넘어가도록 하자.
예제를 보고 정리하고 마무리.
코드 이름은 printohjun.py
from datetime import datetime
hour = datetime.now().hour
if hour < 12:
print('오전이야.')
아주 짤막한 예제를 가져왔다.
조건문과 if문을 쓴 예제이다.
이 코드의 결과는 현재 시간이 12시보다 작을 때만 print문이 실행된다.
예제를 보고 정리하고 마무리.
% remainder
% 는 값을 나누고 난 나머지를 구해주는 연산자이다.
2019/08/12 - [파이썬 공부 (mac OS X)] - 4. 파이썬 숫자와 문자열(기초)
이 코드는 number라는 변수가 3의 배수인지 아닌지를 확인할 수 있다.
코드 이름은 truefalse.py
number = 12
if number % 3 == 0: #number가 3의 배수인지 확인.
print("{}는 3의 배수입니다.".format(number)) #12는 3의 배수이므로 참이다.
number = 17
if number % 3 == 0: #number가 3의 배수인지 확인.
print("{}는 3의 배수입니다.".format(number)) #17은 3의 배수가 아니므로 참이 아니다.
number = 12 는 3의 배수 (3 X 4 = 12) 이므로, 참이다. 나누어 떨어지면 == 0 이기 때문이다.
그에 비해 아랫줄
number = 17 는 3의 배수가 아니므로, 거짓이다. 나누어 떨어지고, 그 값이 == 0 이 아니기 때문이다.
이것을 응용하여 다시 코드를 짜보자.
코드 이름은 schoolbell.py
from datetime import datetime
hour = datetime.now().hour
#현재시간이 5의 배수일 때만 print문이 실행되도록 해보자.
if hour % 5 == 0:
print('학교 종이 땡땡땡.')
이 코드는, 매 5시간마다 종이 울리는 학교를 구현하기 위한 것으로.
hour에 저장된 현재 시간이 0,5,10,15시(5의 배수)일때만 print문이 실행되도록
if hour % 5 == 0:
if문을 위와같이 구성하였다.
다음 글은 블럭에 대하여이다.
'파이썬 공부' 카테고리의 다른 글
9.블록(Block) / 비트코인 블록(?) (0) | 2020.03.11 |
---|---|
7.if문(기초) (0) | 2019.08.22 |
6.shell 및 터미널 사용법(기초) (0) | 2019.08.16 |
5.파이썬 REPL 기초 (pwnable fd 풀이 포함) (0) | 2019.08.13 |
4.파이썬 숫자와 문자열(기초) (0) | 2019.08.12 |