PDF版 ePub版

# exercise35.分支和函数

from sys import exit

def gold_room():
print "This room is full of gold.  How much do you take?"

choice = raw_input("> ")
if "0" in choice or "1" in choice:
how_much = int(choice)
else:
dead("Man, learn to type a number.")

if how_much < 50:
print "Nice, you're not greedy, you win!"
exit(0)
else:

def bear_room():
print "There is a bear here."
print "The bear has a bunch of honey."
print "The fat bear is in front of another door."
print "How are you going to move the bear?"
bear_moved = False

while True:
choice = raw_input("> ")

if choice == "take honey":
elif choice == "taunt bear" and not bear_moved:
print "The bear has moved from the door. You can go through it now."
bear_moved = True
elif choice == "taunt bear" and bear_moved:
elif choice == "open door" and bear_moved:
gold_room()
else:
print "I got no idea what that means."

def cthulhu_room():
print "Here you see the great evil Cthulhu."
print "He, it, whatever stares at you and you go insane."

choice = raw_input("> ")

if "flee" in choice:
start()
else:
cthulhu_room()

print why, "Good job!"
exit(0)

def start():
print "You are in a dark room."
print "There is a door to your right and left."
print "Which one do you take?"

choice = raw_input("> ")

if choice == "left":
bear_room()
elif choice == "right":
cthulhu_room()
else:
dead("You stumble around the room until you starve.")

start()

## 你看到的结果

\$ python ex35.py
You are in a dark room.
There is a door to your right and left.
Which one do you take?
>  left
There is a bear here.
The bear has a bunch of honey.
The fat bear is in front of another door.
How are you going to move the bear?
>  taunt bear
The bear has moved from the door. You can go through it now.
>  open door
This room is full of gold.  How much do you take?
>  1000
You greedy bastard! Good job!

## 附加题

1.把这个游戏的地图画出来，把自己的路线也画出来。 2.改正你所有的错误，包括拼写错误。 3.为你不懂的函数写注释。 4.为游戏添加更多元素。通过怎样的方式可以简化并且扩展游戏的功能呢？ 5.这个 gold_room 游戏使用了奇怪的方式让你键入数字。这种方式会导致什么样的 bug？ 你可以用比检查 0、1 更好的方式判断输入是否是数字吗？int() 这个函数可以给你一些头绪。

## 常见问题

### Q: 为什么有时候把 raw_input 写成 raw_input('>')

raw_input 的参数只是一个字符串，会打印显示在要求用户输入之前。