파이썬 or 여러개 - paisseon or yeoleogae

타언어에서 &&, ||로 표현 되는 and, or 연산자에 대해서 알아보겠습니다.

연산자 우선순위는 and > or 로 되어 있지만 (곱셈, 나눗셈), (덧셈, 뺄셈)처럼 연산하는 순서가 바뀌어도 결과값은 같에 나옵니다.

and, or은 논리값을 반환, &, |은 연산의 결과를 나타냅니다.

x > 5 and x < 10과 (x > 5) & (x < 10)은 같은 조건문에서 같은 결과를 나타내기 때문이 착각할수 있지만 하는 행위가 다름을 알아두셔야 합니다.

# and or 과 비트연산자 & | 의 다른점
x = 7
print(x > 5 and x < 10)
print((x > 5) & (x < 10))
print(4 and 10)
print(4 & 10)
파이썬 or 여러개 - paisseon or yeoleogae
결과값

x > 5, x < 10 모두 True를 반환하기 때문에 and를 사용하든 &을 사용하든 같은 값이 나옵니다.

하지만 단순한 숫자를 대상으로 and와 &을 사용하면 어떨까요?

4 and 10을 했는데 10이라는 결과를 던져줍니다. 왜일까요?

and와 or은 식을 평가함에서 마지막으로 평가한 값을 return 해줍니다.

자세한 내용인 단락평가에 대해서는 아래에 적도록하겠습니다.

4 and 10에서 True가 나오고 식을 더 이상 평가할게 없습니다. 그러므로 10을 던져주는것인데, 뭔가 이해하기 어렵습니다. 예시를 하나더 봐볼까요?

print(4 and 10 or 20)
print(4 and 10 and 20)
파이썬 or 여러개 - paisseon or yeoleogae
결과값

위에꺼는 10인데 왜 아래꺼는 20일까요?

바로 단락평가로 인해 4 and 10이 True인것까지 평가하였을때 뒤 부분의 or 20에 무슨값이 오든지 간에 항상 True이기 때문입니다. or 0이 온다고 한들 결과값은 항상 True일것입니다. 따라서 마지막 평가값인 10을 반환해줍니다.

하지만 뒤에 and 20이 오는 경우 20이 마지막 평가값이 되기 때문에 20을 반환해주는 것입니다.

그럼 되돌아 와서 4 & 10은 0이 나왔는데요. &의 정확한 역할을 바로 비트연산을 하는것입니다.

4와 10을 2진수로 표현하면 100(2), 1010(2)인데, &연산을 할 경우 겹치는 비트가 없기 때문에 0이라는 값이 나온거죠.

그럼 (x > 5) & (x < 10)은 왜 같은 값이 나왔을까요? 바로 1 & 1 = 1 이기 때문에 조건문에 한하여 and와 &가 같은 기능을 하는것이라고 착각하게 되는것입니다.

컴퓨터가 False로 인식하는 것들

조건문에서 False로 인식하는것은 무엇이 있을까요?

  • "" # 빈 문자열
  • None # 아무것도 없는 빈값
  • 0 # 숫자 0
  • [] # 비어있는 리스트, 딕셔너리, 튜플
  • {}
  • ()

바로 비어있거나 값이 정의되어 있지 않는 값들을 False로 인식한답니다.

반대로 생각하면 이러한 값들이 아닌것들은 전부 True로 인식한다는 애기죠

True, False는 무슨값일까?

그럼 우리가 사용하는 True, False는 무슨 값을 갖고 있을까요?

타 언어에서는 True=1, False=0이라는 값을 가지고 있습니다.

만약 강제 형변환을 할 경우 어떤값을 뱉을까요?

# True, False는 무슨값일까?
print(int(True))
print(int(False))
print(str(True))
print(str(False))
print(True.__str__())
if str(False):
    print("False Str -> True")
print(True + True)
파이썬 or 여러개 - paisseon or yeoleogae
결과값

먼저 int로 변환할 경우 타언어와 같이 1, 0이 출력됨을 알 수 있습니다.

그런데 str로 변환할 경우 "True", "False"가 출력되네요?

이는 True, False가 하나의 객체이기 때문인데, __str__() 메소드에 str로 변환할때 "True", "False"를 반환해줘~ 라고 정의되어 있기 때문에 이렇게 값이 나오는 것입니다.

그럼 str(False)는 False와 같은 작동을 할까요?

답은 No! "False"는 비어있는문자열 ""가 아니기 때문에 True로 판정됩니다.

연산의 경우 숫자값인 1, 0으로 판정되어 True+True=2를 출력하는것을 볼 수 있습니다.

문자열에서 and, or 반환

앞서서 and, or은 마지막 평가값을 반환한다고 하였는데요. 문자열은 어떨까요?

# 문자열 반환
print("python" and "")
print("python" or "")
print("" or "python")
파이썬 or 여러개 - paisseon or yeoleogae
결과값

빈값과 python이 두번 출력된걸 볼 수 있는데요.

첫번째의 경우 마지막 평가값이 ""

두번째의 경우 마지막 평가값이 "python"

세번째의 경우 마지막 평가값이 "python"임을 알 수 있습니다( ""은 false이기 때문에 or 뒤에꺼가 마지막 평가값)

만약 if문에서 평가를 받게 된다면 첫번째줄은 false, 두번째, 세번째줄은 true를 반환하게되는거죠

단락평가

단락 평가란? 차례로 평가를 진행 했을때 더 이상 평가를 진행할 필요가 없는경우, 해당 부분까지만 진행하는 것을 말합니다.

예를 들어 1 or ~~ 이라는 구문이 있는 경우 맨앞에값이 True이므로 뒤에 무슨값이 오더라도 True값이 될것입니다.

0 and ~~~ 이라는 구문은 어떨까요? 맨앞에값이 False이므로 뒤에 무슨값이 오더라도 False값이 될것입니다. 이 경우 0을 반환하게 되겠죠?

# 단락 평가
print(1 and 0 or 2 and 3)
print(1 and 2 or 0 and 3)
print(0 and 2 or 0 and 3)
print(0 or 1 or 0 and 2)

위 코드에서 단락평가를 하게 될 경우 어떤값이 마지막 평가값이 될까요??

직접 풀어보고 코드를 실행해서 확인해보세요~

점프 투 파이썬 00장 들어가기 전에 00-1 머리말 00-2 저자소개 00-3 주요변경이력 00-4 책 구입 안내 01장 파이썬이란 무엇인가? 01-1 파이썬이란? 01-2 파이썬의 특징 01-3 파이썬으로 무엇을 할 수 있을까? 01-4 파이썬 설치하기 01-5 파이썬 둘러보기 01-6 파이썬과 에디터 02장 파이썬 프로그래밍의 기초, 자료형 02-1 숫자형 02-2 문자열 자료형 02-3 리스트 자료형 02-4 튜플 자료형 02-5 딕셔너리 자료형 02-6 집합 자료형 02-7 불 자료형 02-8 자료형의 값을 저장하는 공간, 변수 02장 연습문제 03장 프로그램의 구조를 쌓는다! 제어문 03-1 if문 03-2 while문 03-3 for문 03장 연습문제 04장 프로그램의 입력과 출력은 어떻게 해야 할까? 04-1 함수 04-2 사용자 입력과 출력 04-3 파일 읽고 쓰기 04장 연습문제 05장 파이썬 날개달기 05-1 클래스 05-2 모듈 05-3 패키지 05-4 예외 처리 05-5 내장 함수 05-6 라이브러리 05장 연습문제 06장 파이썬 프로그래밍, 어떻게 시작해야 할까? 06-1 내가 프로그램을 만들 수 있을까? 06-2 3과 5의 배수 합하기 06-3 게시판 페이징하기 06-4 간단한 메모장 만들기 06-5 탭을 4개의 공백으로 바꾸기 06-6 하위 디렉터리 검색하기 06-7 파이보 06-8 코딩도장 07장 정규표현식 07-1 정규 표현식 살펴보기 07-2 정규 표현식 시작하기 07-3 강력한 정규 표현식의 세계로 08장 종합문제 09장 풀이 10장 마치며