점프 투 파이썬 : https://wikidocs.net/book/1
파이썬 기본을 갈고 닦자 : https://wikidocs.net/16031
파이썬의 조건문으로 다른 언어와 크게 다를 바는 없다. 그러나 재밌는 것은 {}
로 조건문의 본문이 시작되지 않고 오직 들여쓰기 4칸 공백
으로만 본문이 표시된다는 것이다. 또한, 조건문의 부분을 ()
으로 감쌀 필요없이 :
으로 본문과 나눌 수 있다.
if
문은 다음과 같은 기본 구조를 갖는다.
()
붙이지 않아도 된다. 붙인다고 문제될 것은 없다.:
으로 조건절과 본문을 나눈다.return
으로 반환할 값을 쓸 수 있다. return
할 값이 없다면 안써도 된다.if 조건:
본문
본문
return 값
아주 조심해야할 것은 바로 들여쓰기이다. 괜히 4칸 공백 또는 tab을 누르라는 것이 아니다. 요즘은 인터프리터가 잘 캐치해내어서 실수를 많이 보완하지만 코드가 복잡해질수록 들여쓰기 실수는 찾기힘든 문제로 덧나갈 수 있다.
if
문의 조건절에는 비교연산자를 사용하여 조건을 형성할 수 있다. 비교 연산자는 다음이 있다.
비교연산자 | 설명 |
---|---|
x < y | x가 y보다 작다. |
x > y | x가 y보다 크다. |
x == y | x와 y가 같다. |
x != y | x와 y가 다르다. |
x <= y | x가 y보다 작거나 같다. |
x >= y | x가 y보다 크거나 같다. |
굉장히 간단한 비교연산자이다.
value = 2
if value <= 2:
print("hello")
if value != 1:
print("world")
if value > 3:
print("no!")
#hello
#world
"no"
는 나오지 않는 것을 확인할 수 있다. 이러한 비교연산자는 사실 bool형의 값을 리턴하기 때문에 조건절에 사용할 수 있는 것이다.
즉, 조건절은 bool형이 오면 뭐든 사용할 수 있다는 것이다.
x = 2
y = 3
print( x< y ) # True
print( x == y) # False
따라서 if x < y:
는 if True:
로 되어 본문으로 넘어갈 수 있게 되는 것이다. 반면 if x == y:
는 if False:
로 되어 본문으로 넘어갈 수 없게 될 것이다.
그런데 하나의 조건절에 조건을 여러개 달고 싶으면 어떻게 해야할까??
조건을 여러개 달기위해서는 and, or, not
을 사용하면 된다.
연산자 | 설명 |
---|---|
x or y | x와 y 둘 중에 하나만 참이어도 참이다. |
x and y | x와 y 둘 모두 참이어야 참이다. |
not x | x가 거짓이면 참이다. |
이를 이용해서 다음의 조건문을 만들어보자
학생이면서 교통카드를 사용하면 900으로 결제하도록 한다.
people = "student"
card = True
if people == "student" and card == True:
print("900 pay") # 900 pay
학생
과 교통카드
조건을 모두 성립하려면 and
을 사용하여 조건들을 연결하면 된다.
학생이거나 card을 쓰면 900원을 결제하도록 한다.
다음의 조건은 or
을 사용하면 된다.
people = "business man"
card = True
if people == "student" or card:
print("900 pay") # 900 pay
x in s
은 x가 s안에 있는 가 없는 가에 대한 조건이다. 이를 통해 조건문을 만들 수 있다.
in | not in |
---|---|
x in 리스트 | x not in 리스트 |
x in 튜플 | x not in 튜플 |
x in 문자열 | x not in 문자열 |
이 처럼, in
을 사용하여 특정 원소가 리스트, 튜플, 문자열
에 있는 지 없는 지 판별할 수 있다.
a = [1,2,3,4,5,6]
b = (1,2,3,4,5,6)
c = "hello world"
if 2 in a:
print("list check") # list check
if 3 in b:
print("tuple check") # tuple check
if 10 not in a:
print("there is no element 10") # there is no element 10
if 'w' in c:
print("w!") # w!
if 'llo' in c:
print('llo') # llo
특정 원소가 있는 지 없는 지 찾기 매우 편한 방법이다. 특히 문자열에 부분 문자열을 찾는 방법이 매우 좋은데, 이는 문제를 풀 때 다양한 방식으로 사용할 수 있어 좋다.
if
만 사용하여 조건을 판별하는 것은 코드가 매우 복잡해지고 눈이 피로해진다. 그래서 if
조건이 실패할 경우, 다른 조건문으로 빠지도록 만들 수 있는데 거기에 사요오디는 것이 elif, else
이다.
학생이면 900원을 결제, 아니면 1000원 결제하도록 하자
이걸 if문으로만 구현한다고하면, 학생이 아닌 경우를 어떻게 해야할지 난감하다.
a = "student"
b = "business"
c = "docker"
d = "soldier"
if a in "student":
print("pay 900")
if a in "business" and a in "docker" and a in "soldier":
print("pay 1000")
다음의 경우를 보자, 지금이야 "business", "docker", "solider"
만 있어서 다행이지만 추가되면 추가될 수록 복잡해지고 유지보수도 쉽지 않다.
그래서 if문이 실패하면 나머지인 경우를 처리하도록 하는 조건문인 else
를 사용해보자. else
에는 조건이 들어가지 않는다. 오직 if
가 실패하면 else
로 빠지기 때문이다.
a = "student"
b = "business"
c = "docker"
d = "soldier"
if b in "student":
print("pay 900")
else:
print("pay 1000") # pay 1000
코드가 훨씬 간단해졌다. 보기도 쉬워졌고 유지보수도 쉬워졌다. 이렇게 else
는 if
조건을 통과하지못한 나머지를 받기 위해 사용한다.
그런데, if
조건은 통과하지 못했지만 특정 조건을 달고 싶으면 어떻게 해야할까? 가령 solider
은 950원으로 하고 싶다고하면 이렇게 해야할 것이다.
a = "student"
b = "business"
c = "docker"
d = "soldier"
if d in "student":
print("pay 900")
else:
if d in "soldier":
print("pay 950") # pay 950
else:
print("pay 1000")
if-else
만으로도 충분히 구현가능하지만 조건문 안에 조건문이 들어가는 nested
구조가 되어버렸다. 이러한 구조는 가독성을 해치는 문제가 있다. 이를 해결하기 위해 elif
가 있는 것이다. 참고로 elif
는 else if
의 약자이다.
elif
는 조건을 갖는다. 즉, if
조건을 통과하진 못했지만 else
로는 가지않아야할 조건을 elif
에 담는 것이다.
a = "student"
b = "business"
c = "docker"
d = "soldier"
if d in "student":
print("pay 900")
elif d in "soldier":
print("pay 950") # pay 950
else:
print("pay 1000")
다음과 같이 if
조건에 통과히지못하면 elif
조건에 간다. 지금은 elif
조건을 통과했는데, 만약 통과하지 못하면 else
로 가게 된다.
따라서, else
는 자신과 엮은 조건들의 나머지인 것이다. 따라서 else
는 if
로 시작하는 조건문의 가장 마지막이며 단 하나만 사용될 수 있다.
반면 elif
는 if
조건을 통과하지 못하는 조건들을 처리하고 else
로는 빠지지 말아야 할 것들이다. 이를 위해 ``elif```는 여러 개가 있을 수 있다.
a = "student"
b = "business"
c = "docker"
d = "soldier"
if c in "student":
print("pay 900")
elif c in "soldier":
print("pay 950")
elif c in "docker":
print("pay 990") # pay 990
else:
print("pay 1000")
다음과 같이 쓸 수 있다. 이렇게 if-elif-else
세트를 사용할 수 있다.
참고로 만약 if문에 쓸게 없으면 ``pass
를 쓰면된다. python도 그렇고 go도 if문이 있는데 본문 내용이 없으면 에러를 뱉는다. 따라서
pass```로 처리해주는 것이다.
if True:
pass
다음의 조건문을 보자
score = 50
message = ""
if score >= 60:
message = "success"
else:
message = "failure"
print(message) # failure
본문이 한 줄이라면 조건문과 함께 나란히 한 줄로 쓸 수 있다.
score = 50
message = ""
if score >= 60: message = "success"
else: message = "failure"
print(message) # failure
그럼 if-else
문을 하나로 만들 수는 없을까??
조건부 표현식(conditional expression)을 사용하면 조건식을 간단히 표현할 수 있다.
score = 50
message = "success" if score > 60 else "failure"
print(message) # failure
조건부 표현식은 다음과 같은 공식이다.
변수 = 조건성공값 if 조건 else 조건실패값
사실 조건부 표현식은 다른 언어의 삼항 연산자(?)와 같은 공식이고 같은 기능이다. 다만 python에는 삼항 연산자가 없으니 조건부 표현식을 사용하도록 하자.