본문 바로가기
  • Top Genius in the world
알고리듬

[알고리듬] #38 불 표현식

by Mr.Algo 2024. 4. 5.
728x90
반응형

파이썬 실습창을 열 수 있습니다.실습창 열기

부엉이

부엉이는 지혜의 상징입니다. 티베트 등에서는 깨달음의 의미가 있습니다. 우리나라에서는 재물을 상징합니다.

깨달음으로 지혜를 얻고, 부자되세요.

 

 

1. 불 표현식

표현식(bool expression)을 생성하는데 사용하는 not, and, or의 의미는 기존 수학의 개념보다 확장되어 있습니다.

파이썬의 불 표현식 평가 방법은 다음과 같습니다.

 

TrueFalse의 구분은 다음과 같다.

  • True(참) True, 0이 아닌 수, 비어있지 않은 str, list, tuple, dict
  • False(거짓) False, 0, None, 비어있는 str, list, tuple, dict

평가 순서와 방법은 다음과 같다.

  • not, and, or 순서이며 같은 경우에는 왼쪽에서 오른쪽 순으로 평가한다.
  • 오른쪽 피연산자는 필요한 경우에만 사용된다. 예를 들어, 'x and y'는 x와 y를 모두 참조하는 것이 아니라, x가 참인 경우에만 y를 반환한다.
  • 이러한 방법을 단축평가(short-circuit evaluation)라 한다.

동등연산자(==)의 평가 방법은 다음과 같다.

  • list, tuple :  모든 원소들을 순서대로 비교하여, 모두 같은 값이면 True, 그 외는 False이다.
  • dict :  x, y에 모두 같은 key가 있고, 또한 key의 value가 같으면 True, 아니면 False이다.
  • set, frozenset:  두 집합의 모든 원소가 같으면 True, 아니면 False이다.
  • x is y, x is not y:  x와 y가 메모리의 동일한 object를 가리키면 True, 아니면 False이다.

다음 표를 실습하고 이해하십시오.

no 연산자 python 의미 example
1 x and y
(논리 곱)
x가 거짓이면 x,
아니면 y를 반환한다.
x=True
y=3
z=[]
a=x and y  #a=3 :x가 참이므로 y 반환
b=z and y  #b=[] :z가 거짓이므로 z 반환
c=x and y and z  #c=[] :'x and y'=>'y and z'=>[]
2 x or y
(논리 합)
x가 거짓이면 y,
아니면 x를 반환한다.
x=True
y=3
z=[]
a=x or y  #a=True :x가 참이므로 x 반환
b=z or y  #b=3 :z가 거짓이므로 y 반환
c=x or y or z  #c=True :'x or y'=>True
3 not x
(논리 부정)
x가 거짓이면 True,
아니면 False를 반환한다.
x=True
y=3
z=[]
a=not x  #a=False :xTrue이므로 False 반환
b=not z  #b=True :zFalse이므로 True 반환
c=not not y  #c=True y는 참. 참의 반대의 반대
4 x == y
(동등 연산)
위의 평가 방법 참조 x=True
y=3
z=[]
a=x==y  #a=False :xy가 같지 않다.
b=x==bool(y)  #b=True :bool(y)True
c=x==bool(y)==(not bool(z))  #c=True
5 x is y
x is not y
(identity)
id가 같으면 True,
아니면 False를 반환한다.
x=3
y=3
z=[3]
a=x is y  #a=True :xyid가 같다.
b=x is z  #b=False :xzid가 다르다.
c=x is not z  #c=True :xzid가 다르다.

 

2. 문제 해결

다음 문제들을 해결하여 보세요.

no item example output description
1 x**y a=3**2**3
print(a)

6561
power(지수)
3**2**3=3**(2**3)
2 shifting
(이동연산)
a=13
b=a<<2
print(b)
52
10진수 132진수 1101이다.
왼쪽으로 2회 밀면(shift) 110100 이 된다.
2진수 110100은 52이다.
3 bitwise xor
(x^y)
a=13^6
print(a)

11
xor(exclusive-or:배타적 논리합)
서로 다르면 참이다.
13 ---> 1101
6   ---> 0110
xor --->1011   (서로 다르면 1)
2진수 1011은 십진수 11이다.
4 comparison
(비교연산)
a=3<5<4
print(a)
False 비교 검사
다항연산이 가능하다.

3항연산을 한다.
'3보다 5가 크고 5는 4보다 작다'
틀리므로 False
5 boolean
(논리연산)
a=not(1>2)or(3<4)and(5>6)
print(a)

True
우선순위not, and, or이다.
1. not(False) or True and False
2. True or False
3. True
6 교환법
(exchange)
a,b,c=1,2,3
c,b,a=a,b,c
print(a,b,c)

3 2 1
‘=’ 오른쪽의 id를 왼쪽에 순서대로 할당한다.
7 반복법(toggle) n,s=0,5
while n<5:
    print(s)
    s=9-s
    n+=1
5
4
5
4
5
두 수의 반복
2개의 수 x, y를 반복하려면,
t=y         #x부터 출력할 때는 y를 초기 값
t=(x+y)-t  #이 부분을 반복한다.
print(t)
8 x and y(논리 곱)
x or y (논리 합)
x=True
y=3
z=[]
a=x and y
b=z and y
c=x or y and z
print(a)
print(b)
print(c)

3
[]
True
and : x가 거짓이면 x,아니면 y를 반환
or : x가 거짓이면 y, 아니면 x 반환
9 x == y
(동등 연산)
x=3
y=3
a=x is y
print(a)

True
id가 같으면 True, 아니면 False를 반환

 

중요한 부분입니다. 꼭 이해하십시오.

수고하셨습니다.

오늘 끝.

728x90
반응형