파이썬의 참/거짓 판단과 조건문에 대해 알아보겠습니다. 이 글은 책 점프 투 파이썬
을 토대로 작성됐습니다.
조건문이란 참과 거짓을 판단하는 문장을 말한다.
money = True
if money:
print("taxi!")
else:
print("walk..")
참과 거짓을 판단하는 것은 while 반복문에서도 쓰이기 때문에 자세히 알아둬야 한다.
비교 연산자에는 들에는 ==
외에도 다양한 operator들이 있다.
!=
연산자 : '같지 않은'의 뜻을 갖고 있으며 ==
의 정반대 역할을 한다.>
연산자 : '보다 큰'의 의미.<
연산자 : '보다 작은'의 의미.>=
연산자 : '보다 크거나 같은'의 의미.<=
연산자 : '보다 작거나 같은'의 의미파이썬에서 비교 연산자가 어디까지 쓰일 수 있는지 테스트해본다.
리스트, 튜플, 딕트, 문자열에다 비교 연산자를 써봤다.
short_list = [1,2]
long_list = [1,2,3,4,5]
print(short_list < long_list)
# True
short_tuple = 1,2
long_tuple = 1,2,3,4,5
print(short_tuple < long_tuple)
# True
short_dict = {'a':"apple"}
long_dict = {'a':"apple",'b':"banana"}
print(short_dict < long_dict)
# TypeError: '<' not supported between instances of 'dict' and 'dict'
short_str = "hi"
long_str = "hello"
print(short_str < long_str)
# False
리스트와 튜플은 항목의 갯수에 따라 크기를 판단할 수 있다.
dict는 서로의 길이를 바로 비교할 수 없다. 타입 에러가 뜬다. len
함수를 써서 길이를 구한 다음에 비교를 해야 할 듯 하다.
문자열끼리의 비교는 에러를 띄우지는 않지만, 내가 아직 모르는 다른 기준으로 길이를 판단하는 것 같다. 문자열도 len
함수를 써야겠다.
조건을 판단하기 위해 사용하는 다른 연산자로는 and, or, not이 있다.
굳이 장르를 따지자면 집합 개념에 가깝다. 교집합과 합집합, 여집합.
교집합과 마찬가지로 and
는 모든 조건이 True
일 때에만 True
를 반환한다. 합집합과 마찬가지로 or
은 조건들 중의 하나만 True
라면 True
를 반환한다. not
은 여집합과 마찬가지로 주어진 조건의 반대 경우들에 대해서만 True
를 반환한다.
자바스크립트에서는 !
연산자를 통해 데이터의 참거짓 값을 반대로 바꿨다. 파이썬의 not연산자가 보기에 더 직관적인 느낌이 든다.
in
연산자는 어떤 항목이 데이터(문자열, 리스트, 튜플, 딕셔너리(key에 한해서))의 안에 있는지를 확인할 수 있도록 해준다.
print("a" in "banana") # True
print("apple" in "banana") # False
my_list = [1,2,3,4,5]
print(1 in my_list) # True
print(100 in my_list) # False
my_tuple = (1,2,3)
print(1 in my_tuple) # True
print(100 in my_tuple) # False
my_dict = {'a':"apple",'b':"banana"}
print('a' in my_dict) # True
print('c' in my_dict) # False
if와 else에 대해선 자바스크립트와 동일하다. 그러나 세부적인 차이가 있다.
아무런 일을 하지 않도록 하고 싶을 때 쓴다.
if a > 10:
pass
else:
print("wow")
elif
는 else if 를 줄인 뜻이다.
elif
는 if
문과 연결되어 사용되며 if
문이 먼저 선행 되고 그 다음에 위치하게 된다.
자바스크립트의 else if
와 동일하다. 조건문의 세부적인 조건을 만들고 싶을 때 쓴다.
자바스크립트와 마찬가지로, 수행할 문장이 한 줄이면 if
키워드 혹은 else
키워드와 한 줄안에 모두 작성할 수 있다.
조건에 따라 다른 값을 변수에 할당하고 싶을 때, ifelse문을 이용하면 너무 길어진다. 이를 조건부 표현식으로 한 줄로 작성할 수 있다.
if score >= 60:
message = "success"
else:
message = "failure"
message = "success" if score >= 60 else "failure"
아쉽지만 elif
까지는 안 되는 듯하다.
is
연산자도 ==
와 비슷한 역할을 하는 것 같은데,==
와 어떤 차이점이 있고 어떤 경우에 많이 쓰일까?