笨方法学Python 习题 36: 设计和调试
来源:互联网 发布:微商城源码 编辑:程序博客网 时间:2024/05/01 19:47
If 语句的规则
每一个“if 语句”必须包含一个 else.
如果这个 else 永远都不应该被执行到,因为它本身没有任何意义,那你必须在 else 语句后面使用一个叫做 die 的函数,让它打印出错误信息并且死给你看,这和上一节的习题类似,这样你可以找到很多的错误。
“if 语句”的嵌套不要超过 2 层,最好尽量保持只有 1 层。 这意味着如果你在 if 里边又有了一个 if,那你就需要把第二个 if 移到另一个函数里面。
将“if 语句”当做段落来对待,其中的每一个 if, elif, else 组合就跟一个段落的句子组合一样。在这种组合的最前面和最后面留一个空行以作区分。
你的布尔测试应该很简单,如果它们很复杂的话,你需要将它们的运算事先放到一个 变量里,并且为变量取一个好名字。
如果你遵循上面的规则,你就会写出比大部分程序员都好的代码来。回到上一个练习中,看看我有没有遵循这些规则,如果没有的话,就将其改正过来。
Warning
在日常编程中不要成为这些规则的奴隶。在训练中,你需要通过这些规则的应用来巩固你学到的知识,而在实际编程中这些规则有时其实很蠢。如果你觉得哪个规则很蠢,就别使用它。
循环的规则
只有在循环永不停止时使用“while 循环”,这意味着你可能永远都用不到。这条只有 Python 中成立,其他的语言另当别论。
其他类型的循环都使用“for 循环”,尤其是在循环的对象数量固定或者有限的情况下。
调试(debug)的小技巧
不要使用 “debugger”。 Debugger 所作的相当于对病人的全身扫描。你并不会得到某方面的有用信息,而且你会发现它输出的信息态度,而且大部分没有用,或者只会让你更困惑。
最好的调试程序的方法是使用 print 在各个你想要检查的关键环节将关键变量打印出来,从而检查哪里是否有错。
让程序一部分一部分地运行起来。不要等一个很长的脚本写完后才去运行它。写一点,运行一点,再修改一点。
家庭作业
写一个和上节练习类似的游戏。同类的任何题材的游戏都可以,花一个星期让它尽可能有趣一些。作为加分习题,你可以尽量多使用列表、函数、以及模组(记得习题 13 吗?),而且尽量多弄一些新的 Python 代码让你的游戏跑起来。
不过有一点需要注意,你应该把游戏的设计先写出来。在你写代码之前,你应该设计出游戏的地图,创建出玩家会碰到的房间、怪物、以及陷阱等环节。
一旦搞定了地图,你就可以写代码了。如果你发现地图有问题,就调整一下地图,让代码和地图互相符合。
最后一个建议:每一个程序员在开始一个新的大项目时,都会被非理性的恐惧影响到。为了避免这种恐惧,他们会拖延时间,到最后一事无成。我有时会这样,每个人都会有这样的经历,避免这种情况的最好的方法是把自己要做的事情列出来,一次完成一样。
开始做吧。先做一个小一点的版本,扩充它让它变大,把自己要完成的事情一一列出来,然后逐个完成就可以了。
#!usr/bin/python# -*-coding:utf-8-*-from sys import exitfrom sys import argvpart , first , second = argvdef over(what):print(what,"你已经失去了游戏资格!")exit(0)def close(what):print(what,"你是最终的胜利者!")exit(0)def star():print("从前,你与%s%s,在无边森林里探险." %(first,second))print("然而,在三岔口前,三人因为前行的方向,产生了分歧.")print("%s选择最左边的一条道路,隐约能看到远处折射过来的金光."%first)print("而%s则是凭借直觉,选择了最右边的一条岔道."%second)print("现在,在你面前有三种选择.是选择左边与%s一起."%first)print("还是独自走中间的路,")print("亦或是选择右边与%s一起"%second)next = input(">>>>> ")if "左" in next:z_road()elif "右" in next:y_road()elif "中" in next: zh_road()else:over("不按照游戏规则来,")def z_road():print("经过长途的跋涉,来到一处宝藏前.")print("金币,钻石,在阳光的照耀下发出耀眼的光芒.")print("这时,你是选择(攻击)%s,还是与%s(平分)财富."%(first,first))print("考虑清楚,输入括号内的两种选择.")result = Falsewhile True:pass_port = input("攻击还是平分? ")if pass_port == "攻击" and not result:print("%s机敏的躲开了你的攻击,虎视眈眈的盯着你."%first)print("恼羞成怒,继续疯狂攻击%s,还是选择和解平分财富"%first)result = Trueelif pass_port == "攻击" and result:print("经过一场厮杀,虽然成功杀死了%s"%first)print("但是,你也因为伤重不治生亡.")over("做人不能太贪心,害人也终害己.")elif pass_port == "平分" and result:print("虽然彼此分得不菲的财富")print("但都各自存有戒心")print("由于不精诚合作,最终纷纷遭遇事故身亡")over("回不去的曾经,贪婪害人终害己,")else:over("以你的智商,存活到此已经是极限.")def y_road():print("两人欣赏沿途美好的自然风景.")print("最终,发现了一个美丽的自然村落.")print("邂逅了彼此的心爱之人.")print("此时,到底是(回归)现代社会,还是继续(驻留)在这世外桃源.")pass_port = input("回归还是驻留?")if pass_port == "回归":print("带着村落的消息,回归到现代社会.成为著名的考古学家.")print("但也将村落的位置被有心人得知,最终导致村落的覆灭,")print("而你,也因为自责,郁郁而终!")over("")elif pass_port == "驻留":print("你们的到来,给村落带去很多先进的知识.")print("最终,你们成为村内最有威望的人.")close("恭喜你通关了!")else:over("你太贪心了,除了两项之外,没有其他选择!")def zh_road():print("这是一条有惊无险的道路..")print("路的尽头,是森林的出口")print("此时,是选择激流勇退,离开这个神秘的森林")print("还是,选择重返三岔口,走左边或者右边的路?")pass_port = input("离开?左边?右边?")if pass_port == "离开":close("抵得住诱惑,恭喜你通关了!")elif pass_port == "左边":z_road()elif pass_port == "右边":y_road()else:over("无力吐槽,我们太没有默契了,")star()
- 笨方法学Python 习题 36: 设计和调试
- 习题35,36分支与函数,设计和调试,笨方法学python,中文版游戏
- 笨方法学习Python-习题36: 设计和调试
- 习题35,分支和函数,笨方法学python
- 笨方法学Python 习题 2: 注释和井号
- 笨方法学Python 习题 4: 变量(variable)和命名
- 笨方法学Python 习题 14: 提示和传递
- 笨方法学Python 习题 19: 函数和变量
- 笨方法学Python 习题 30: Else 和 If
- 笨方法学Python 习题 32: 循环和列表
- 笨方法学Python 习题 35: 分支和函数
- 笨方法学python 习题32(循环和列表)习题33(while循环)
- 笨方法学python 习题35修改
- 笨方法学Python 习题 11: 提问
- 笨方法学Python 习题 41: 物以类聚
- 笨方法学Python 习题0
- 笨方法学python习题13、14
- 笨方法学python 习题16
- Redis实现中间件
- java中的 continue 和 break
- 算法提高 合并石子
- caffe源码追踪--blob
- 两会闭幕,美国、加拿大、台湾等宗教界、教育界人士来访汪国新北京诗书画院
- 笨方法学Python 习题 36: 设计和调试
- 菲律宾书法家若飞先生一行来访汪国新北京诗书画院
- linux shell 使用双小括号进行算术运算
- C语言初步学习(适合与学习过C++和java的童鞋)
- MySQL密码忘了怎么办?MySQL重置root密码方法
- Centos7 -samba服务配置
- livy提交任务报错com.cloudera.livy.shaded.kryo.kryo.KryoException: Unable to find class: GATest.ConJob
- iOS程序类型
- Extjs中GridPanel实现单元格自动换行的补充