你已经学会了 if 语句、函数、还有列表。现在你要练习扭转一下思维了。把下面的代码写下来,看你是否能弄懂它实现的是什么功能。# -*- coding:utf-8 -*-
import sys
#该函数用户从熊的房间逃离后看见黄金操作
def gold_room():
print "这间房间充满黄金,你想要拿多少?"
next = raw_input('> ')
if "0" in next or "1" in next:
how_much = int(next)
else:
dead("Man,输入一个数字")
if how_much
print "很好,你不是一个贪婪的人,你赢了!"
sys.exit(0) #正常退出运行
else:
dead("你太贪婪了")
#dead 自建函数,死亡后退出游戏
#该函数用户选择左门,进入房间后看到熊的操作
def bear_room():
print "这里有一只熊"
print "熊有一罐蜂蜜"
print "你怎样才可以离开这只熊?(" \
"take honey or taunt bear or tanut bear or open door or False)"
bear_moved = False
while True:
next = raw_input("> ")
if next == 'take honey':
dead("这只熊看起来想要拍你的脸.")
elif next == "taunt bear" and not bear_moved:
print "这只熊离开门. 你可以现在打开们出去"
bear_moved = True
elif next == "taunt bear" and bear_moved:
dead("熊很愤怒和正在吃你的大腿.")
elif next == "open door" and bear_moved:
gold_room()
else:
print "我没有意见和想法."
#该函数是用户选择右门后操作
def cthulhu_room():
print "这里你看到一只非常邪恶克鲁苏"
print "他的眼神让你发疯."
print "你有想跑的冲动还是想吃掉自己脑袋? (flee or head)"
next = raw_input("> ")
if "flee" in next:
start()
elif "head" in next:
dead("很好吃")
else:
cthulhu_room()
#用户死亡后操作
def dead(why):
print why, "游戏结束!"
exit(0)
#游戏开始操作
def start():
print "你将进入一个黑屋."
print "在你左右各有一扇门。"
print "请打开其中一扇门(left or riht)"
next = raw_input("> ")
if next == "left":
bear_room()
elif next =="right":
cthulhu_room()
else:
dead("你将在犹豫中饿死")
start()
结果你将进入一个黑屋.
在你左右各有一扇门。
请打开其中一扇门(left or riht)
> left
这里有一只熊
熊有一罐蜂蜜
你怎样才可以离开这只熊?(take honey or taunt bear or tanut bear or open door or False)
> taunt bear
这只熊离开门. 你可以现在打开们出去
> open door
这间房间充满黄金,你想要拿多少?
> 1
很好,你不是一个贪婪的人,你赢了!
加分习题
1. 把这个游戏的地图画出来,把自己的路线也画出来。
1.先选择左门还是右门
2.进门看到一只熊如何脱离
3.走进一间一堆黄金的屋子里
4.选择
2. 改正你所有的错误,包括拼写错误。
3. 为你不懂的函数写注解。记得文档注解该怎么写吗?
4. 为游戏添加更多元素。通过怎样的方式可以简化并且扩展游戏的功能呢?
5. 这个 gold_room 游戏使用了奇怪的方式让你键入一个数字。这种方式会导致什么样的 bug ?
你可以用比检查 0 、 1 更好的方式判断输入是否是数字吗? int() 这个函数可以给你一些头绪。
常见问题回答
求助!这个程序是怎样运行的?
你理解一段代码遇到困难的时候,可以给每一行代码加上一段简单的注释用来解释每一句实现什么功能。尽量使你的注释短小且与代码近似.然后用图解或者写一段描述来弄懂代码是如何工作的。如果你这么做了,你就能弄明白这段代码是如何工作的。
为什么是 while True:?
这样可以创建一个无限循环。
exit(0) 有什么功能?
在许多操作系统中可以使用exit(0)来中止程序,传递的数字参数表示是否遇到异常。如果使用exit(1)退出将会出现一个错误,但是用exit(0)就是正常的退出。参数部分和正常的布尔逻辑正好是相反的 (正常的布尔逻辑中 0==False) 您可以使用不同的数字来表示不同的错误结果。你也可以用exit(100)来表示一个不同于exit(2)和 exit(1)的错误信息.
为什么 raw_input() 有时写成 raw_input('> ')?
raw_input的参数只是一个字符串,会打印显示在要求用户输入之前。