분기와 함수¶
다음 예제를 보자.¶
In [1]:
# -*- coding: utf-8 -*-
from sys import exit
try:
input = raw_input
except NameError:
pass
def gold_room():
print("황금으로 가득 찬 방입니다. 얼마나 가져갈까요?")
next = input(">")
if "0" in next or "1" in next:
how_much = int(next)
else:
dead("인간이여, 숫자쓰는 법부터 배우세요.")
if how_much < 50:
print("좋아, 욕심부리지 않는군요. 당신이 이겼습니다!")
## exit(0)은 강제종료, 넘겨진 숫자가 오류가 있는지 없는지를 가리킨다.
exit(0)
else:
dead("욕심쟁이 얼간이 같으니!")
def bear_room():
print("여기에는 곰이 한 마리 있습니다.")
print("곰은 꿀을 잔뜩 들고 있습니다.")
print("뚱뚱한 곰은 다른 쪽 문 앞에 있습니다.")
print("어떻게 곰을 움직이겠습니까?")
bear_moved = False
## 이렇게 하면 무한 순환을 만들어 줄 수 있다.
while True:
next = input(">")
if next == "꿀 뺏기":
dead("곰이 당신을 쳐다보더니 목이 떨어져라 따귀를 날립니다.")
elif next == "곰 놀리기" and not bear_moved:
print("곰이 문에서 비켜섰습니다. 이제 나갈 수 있습니다.")
bear_moved = True
elif next == "곰 놀리기" and bear_moved:
dead("곰이 머리 끝까지 열받아 당신의 다리를 씹어먹습니다.")
elif next == "문 열기" and bear_moved:
gold_room()
else:
print("무슨 말인지 모르겠네요.")
def cthulhu_room():
print("여기에는 대악마 크툴루를 봅니다.")
print("그분이, 그것이, 아니 뭐든지 간에 당신을 쳐다보고 당신은 미쳐갑니다.")
print("목숨을 위해 달아나려나, 네 머리를 먹어치우려나?")
next = input(">")
if "달아나기" in next:
start()
elif "먹기" in next:
dead("음, 맛이 좋군요!")
else:
cthulhu_room()
def dead(why):
print(why, "잘 했어요!")
exit(0)
def start():
print("어두운 방에 있습니다.")
print("오른쪽과 왼쪽에는 문이 있습니다.")
print("어느 쪽을 고를까요?")
next = input(">")
if next == "왼쪽":
bear_room()
elif next == "오른쪽":
cthulhu_room()
else:
dead("문 주위에서 맴돌기만 하다 굶어 죽었습니다.")
start()
코드를 뜯어보자.¶
In [ ]:
from sys import exit
exit(0) → 올바른 종료
exit(1) → 오류가 된다.
exit(0)
강제종료할 수 있고, 넘겨진 숫자가 오류가 있는지 없는지를 가리킨다.
보통의 Boolean 논리(0 == False)와 반대이다.
- 이것은 서로 다른 오류를 가리키기 위해 다른 숫자를 쓸 수 있기 때문이다.
- exit(1)이나 exit(2)와 다른 오류를 내려면 exit(100)이라고 할 수 있다.
보통 문제가 없으면 0을 문제가 있으면 1을 리턴하도록 작성한다!¶
In [ ]:
while True:
while True: → 무한 loop¶
while의 조건문이 True 이므로 조건문은 항상 참이 된다.
while은 조건문이 참인 동안에 while에 속해 있는 문장들을 계속해서 수행하므로 위의 예는 무한하게 while문 내의 문장들을 수행할 것이다.
1. if 문 규칙¶
- 모든 if 문에는 else를 넣자.
- else 부분이 있을 수 없는 경우라서 실행이 절대 안 된다면, else 안에 오류를 내고 프로그램을 kill하는 die 함수를 쓰자.
if문을 두 단계 넘게 중첩하지 말자. 항상 한 단계로 유지할 수 있도록 노력하자.
이 말은 if 안에 if를 두었다면 두 번째 if를 다른 함수로 옮길 방법을 찾으라는 뜻이다.
if 문을 문단처럼 다루자. 그 안의 if, elif, else 묶음 각각을 문장 집합으로 다루자.
- Boolean 검사는 단순해야 한다.
2. 순환문 규칙¶
- 영원히 순환해야 할 때만 while문을 쓰자. 거의 쓰지말라는 뜻에 가깝다.(python에서만)
- 다른 모든 경우, 특히 고정 횟수나 제한된 횟수만큼 순환해야 한다면 for 문 사용을 권장한다.
3. 디버그 규칙¶
- debugger는 쓰지 말자. 헷갈릴 가능성이 크다.
- 가장 좋은 디버그 방법은 의심이 될 만한 부분을 print로 변수 값을 출력하는 것이다.
- 한 번에 프로그램을 크게 만들지 말고, 작게 만들어서 조금씩 실행해보고 조금식 고치자.