파이썬에서 표현식과 문장 그리고 블록의 의미에 대해 알아보고 불리언 자료형이 갖는 특징을 살펴보겠습니다.
용어를 간단히 정리해보겠습니다.
표현식(Expression)
하나의 값으로 계산될 수 있는 리터럴, 변수, 연산자, 함수 호출 등의 조합을 의미합니다.
예시) 1.0 + abs(a) * b
예시) a > 1
문장(Statement)
파이썬이 실행할 수 있는 명령을 의미합니다. 지금까지 많이 사용해온
대입문(assignment statement)과
조건문(conditional statement)과 반복문(iteration or loop statements) 등이 있습니다.print()
같이 기능을 수행하는 함수 호출도 문장으로 볼 수 있습니다.
흔히 얘기하는 if문, for문과 같이 뒤에 우리말 번역어 끝에 '문'이
붙는 것들이 여기에 포함됩니다.
블럭(Block)
파이썬에서는 들여 쓰기(indentation) 레벨이 동일한 문장들을 여러 줄을 묶어서 부를 때
'블록'이라고 부릅니다.
아래 예시에서는 2번째 줄과 3번째 줄의 print()
문장들을 묶어서
한 블록이라고 볼 수 있습니다.
들여 쓰기 덕분에 직관적으로 이해할 수 있습니다. 빈 줄은 무시합니다.
1: if 1 < a < 3:
2: print("1보다 큽니다.")
3: print("3보다 작습니다.")
영어 문법과 비교해서 용어를 조금 더 소개해드리겠습니다. if
문을 사용할 때는 1번째 줄에 의해서 2, 3번 블록이
실행될지 말지가 결정되기 때문에 1,2,3번 줄을 모두 묶어서if
-절(clause)이라고 부릅니다. 파이썬에서는 1번 줄 같은 if ~ :
, for ~:
, else:
등을 헤더(header)라고 부르고 2~3번 블록을 스위트(Suite)라고 부릅니다.
지금까지는 기본적인 자료형들의 사용 방법을 훑어봤습니다.
이제부터는 본격적으로 자료형과 문장을 함께 사용해서
프로그램을 만들어 나가는 방법을 알아보겠습니다.
불리언(Boolean) 자료형
불리언 자료형의 객체는 True
와 False
두 가지 값 만을 가질 수 있습니다.
문자열이 아니기 때문에 리터럴에 따옴표를 사용하지 않습니다.
주로 조건문 if과 함께 흐름 제어를 할 때 사용됩니다.
타입의 이름은 bool
입니다.
type(True), type(False)
(bool, bool)
비교 연산자 (Comparison Operators)
아래 표의 예시는 x = 1
, y = 2
인 경우 |연산자| 설명 | 예시| |---|---|---| |==
|값이 같은가?|(x == y)
는 False
|
|!=
|값이 다른가?|(x != y)
는 True
|
|>
|왼쪽 더 큰가?|(x > y)
는 False
|
|<
|오른쪽이 더 큰가?|(x < y)
는 True
|
|>=
|왼쪽이 더 크거나 양쪽이 같은가?|(x >= y)
는 False
|
|<=
|오른쪽이 더 크거나 양쪽이 같은가?|(x <= y)
는 True
|
[주의] 값이 같은지를 비교하는 연산자는 등호가 두 개입니다. 초보때 많이 실수합니다.
[실습] 숫자와 연산자를 바꿔가면서 모든 비교 연산자들이 예상한 대로 작동하는지 확인해보세요
# 실습 예시
x, y = 1, 2
x < y
True
불리언 연산자 and
영어에서 "A and B"는 "A와 B"입니다. 불리언 연산에서는 "A와 B가 둘 다 True이면 전체가 True다"라고 해석할 수 있습니다.
표현식 | 결과값 | 예시 |
---|---|---|
True and True |
True |
(1 < 2 and 3 < 4) 는 True |
False and True |
False |
(1 > 2 and 3 < 4) 는 False |
True and False |
False |
(1 < 2 and 3 > 4) 는 False |
False and False |
False |
(1 > 2 and 3 > 4) 는 False |
연산자 우선순위에 따르면and
의 연산자 우선순위는 비교 연산자(부등호) 보다 낮기 때문에
비교 연산 전후에 괄호를 쳐줄 필요는 없습니다.
그러나 헷갈려서 예기치 못한 오류가 발생하는 것보다는 괄호를 쳐주는 게 좋습니다.
예시)
(1 > 2) and (3 > 4)
[실습] 숫자와 연산자를 바꿔가면서 모든 경우에 대해 예상한 대로 작동하는지 확인해보세요
# 실습 예시
1 < 2 and 3 < 4
True
불리언 연산자 or
영어에서 or는 또는 입니다. 불리언 연산 "A or B"는 A 또는 B가 True이면 전체가 True라는 의미입니다.
표현식 | 결과값 | 예시 |
---|---|---|
True or True |
True |
(1 < 2 or 3 < 4) 는 True |
False or True |
True |
(1 > 2 or 3 < 4) 는 True |
True or False |
True |
(1 < 2 or 3 > 4) 는 True |
False or False |
False |
(1 > 2 or 3 > 4) 는 False |
[실습] 숫자와 연산자를 바꿔가면서 모든 경우에 대해 예상한대로 작동하는지 확인해보세요
# 실습 예시
1 < 2 or 3 < 4
True
불리언 연산자 not
표현식 | 결과값 | 예시 |
---|---|---|
not True |
False |
not 1 < 2 는 False |
not False |
True |
not 1 > 2 는 True |
[실습] 숫자와 연산자를 바꿔가면서 모든 경우에 대해 예상한대로 작동하는지 확인해보세요
# 실습 예시
not 1 > 2
True
연쇄 비교 (Chained Comparison) 연산자
and
를 사용한 표현식을 더 간결하게 줄일 수 있습니다.
# 예시) a가 1보다 크고 3보다 작은가?
a = 3
1 < a < 3
False
# 임의의 a, b, c에 대해서 a가 b보다도 크고 c보다도 큰가?
a, b, c = 1, 2, 3
b < a and a > c
False
# 임의의 a, b, c에 대해서 a가 b보다도 크고 c보다도 큰가?
a, b, c = 1, 2, 3
b < a > c
False
식별 연산자 (Identity Operator)
is
는 둘이 같은 객체인지를 비교합니다. id()
가 같으면 같은 객체입니다.
값이 같은지를 비교하는 ==
와는 다르니 주의하세요.
a = 123
b = a
c = 123.0
# 같은 객체인지 확인
print("a is b:", a is b)
# 다른 객체이지만 값이 같을 수는 있습니다.
print("a is c:", a is c)
print("a == c:", a == c)
print(id(a), id(c))
a is b: True
a is c: False
a == c: True
3045357738160 3045444576400
불리언과 다른 자료형과의 관계
불리언은 내부적으로 int의 일종으로 분류됩니다.
# isinstance는 type이 맞는지를 확인할 때 사용합니다.
isinstance(True, bool), isinstance(False, bool)
(True, True)
# True 는 1, False 는 0의 값을 갖습니다.
isinstance(True, int), isinstance(False, int)
(True, True)
isinstance("A", int), isinstance(2.0, int)
(False, False)
0
이 아닌 숫자들은 True
로 변환됩니다.
bool(1), bool(2), bool(0), bool(0.0)
(True, True, False, False)
비어있지 않은 컨테이너들은 True
로 변환됩니다.
# str
bool("Hello"), bool("")
(True, False)
# list
bool([1, 2]), bool([])
(True, False)
# dict
bool({"a": 1}), bool({})
(True, False)
None
은 False
로 변환됩니다.
bool(None)
False
[참고] None
을 True
인지 False
인지 아직 결정되지 않은 변수에 임시로 넣어두는 경우도 있습니다.
flag = None
# 이후 다른 조건에 따라서 flag에 True 또는 False를 대입할 수 있습니다.
# 그러나 파이썬의 변수는 동적 자료형이기 때문에 문법적인 강제성은 없습니다.
이 포스팅은 쿠팡 파트너스 활동의 일환으로, 이에 따른 일정액의 수수료를 제공받습니다.
'수학과 코딩' 카테고리의 다른 글
파이썬 python 프로그램 흐름 제어(flow control) 반복문(for) (0) | 2022.07.29 |
---|---|
파이썬(python) 조건문(if.elif, else) 사용 방법 정리 (0) | 2022.07.29 |
파이썬(python) 컨테이너(container)딕셔너리(dictionary) 총 정리 (0) | 2022.07.27 |
파이썬(python)컨테이너(container) 집합(set) 사용법 및 특징 (0) | 2022.07.27 |
파이썬(python) 튜플(tuple)과 시퀀스(sequense) 정리 (0) | 2022.07.27 |
댓글