'진리표'에 해당되는 글 1건

  1. 2015.10.14 #6. True or False
336x280(권장), 300x250(권장), 250x250, 200x200 크기의 광고 코드만 넣을 수 있습니다.

논리 문제를 다루게 될텐데, 이게 처음 접하는 사람들에겐 한참 헷갈리는 말이라고 하더라. 나는 개념상으로 헷갈려서 뭔가 막혔던 적은 없었어서 조건문이 헷갈리리라곤 상상도 못했는데 가르치다보니 학생들 사이에선 헷갈리는 일이 비일비재하더라.


참이냐 거짓이냐 그거시 문제로다!


python에는 여러가지 상수들이 있지만 True, False도 이런 상수들에 속한다.



위 사진과 같이 상수 취급되면서 bool이란 자료형을 가진다. True, False 를 따로 [bool 대수]라고 부른다.



이 상수값들을 이용해서 조건문을 검사할 수 있다.


잠시 삼천포로 빠졌다가 되돌아와야겠다. 아래 코드 예시들은 제대로된 코드가 아닌 의사코드(psudo code)이다.

조건문이란 if 키워드를 이용해서 프로그램 흐름의 갈래길을 만들어주는 것을 말한다. 주어진 조건 검사 결과가 참일때 실행할 명령어와 거짓일 때 실행할 명령어가 달라진다면 프로그램이 놓인 상황(상태)에 따라 다른 일을 하는 프로그램을 만들 수 있다.
실생활 예시를 보자. 일기 예보에서 비가 온다고 한다면 우산을 들고 나가고, 해가 쨍쨍하다면 우산을 두고 외출할 것이다. 배가 고프면 밥을 먹을 것이고 목이 마르면 물을 마실 것이고 졸리면 잠을 잘 것이다.
프로그램 상에서는 조건문 안에 조건을 넣어두면서 컴퓨터에게 질문한다고 생각하면 조금 쉽게 접근할 수 있다. "배가 고프냐?"라는 질문에 "yes"라고 답한다면 그 결과를 True (참)로 줄 것이고 밥을 챙겨먹는 행동을 하게 되는 식이다.
날씨를 예시로 보면 아래 코드로 나타낼 수 있다.

if is_it_rainy? :
    take_umbrella()

True, False를 조절하면서 조건문을 짜는 와중에 복합적인 조건들이 필요한 경우도 있다. 예를 들어 배가 고픈 동시에 짠 음식이 땡긴다면 부대찌개를 먹으러 가는 식이다. 두 조건에 대해 모두 적합한 경우 (참인 경우)에만 행동이 결정되는 것이다. 이것 외에 과학이 좋거나 수학이 좋다면 이과로 진학하는 식도 있다. 두 조건 중 하나만이라도 적합하다면 (참이라면) 행동이 결정되는 식이다. 

if hungry? and want_to_eat_salty_food? :
    eat_sausage_stew()
if do_you_like_science? or do_you_like_math? :
    study_in_이과 # 이과가 영어로 뭐죸ㅋㅋㅋㅋㅋ

물어보는 조건이 "배가 고프냐?" 처럼 한 종류 뿐이라면 "배가 안고프냐?"를 만들기 위해 질문을 뒤집을 수 있는 키워드도 있다. 질문 앞에 not을 붙여쓰는 것이다.

if not hungry? :
    do_nothing()



조건들이 복합적으로 엮일 때 학생들이 어려워하더라. ( 왜 그런진 모르겠지만.. )

논리를 따질때 각 조건들을 검사한 결과들을 전부 True, False로 바꿔보고 이것들의 and, or로 따진다고 생각하면 중1 집합 문제로 바뀌게 되어 훨씬 간단해진다. 복잡하게 생각할 필요없다.


전체 집합과 A, B집합을 벤다이어그램으로 나타낸 과녁이 있다고 생각해보자.
A집합은 조건 p에 대해 참인 원소들의 집합이고, B집합은 조건 q에 대해 참인 원소들의 집합이다.

이때 전체 집합에 속하는 어떤 원소(검사)가 주어져서 검사하는 과정을 과녁에 화살표 (다트)를 꽂는 과정으로 생각할 수 있다.

이 모델을 가지고 아래 글을 읽으면 이해가 쉬울 것이다.


p                q

True and True == True

True and False == False

False and True == False

False and False == False

and 검사의 경우 양쪽 결과 중 하나라도 False면 전체 결과는 False가 된다. 화살표가 A∩B 를 벗어나서 꽂힌다고 생각하면 쉽다. 집합A로부터 벗어난 곳에 꽂힌다면 검사결과가 조건 p에 대해 거짓이라는 뜻이 된다. 마찬가지로 A∩B 에서 벗어난 화살표는 A and B 검사에서 거짓이 되는 것이다. 따라서 False이다. 사람의 언어로 풀어쓰면 훨씬 받아들이기 쉬울 때도 있다. 헷갈리면 위에서 들었던 예시를 다시 한 번 보고 오길 바란다.


p                q

True or True == True

True or False == True

False or True == True

False or False == False

or 검사의 경우 양쪽 결과 중 하나라도 True이면 전체 결과는 True가 된다. A∪B 안에 어디든 꽂히는 화살표는 A or B 검사에서 참이 되는 것이다. 비록 A검사나 B검사 각각에 대해서는 거짓이 될 순 있지만 A∪B 안의 어딘가에 속하는 원소라면 검사 결과가 참으로 분류될 것이다. 마찬가지로 위에서 생활 예시를 들었던 것들을 다시 한 번 보면 도움될 것이다.



 And

True 

False 

True 

True 

False 

False 

False 

False 

 

 Or

True 

False 

True 

True 

True 

False 

True 

False 


위에서 4가지씩 들었던 True, False 들을 진리표로 나타낸 것이다.
And, Or과 같은 이항 연산자 (Binary Operator) 들을 특별히 논리 연산에 이용된다는 뜻에서 논리 연산자 (Logical Opertor)라고 불린다.


논리연산자에는 위 예시들처럼 이항 연산자만 있는 것은 아니다. 집합에서 여집합으로 나타내는 것과 같이 참, 거짓을 뒤집는 단항 연산자 not도 있다.

not True == False

not False == True

와 같이 나타낼 수 있다.



프로그램을 짜면서 조건문들에 따라 실행되는 명령어들을 조절하고 싶을때, 이러한 True, False 조건들을 잘 다룰 수 있어야한다. 익숙해지는데 그렇게 오래 걸리지도 않는다.

'Lecture (CS) > Introduction' 카테고리의 다른 글

#9. De Morgan's laws  (0) 2015.10.18
#8. Environment Setting  (0) 2015.10.18
#7. Short Circuit Evaluation  (0) 2015.10.14
#4. Instruction  (0) 2015.09.15
#3. Top-down Design  (0) 2015.09.13
Posted by CubePenguin
,