티스토리 뷰

4.11 논리연산자(Logical Operators)

 

- 논리연산자(Logical Operators) or, and 그리고 not복합적인 조건식을 만들때 사용한다.

- 우리는 두 개 이상의 조건식을 작성하여야 하는 경우가 생긴다.

- 이런 경우 논리연산자를 이용하여 두 개 이상의 조건식을 조합하여 표현할 수 있다.

- 논리연산자(Logical Operators)는 부울 연산자(Boolean Operators)라고도 알려져 있다.

- 종류는 not, and, or 이 있다.

 

* not 논리 연산자

not p 

 Example (assume age = 24, gender = 'F')

 True

 False 

 not (age > 18) 은 거짓(False) 이다, 왜냐면 (age > 18) 가 참(True) 이기 때문. 

 False

 True 

 not (gender == 'M') 은 참(True)이다. 왜냐면 (gender == 'M') 은 거짓(False) 이기 때문.

 

 

* and 논리 연산자

p1 

p2 

p1 and p2 

Example (assume age = 24, gender = 'F') 

 False

 False

 False 

 (age > 18) and (gender != 'F' ) 는 거짓(False)이다. 왜냐면 (gender != 'F' )가 거짓(False)이기 때문.

 

(age > 18) and (gender == 'F') 는 참(True)이다. 왜냐면 (age > 18) 와 (gender == 'F') 둘 다 참(True)이기 떄문.

 False

 True

 False

 True

 False

 False

 True

 True

 True

 

 

* or 논리 연산자

p1 

p2 

p1 and p2 

Example (assume age = 24, gender = 'F') 

 False

 False

 False 

 (age > 34) or (gender == 'M' ) 는 거짓(False)이다. 왜냐면 (age > 34) 와 (gender == 'M' ) 둘 다 거짓(False)이기 때문.

 

 (age > 34) or (gender == 'F') 는 참(True)이다. 왜냐면 (gender == 'F') 가 참(True) 이기 떄문.

 False

 True

 True

 True

 False

 True

 True

 True

 True

 

* 부울 연산자(boolean operator) 예제

1
2
3
4
5
6
7
8
9
10
11
number = eval(input("Enter the number: "))
 
if number % == and number % == 0:
    print(number, " is divisible by 2 and 3.")
 
if number % == or number % == :
    print(number," is divisible by 2 or 3.")
 
if (number % == or number % ==0and \
     not (number % == and number % ==0):
    print(number," is divisible by 2 or 3. but not both")
cs

 

* tip

- 만약 not 연산자와 or, and 연산자를 함께 사용하는 것이 헷갈린다면, 드 모르간 법칙(De Morgan’s law)을 이용하는 것이 편리하다.

"not (condition1 and condition2)" 는 "not condition1 or not condition2" 와 같은 의미이다.

"not (condition1 or condition2)" 는 "not condition1 and not condition2" 와 같은 의미이다.

 

- 즉, 논리 연산자에서, and 연산자를 사용한 식들에서 둘 중 하나가 False 라면 전체 표현식이 False 이고, or 연산자를 사용한 식들에서 둘 중 하나가 True라면 전체 표현식이 True이다.

- 또, 논리연산자를 사용할 때에 파이썬은 효율적인 연산을 위해 우선순위를 두고 연산을 진행한다.

- 예를 들어, p1 and p2 에서 파이썬은 첫 번째로 p1을 먼저 계산하며, p1이 True라면 p2의 계산을 진행한다. 하지만 만약 p1이 False 라면 p2로 연산을 진행하지 않는다.

- p1 or p2의 경우, p1을 먼저 계산하고, p1이 False라면 p2의 계산을 진행한다. 하지만 만약 p1이 True 라면 p2의 계산을 진행하지 않는다.

 

*elif와 if의 차이

if문의 경우, if문으로 되어있는 각각의 모든 조건식을 확인.

elif문의 경우, if문의 조건식이 충족된다면, elif문은 확인하지 않고 넘어감.

 

4.12 사례 연구: 윤년 판별하기

- 윤년 계산법

4로 나누어지면서 100으로는 나누어 지지 않는 년도 = 윤년

400으로는 나누어 떨어지는 년도 = 윤년

그 외에는 평년이다.

 

1
2
3
4
5
6
7
8
year = eval(input("Enter the year: "))
 
if (year % == and year % 100 != 0or \
   year % 400 == 0:
    print(year, " is leap year.")
 
else:
    print(year, " is not leap year.")
cs

 

 

4.13 사례 연구: 복권

- 1~99까지의 복권 번호를 랜덤으로 받는다.

- 사용자가 번호의 순서와 숫자를 모두 정확하게 맞추면 $10000

- 순서는 틀렸지만 숫자가 모두 맞다면 $3000

- 숫자 하나만 맞췄다면 $1000

- 그 외는 꽝

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
import random
 
userNumber = eval(input("Enter the number: "))
 
comNumber = 60#random.randint(0,99)
print("The lottery number is ",comNumber)
digit1 = comNumber // 10
digit2 = comNumber % 10
 
if digit1 == userNumber // 10 and digit2 == userNumber % 10 :
    print("Exact match: you win $10,000")
 
elif digit1 == userNumber % 10 and digit2 == userNumber // 10 :
    print("Match all digits: you win $3,000")
 
elif (digit1 == userNumber % 10 or \
      digit1 == userNumber // 10 or \
      digit2 == userNumber % 10 or \
      digit2 == userNumber // 10) :
      print("Match one digits: you wind $1,000")
 
else:
    print("sorry, no match")
cs

 

참고 문헌 : Introduction to Programming Using Python / Y.DANIEL LIANG



본 게시물은 개인적인 용도로 작성된 게시물입니다. 이후 포트폴리오로 사용될 정리 자료이니 불펌과 무단도용은 하지 말아주시고 개인 공부 목적으로만 이용해주시기 바랍니다.


교재 영어 원서를 직접 번역하여 정리한 게시물이므로 일부 오타, 의역이 존재할 수 있습니다. 틀린 부분이 있다면 댓글로 알려주시면 감사하겠습니다. 

댓글