본문 바로가기

파이썬 공부

8. 조건식(기초)

728x90
반응형
SMALL

출처: https://wikidocs.net/images/page/3084/4.02.png

그림: if, else 문의 실행 구조

boolean 연산 출처: https://www.lotame.com/wp-content/uploads/2017/01/booloeanlogic.jpeg


필자는 파이썬을 배우며 코드에 조건을 추가하려다 어떻게 표현하는지 몰라서 답답했었다.

오늘은 다양한 '조건'을 표현하는 방법을 배워보자.

저번 게시물의 코드를 긁어왔는데.

 

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 풀이 포함)

 

5.파이썬 REPL 기초 (pwnable fd 풀이 포함)

REPL이란? Read = (코드를) 읽고 Eval = (읽은 코드를) 평가(실행) 하고 Print = (실행한 결과를) 출력하는 Loop = 루프 (반복) read–eval–print loop (REPL), interactive top-level, language shel..

blog.tomclansys.com

참고로 이걸 읽어주시는 분들은, 이전 글에 사용된 if 코드를

2019/08/22 - [파이썬 공부 (mac OS X)] - 7.if문(기초)

 

7.if문(기초)

대부분의 프로그램은 사용자에게 선택을 요구한다. 프로그래밍의 핵신 제어구조에서 가장 간단하고도 중요한 조건문. if문은 조건문이다. 만약 주어진 조건에 맞는 true면 실행하고 맞지 않는 false면 실행하지..

blog.tomclansys.com

활용하여 다른 조건도 추가해보고 결과도 확인해보고 하면 더 좋을 것 같다.


부등호 연산.

매우 쉽고 제일 쉽다.

REPL 활용

8 < 10이라 입력하고 엔터 하였더니 True라고 나온다.

그 이유는 10이 8보다 큰 것이 사실이기 때문에 이다.

 

다음으론 10 < 9 라 입력하고 엔터 하였더니 False라고 나온다.

당연히 10이 9보다 작을 수 없으므로 거짓이라 나온 것이다.

 

나머지 2개는 딱히 설명할 필요를 못 느낀다. 

 

한편 부등호에는 같거나 크다 또는 같거나 작다 라는 의미를 가진 기호도 존재하는데?

수학에서 쓰듯 등호를 부등호 밑에 쓰는 방법은 쓰기가 어렵기 때문에.

파이썬에서는  이런 식으로 같거나 크다. 같거나 작다. 를 표현한다.

>=, <=

가장 위의 것은 10은 3보다 크거나 같다 이므로 True

그다음은 그 반대 3이 10보다 크거나 같다 이므로 False가 나와야 정상이다.

그 밑은 10이 10보다 크거나 같다 이므로 True이다.

나머지도 이해하기 어렵지 않다.

 

이런 식으로 파이썬은 등호를 부등호 뒤에 붙여서 쓴다.

 

주의해야 할 점은, 가끔 등호와 부등호의 순서를 바꾸어서 등호를 먼저 입력하고 싶어 하는 사람도 있는데,

신텍스 에러

파이썬에선 쓸 수 없는 표현이다.


같다를 표현하는 등호의 경우는?

지금까지 대입에 쓰던 등호 기호를 쓰면 되지 않을까?

신텍스 에러

라고 생각할 수 있지만, 안타깝게도 이 기호는 대입을 위해서만 예약되어있어 파이썬에서 문법 오류가 된다.

그럼 등호를 대입 말고 써야 할 때는 어떻게 하나?

방법은,

3 == 3

등호 두 개를 연달아 붙여서 이 기호가 대입을 위한 기호가 아니라 대소 비교를 위한 기호라는 것을 표현한다.

 

한편 부등호 중에는 같지 않다 라는 표현도 있는데.

수학에서는 등호에 빗금을 쳐서 표현하지만,

이 역시 컴퓨터에서 표현하긴 어렵기 때문에.

파이썬에서는 이렇게 표현한다.

!=

! 를 이용하여 '!=' 이렇게 표현한다.

신텍스 에러

마찬가지로 이것 역시 등호는 반드시 ! 뒤에 써야 한다.


이상의 조건은 모두 아니면 거짓을 나타내는 표현이고.

그 결과로 TrueFalse 라는 결과가 보인다.

이 두 값은 파이썬에서 쓰이는 특별한 표현이고,

이나 거짓 을 표현할 때 쓰는 단어이다.

 

if문의 조건식은 결국 이나 거짓으로 평가되어, 내용을 실행할지, 실행하지 않을지 결정한다고 적었었는데.

그래서 if 뒤의 조건식 자리에 TrueFalse를 직접 넣어줘도 잘 동작한다.


추가로 boolean 연산이라 불리는 이나 거짓 값만을 가지고 하는 특별한 연산에 대해 알아볼 건데.

여러 조건을 합춰서 새로운 조건을 만들고 싶을 때 쓰인다.

 

가장 흔이 쓰이는 연산으로는

 

and

 

or

 

not

 

이 있다.

간단하게 동작을 살펴보자.


and는 두 조건이 모두 인 경우에만 이다.

and

위와 같이 두 조건이 모두 참인지를 가리고 싶을 때 사용하면 된다.

(참고로 저거 쓸 때 True의 T와 False의 F를 대문자로 안 쓰면 신텍스 에러가 난다.)


or는 두 조건 중, 하나라도 이면 이다.

or

위와 같이 두 조건 중 하나라도 참인지를 가리고 싶을 때 사용하면 된다.


not은 TrueFalseFalseTrue바꾸어준다.

not

결과는 위와 같이

TrueFalse

FalseTrue로.

마치 수 연산에서 부호를 뒤집기 위해 앞에 붙이는 -처럼 조건을 뒤집기 위해 쓴다.

 

예를 들어 a가 음수이고 b는 짝수이다 와 같은 조건을 쓰러면.

a < 0 and b % 2 == 0

위와 같이 쓸 수 있다.


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. 파이썬 숫자와 문자열(기초)

 

4.파이썬 숫자와 문자열(기초)

오늘은 파이썬에서 숫자와 문자열을 어떻게 다루는지 알아볼 거임. 간단한 코드를 작성해보자. 이름은 sutjamoonja.py my_name = 'tom' # (문자열 = 사람을 위한 문자를 프로그래머들이 부르는 방법) my_age = 20..

blog.tomclansys.com

이 코드는 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문을 위와같이 구성하였다.


다음 글은 블럭에 대하여이다.

반응형
LIST