프로그래밍 언어발행일 2023. 2. 21.원본 https://blog.naver.com/jword_/223022316980 ↗

파이썬 in, not in, and, or (비교연산자와 논리연산자)

파이썬 in, not in, and, or (비교연산자와 논리연산자) — #파이썬in #파이썬notin #파이썬and #파이썬or AI스쿨 msa기반 java 백엔드 코스 중에 공부한 내용을 작...

#Languages#Naver Blog

#파이썬in #파이썬notin #파이썬and #파이썬or

​

AI스쿨 msa기반 java 백엔드 코스 중에 공부한 내용을 작성하였습니다

파이썬 비교연산자와 논리연산자

이미지

파이썬의 연산자들

파이썬에는 다양한 연산자가 존재합니다. 이 연산자들은 if, for등에 사용되어 사용자가 원하는 값을 출력하는데 활용됩니다. 대표적으로 세가지 연산자가 있습니다.

​

가장 첫번재는 산술연산자입니다. 이전글을 통해서 배운 더하기(+), 빼기(-), 나누기(/), 곱하기(\*), 나머지(%) 등 산술적인 연산을 가능하게 하는 연산자입니다.

​

두번째는 비교연산자입니다. 이전에도 배운내용이며 같은가?(==), 다른가?(!=), 큰가?(>), 작은가?(<), 크거나 같은가?(>=) 등 크기에 대한 비교가 있습니다. 이번글에서는 새롭게 in과 not in, is와 is not을 배우게 됩니다.

​

세번째는 논리연산자입니다. 이번글에서 배울 내용이며, 대표적으로 ​and와 or이 있습니다.

​

연산의 우선도

위에서 연산자를 소개할때, 첫번째 ~ 세번째로 구분한 이유는 바로 우선도 때문입니다. 모든 연산에는(수학에도 말이죠) 우선순위가 존재합니다. 가령 ()안에 들어있는 식은 우선적으로 계산되는 식으로 말입니다.

​

위의 순서대로 파이썬 연산의 우선도는 산술연산자 > 비교연산자 > 논리연산자입니다.

비교연산자 - in과 not in

들어있는가 없는가

비교연산자 in과 not in은 비교할 대상에 해당요소의 존재 유무를 파악하는데 사용됩니다.MySQL의 where in과 비슷하다고 생각이 되었습니다.

​

파이썬 내에서도 in이 들어가는 곳은 for입니다. for x in range(10)을 사용하면 "range(10)에 들어있는 x"라는 의미가 내포되어있다고 생각됩니다. ~~(나의 생각)~~

'a' in 'apple''b' not in 'apple'
TureTure

간단하게 이런식으로 비교문을 작성해 볼 수도 있습니다. 결과는 둘다 True가 반환됩니다.

​

비교연산자이기 때문에 boolean(True, False)값이 반환됩니다.

​

연쇄

비교 연산자가 여러개 등장하면, 동시에 모든 값들을 비교합니다.

1 > 2 == 21 < 2 == 21 == 1 > 2
FalseTrueFalse

모든 연산의 결과과 동일 할때만 True를 반환하는 것을 볼 수 있습니다.

논리연산자 - and 와 or

둘다, 혹은 하나만

논리연산자는 and와 or이 있습니다. 논리연산자의 모든 식은 not으로 부정표현을 할 수 있습니다. and는 두식이 모두 True일때만 True를 반환합니다. or은 두식중 한식만 or이면 True를 반환합니다.

​

가령 A와 B함수가 있다고 가정하겠습니다. 두 함수의 return값은 아래와 같습니다.

def A(): print('o') return True​def B(): print('x') return False

and와 or의 연산결과입니다.

A() and B()oxTrue​A() or B()oFalse

근데 여기서 이상한점이 하나 있습니다. 각 함수는 print('o)와 print('x')식을 가지고 있어 and, or 계산과정에서 출력이 되어야합니다. 하지만 A() or B()과정에서는 B()의 print('x')가 출력되지 않습니다.

​

그 이유는 파이썬의 논리연산자는 단락회로 연산을 합니다. 단락회로에 대해 쉽게 설명해보자면, '필요한 만큼만 계산한다'가 되겠습니다.

이미지

위처럼 and연산이 포함된 경우에는 아무리 많은 식이 추가되어도 False를 반환하는 식이 등장하면 전체 결과는 False입니다. B()에서 False라는 결과가 이미 나와 전체식의 결과가 False가 확정되었습니다. 이때 이후식인 C()를 연산하지 않고 바로 False를 출력하는 원리입니다.

A() and B() or C() True or~~ False ~~ >> ok! False

이것이 단락회로 연산입니다. 이해가 되신다면 아래 퀴즈도 풀어보시면 좋을 것 같습니다.

​

​

Quiz) 아래 결과는 무엇일까요?

if A() and A() or B() and B(): print('YES')

정답이 궁금하신 분들은 파이썬 논리연산자 우선순위 글을 확인해주세요.(업데이트예정)