코딩도장_Unit 8. 불과 비교, 논리 연산자 알아보기

김민주·2022년 1월 1일
0

AIFFEL_풀잎스쿨

목록 보기
18/23
post-thumbnail

8.1 불과 비교 연산자 사용하기

  • 불은 True, False로 표현하며, 값의 일종
>>> True
True
>>> False
False

8.1.1 비교 연산자의 판단 결과

  • 비교 연산자와 논리 연산자의 판단 결과로 True, False를 사용
    (비교 결과가 맞으면 True, 아니면 False)
>>> 3 > 1
True

8.1.2 같은지 다른지 비교하기

  • 두 숫자, 문자열이 같은지 비교할 때는 ==(equal), 다른지 비교할 때는 !=(not equal)을 사용
# 숫자 비교
>>> 10 == 10    # 10과 10이 같은지 비교
True
>>> 10 != 5     # 10과 5가 다른지 비교
True

# 문자열 비교
>>> 'Python' == 'Python'
True
>>> 'Python' == 'python'  
False  # 단어가 같아도 대소문자가 다르면 다른 문자열로 판단
>>> 'Python' != 'python'
True

8.1.3 부등호 사용하기

  • 비교 기준은 첫 번째 값
  • >, <은 비교할 값과 같으면 무조건 거짓 (초과, 미만)
  • >=, <=은 비교할 값과 같으면 참 (이상, 이하)
>>> 10 > 20    # 10이 20보다 큰지 비교
False
>>> 10 < 20    # 10이 20보다 작은지 비교
True
>>> 10 >= 10    # 10이 10보다 크거나 같은지 비교
True
>>> 10 <= 10    # 10이 10보다 작거나 같은지 비교
True

8.1.4 객체가 같은지 다른지 비교하기

  • is, is not은 객체(object)를 비교
>>> 1 == 1.0
True
# 1은 정수객체, 1.0은 실수객체이므로
>>> 1 is 1.0
False
>>> 1 is not 1.0
True

📎 참고) 정수 객체와 실수 객체가 서로 다른 것은 어떻게 확인하나요?
정수 객체와 실수 객체가 서로 다른지 확인하려면 id 함수 사용. id는 객체의 고유한 값(메모리 주소)을 구한다.
(이 값은 파이썬을 실행하는 동안에는 계속 유지되며 다시 실행하면 달라진다.)

>> id(1)
1714767504
>> id(1.0)
55320032

두 객체의 고유한 값이 다르므로 서로 다른 객체이다.

📎 참고) 값 비교에 is를 쓰지 않기
값을 비교할 때는 is를 사용하면 안 된다.

>> a = -5
>> a is -5
True
>> a = -6
>> a is -6
False

8.2 논리 연산자 사용하기

1) a and b

  • 두 값이 모두 True라야 True, 하나라도 False이면 False
>>> True and True
True
>>> True and False
False
>>> False and True
False
>>> False and False
False

2) a or b

  • 두 값 중 하나라도 True이면 True, 두 값이 모두 False라야 False
>>> True or True
True
>>> True or False
True
>>> False or True
True
>>> False or False
False

2) not b

  • not은 논릿값을 뒤집는다.
  • not TrueFalse가 되고, not FalseTrue가 된다.
  • and, or, not 논리 연산자가 식 하나에 들어있으면 not, and, or 순으로 판단
>>> not True and False or not False
True

# 풀어서 살펴보기
not True and False or not False
False and False or True
False or True
True

# 괄호로 표현
>>> ((not True) and False) or (not False)
True

8.2.1 논리 연산자와 비교 연산자를 함께 사용하기

  • 비교 연산자로 비교한 결과를 논리 연산자로 다시 판단
  • 비교 연산자를 먼저 판단하고 논리 연산자를 판단하게 된다.
>>> 10 == 10 and 10 != 5    # True and True
True
>>> 10 > 5 or 10 < 3        # True or False
True
>>> not 10 > 5              # not True
False
>>> not 1 is 1.0            # not False
True

📎 참고) 정수, 실수, 문자열을 불로 만들기
정수, 실수, 문자열을 불로 만들 때는 bool 사용

  • bool(값)
  • 정수 0, 실수 0.0이외의 모든 숫자는 True
  • 빈 문자열 '', ""를 제외한 모든 문자열은 True
>> bool(1)
True
>> bool(0)
False
>> bool(1.5)
True
>> bool('False')
True

📎 단락 평가
논리 연산에서 중요한 부분이 단락 평가(short-circuit evalution)이다.
단락 평가 : 첫 번째 값만으로 결과가 확실할 때 두 번째 값은 확인(평가)하지 않는 방법

  • and는 두 값이 모두 참이라야 참 → 첫 번째 값이 거짓이면 두 번째 값은 확인하지 않고 바로 거짓으로 결정
# 첫 번째 값이 거짓이므로 두 번째 값은 확인하지 않고 거짓으로 결정
print(False and True)     # False
print(False and False)    # False
  • or는 두 값 중 하나만 참이라도 참 → 첫 번째 값이 참이면 두 번째 값은 확인하지 않고 바로 참으로 결정
# 첫 번째 값이 참이므로 두 번째 값은 확인하지 않고 참으로 결정
print(True or True)     # True
print(True or False)    # True
  • 문자열 'Python'도 불로 따지면 True라서 True and True가 되어 True가 나올 것 같지만 'Python'이 나온다.
  • 파이썬에서 논리 연산자는 마지막으로 단락 평가를 실시한 값을 그대로 반환하기 때문
  • 따라서 논리 연산자는 무조건 불을 반환하지 않는다.
  • 마지막으로 단락 평가를 실시한 값이 불이면 불을 반환
  • 첫 번째 값 만으로 결과가 결정나는 경우에는 첫 번째 값이 반환
>> 'Python' and True
True
>> 'Python' and False
False
>> False and 'Python'
False
>> 0 and 'Python'    # 0은 False이므로 and 연산자는 두 번째 값을 평가하지 않음
0
>> True or 'Python'
True
>> 'Python' or True
'Python'
>> False or 'Python'
'Python'
>> 0 or False
False

8.3 연습문제: 합격 여부 출력하기

국어, 영어, 수학, 과학 점수가 있을 때 한 과목이라도 50점 미만이면 불합격이라고 정했습니다. 다음 소스 코드를 완성하여 합격이면 True, 불합격이면 False가 출력되게 만드세요.

# 문제
korean = 92
english = 47
mathematics = 86
science = 81
 
print(_____________________________)
# 실행결과
False
# 정답
korean >= 50 and english >= 50 and mathematics >= 50 and science >= 50

과목 >= 50과 같이 50보다 크거나 같을 때(이상) 참이 되도록 만든다.
한 과목이라도 점수가 낮으면 불합격이므로 모든 비교 연산자의 결과를 and 연산자로 판단

profile
안녕하세요 :-) 잘 부탁드립니다!

0개의 댓글