점프 투 파이썬 : 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에는 삼항 연산자가 없으니 조건부 표현식을 사용하도록 하자.