파이썬 논리연산자 우선순위
파이썬 논리연산자 우선순위 — #파이썬논리연산자 #파이썬우선순위 AI스쿨 msa기반 java 백엔드 코스 중에 공부한 내용을 작성하였습니...
#파이썬논리연산자 #파이썬우선순위
AI스쿨 msa기반 java 백엔드 코스 중에 공부한 내용을 작성하였습니다
파이썬 논리연산자에 대한 모든것
이전글에 비교연산자를 간략하게 소개하면서 단락회로에 관한 내용을 다뤄봤습니다. 끝에서 퀴즈도 내었는데요. 해당정답이 궁금하신 분들은 맨아래를 확인해주세요.
문제로 이해하는 논리연산자
추가로 논리연산자에 대한 공부를 더 해보겠습니다. 이번에는 이론이 아닌 실습 문항위주로 구성을 해보았습니다. 각 문제를 읽고 답을 바로 확인하지 마시고 생각해보는 시간을 가져보세요.
| def A(): print('O') return Truedef B(): print('x') return False |
|---|
퀴즈에서 사용될 A()와 B()가 있습니다. A()는 o를 화면에 출력하고 True라는 값을 가집니다. 반면, B()는 x를 화면에 출력하고 False를 가집니다. 이 A(), B() 함수를 이용하여 논리연산자를 좀 더 깊게 이해해보겠습니다.
| print(A())o Trueprint(B())x False |
|---|
단락회로를 중심으로 풀어보세요.
| if A() or B(): print('YES') |
|---|
| o YES |
|---|
| if B() or A(): print('YES') |
|---|
| x o YES |
|---|
| if A() and A(): print('YES') |
|---|
| o o YES |
|---|
| if B() and A(): print('YES') |
|---|
| x |
|---|
| if B() and A() or A(): print('YES') |
|---|
| x o YES |
|---|
| if A() and B() or B(): print('YES') |
|---|
| o x x |
|---|
연산자 우선순위
연산자 우선순위
여기까지 문제를 무사히 푸셨다면 충분히 단락회로에 대해 이해하셨다고 볼 수 있습니다. 저번글에 작성한 문제에 대한 정답을 공개하겠습니다.
| if A() and A() or B() and B(): print('YES') |
|---|
역시나 아래에 하나씩 정리해보겠습니다.
| # 정답o o YES# 예상오답o o x x |
|---|
문제를 처음 접하신 분들이 o o x라고 답하셨을지도 모르겠습니다. 단락회로 연산을 적용해보면 연산을 앞에서 부터 차례대로 진행하면 마지막 and 연산자에서 B()를 만나 전체 결과는 False가되어 YES가 출력되지 않아야합니다. 하지만 우리가 간과한게 있습니다. 바로 연산자 우선순위입니다.
파이썬 공식문서에는 다음과 같은 연산자 우선순위가 등장합니다.
산수에도 우선순위가 있듯이, 모든 연산에는 우선순위가 존재합니다. 위의 표를 참고해보면 and는 or보다 우선적으로 연산됩니다. 따라서 정상적인 연산의 과정은 다음과 같습니다.
| A() and A() or B() and B()True or False= True!o o YES |
|---|
A() and A()의 결과가 True인 상태에서 or을 만나 뒤의 식이 무시됩니다. (단락회로 연산) 결과적으로 o o YES가 출력됩니다.
우리가 여기서 얻을 수 있는 교훈이 있습니다. 복잡한 파이썬 연산에는 ()로 묶어주자. 모든 개발자가 모든 연산 우선순위를 모조리 외워두고 있을 수 없습니다. 복잡한 연산에는 꼭 우선순위를 괄호로 묶는 습관을 들입시다!

