우리는 살면서 조건이라는 것을 많이 따지며 살았을 것이다.
예를 한 번 들어보자.
"돈이 있다면 택시를 타고, 돈이 없다면 걸어 간다."
우리 모두에게 일어날 수 있는 상황 중 하나이다. 프로그래밍도 사람이 하는 것이므로 조건을 판단한 후 그 상황에 맞게 처리해야 할 경우가 생긴다. 이렇듯 프로그래밍에서 조건을 판다하여 해당 조건에 맞는 상황을 수행하는데 쓰는 것이 if문이다.
x = 5
if x < 10: # x가 10보다 작으면
print('Smaller') # Smaller 출력
if x > 20: # 20보다 크다면
print('Bigger') # Bigger 출력
print('Finis') #Finis 출력
# 결과
Smaller
Finis
여기서 헷갈리지 말아야 할 것은 ==
와 =
이다.
==
는 같다 라는 뜻이고, =
는 대입이라는 뜻이다.
예를 들어보면
x == 5
는 x가 5와 같다라는 뜻이고,x=5
는 x는 5라는 뜻이다.
x = 5
print('Before 5') # Before 5 출력
if x == 5: # x 가 5라면
print('Is 5') # Is 5 출력
print('Is Still 5') # Is Still 5 출력
print('Third 5') # Third 5 출력
print('Afterwards 5') # Afterwards 5 출력
print('Before 6') # Before 6 출력
if x == 6: # x 가 6이라면 아래 들여쓰기되있는 문장들 출력
print('Is 6')
print('is Still 6')
print('Third 6')
print('Afterwards 6') # Afterwards 6 출력
여기서 x = 5
로 선언이 된 후 Before 5가 출력이 먼저 되고, 조건식 if문을 마주치게 된다.
if 조건문 x == 5
이기 때문에 조건에 만족을 하여 들여쓰기 된 문장들이 출력이된다.
조건문이 끝나고 또 print문을 만나게 되어 출력하고, if 조건문 x == 6
이라는 조건문을 만나게 된다. 하지만, x는 5이기 때문에 조건이 만족하지 않게 되어 들여쓰기 된 문장을 출력하지 않고 조건문이 끝난 그 다음 print문을 출력한다. (아래 그림 색깔별 글씨 참고)
**if 조건문 :
바로 아래 문장부터 if문에 속하는 모든 문장에 들여쓰기(Indentation)를** 해줘야한다. (위 그림을 참고하여 이해하자.)if 조건문:
수행할 문장1
수행할 문장2
수행할 문장3
파이썬은 들여쓰기가 매우 민감하기 때문에 Tab키를 잘못 눌러 공백이 더 됬는지 안됬는지를 확인해주어야하고 들여쓰기는 언제나 같은 너비로 해야한다는 것을 명심하자.
들여쓰기가 되어있는지 내어쓰기가 되어있는지 항상 잘 보자!
x = 42
if x > 1: # x 는 42, 1보다 큼으로 조건문 충족
print('More than one') # 출력
if x < 100: # 100보다 작으므로 조건문 충족
print('Less than 100') # 출력
print('All done') # 출력
# 결과
More than one
Less than 100
All done
if 조건문이 주어질 때 참이거나 거짓이거나 둘 중 하나만 선택할 수 있는 분기이다. 두 분기를 동시에 갈 수있는 방법은 없다. 이 식을 if-else 문이라고 한다.
x = 4
if x > 2: # x가 2보다 크면(참)
print('Bigger') # Bigger 출력
else: # x가 2보다 작으면 이라는 뜻으로 거짓이므로 실행 X
print('Smaller')
print('All done') # 조건문을 빠져나와 출력
# 결과
Bigger
All done
예를 들어보자.
작다, 크다 뿐만 아니라 같다, 중간이다 등 여러가지 조건을 주고 싶을 때 if-else만으로는 표현 할 수없다. 이 때 elif를 사용하면 된다.
이런 여러 갈래 조건문은 첫 번째 조건식이 거짓일 때까지 두번 째 조건식을 확인하지 않는다. 만약 if 조건이 참이면 조건문이 끝난다. 나머지 두 조건(elif와 else)은 실행하지 않는다. 즉, 저 세 조건 중 하나만 실행되는 것이다.
몇 가지 예를 들어보자.
x = 0
if x < 2: # x는 0이므로 2보다 작다 (참)
print('small')
elif x < 10: # 실행 X
print('Medium')
else: # 실행 X
print('Large')
print('All done')
# 결과
small
All done
이 경우는 x = 0
이기 때문에 첫 번째 조건식에서 (if x < 2) 참이 되어 종료됩니다.
이 경우는 x = 5
이므로 첫 번째 조건식(if x<2)는 거짓이 되고, 두 번째 조건식(elif)에서 참이 되어 실행이 되므로 조건문을 끝냅니다.
x = 20
일 경우는 첫 번째 조건식(if), 두 번째 조건식(elif) 둘 다 거짓이므로 그 외 조건인 else 조건문이 참이 됨으로 Large를 출력하게 됩니다. (조건문을 벗어나 그 다음 문장인 그 다음 All done은 당연히 출력)
str = '이거 되나?'
istr = int(str) # 여기서 에러가 난다.
print('First', istr)
str = '123'
istr = int(str)
print('Second', istr)
위 코드는 실행이 될까? 정답은 되지 않는다. Line 2에서 문자열을 int형으로 바꾸려고 하기 때문에 ValueError가 뜬다. 파이썬은 두 번째에서 에러가 난 것을 발견하고 더 이상 코드를 실행하지 못하고 어쩔 줄 몰라한다. 그러므로 프로그램을 멈춰 버린다. 이 상황을 대처 하기 위해 Try/Except를 사용한다.
Try/Except를 사용해보자.
astr = "123"
try: # 만족함, 성공!
print("Hello")
isInt = int(astr)
print("World")
except: # 실행 X
isInt = "Integer로 변환할 수 없습니다."
print('Done', isInt)
# 결과
Hello
World
Done 123