习题 36: 设计和调试

阅读原文

现在你已经学会了“if 语句”,我将给你一些使用“for 循环”和“while 循环” 的规则,一面你日后碰到麻烦。我还会教你一些调试的小技巧,以便你能发现自己 程序的问题。最后,你将需要设计一个和上节类似的小游戏,不过内容略有更改。

If 语句的规则

  1. 每一个“if 语句”必须包含一个 else.
  2. 如果这个 else 永远都不应该被执行到,因为它本身没有任何意义,那你必须 在 else 语句后面使用一个叫做 die 的函数,让它打印出错误信息并且死给你看, 这和上一节的习题类似,这样你可以找到很多的错误。
  3. “if 语句”的嵌套不要超过 2 层,最好尽量保持只有 1 层。 这意味着 如果你在 if 里边又有了一个 if,那你就需要把第二个 if 移到另一个函数里面。
  4. 将“if 语句”当做段落来对待,其中的每一个 if, elif, else 组合就跟 一个段落的句子组合一样。在这种组合的最前面和最后面留一个空行以作区分。
  5. 你的布尔测试应该很简单,如果它们很复杂的话,你需要将它们的运算事先放到一个 变量里,并且为变量取一个好名字。

如果你遵循上面的规则,你就会写出比大部分程序员都好的代码来。回到上一个练习中, 看看我有没有遵循这些规则,如果没有的话,就将其改正过来。

warning:: 在日常编程中不要成为这些规则的奴隶。在训练中,你需要通过这些规则 的应用来巩固你学到的知识,而在实际编程中这些规则有时其实很蠢。如果你 觉得哪个规则很蠢,就别使用它。

循环的规则

  1. 只有在循环永不停止时使用“while 循环”,这意味着你可能永远都用不到。 这条只有 Python 中成立,其他的语言另当别论。
  2. 其他类型的循环都使用“for 循环”,尤其是在循环的对象数量固定或者有限 的情况下。

调试(debug)的小技巧

  1. 不要使用 "debugger"。 Debugger 所作的相当于对病人的全身扫描。你并不会得到 某方面的有用信息,而且你会发现它输出的信息态度,而且大部分没有用,或者只会 让你更困惑。
  2. 最好的调试程序的方法是使用 print 在各个你想要检查的关键环节将关键变量 打印出来,从而检查哪里是否有错。
  3. 让程序一部分一部分地运行起来。不要等一个很长的脚本写完后才去运行它。写一点, 运行一点,再修改一点。

家庭作业

写一个和上节练习类似的游戏。同类的任何题材的游戏都可以,花一个星期让它尽可能 有趣一些。作为加分习题,你可以尽量多使用列表、函数、以及模组(记得习题 13 吗?), 而且尽量多弄一些新的 Python 代码让你的游戏跑起来。

不过有一点需要注意,你应该把游戏的设计先写出来。在你写代码之前,你应该设计出游戏 的地图,创建出玩家会碰到的房间、怪物、以及陷阱等环节。

一旦搞定了地图,你就可以写代码了。如果你发现地图有问题,就调整一下地图,让代码 和地图互相符合。

最后一个建议:每一个程序员在开始一个新的大项目时,都会被非理性的恐惧影响到。 为了避免这种恐惧,他们会拖延时间,到最后一事无成。我有时会这样,每个人都会有 这样的经历,避免这种情况的最好的方法是把自己要做的事情列出来,一次完成一样。 完成一个软件的最好方式是把它们拆解为像下面这样的小块:

  1. 在纸上写下你完成这个软件所需要做的所有任务。这就是你的待办事项列表。
  2. 先找到你列表中最容易的事情。
  3. 在你的源代码中增加注释,作为你完成这项任务的指南。
  4. 在这些注释下面,开始编码。
  5. 然后立即运行你的代码,看它是否正常工作。
  6. 循环的进行代码编写,测试运行,以及代码修正,直到代码正常运行。
  7. 在你的列表中划掉刚完成的任务,然后再挑选下一个最容易完成的任务,重复进行以上步骤。

开始做吧。先做一个小一点的版本,扩充它让它变大,把自己要完成的事情一一列出来, 然后逐个完成就可以了。

这套程序会帮助你在写代码的时候保持系统的、一致的风格。当你开始工作的时候,更新你的任务清单,增加你要做的,并删除已完成的。


Copyright (C) 2010 by
Author: Zed Shaw
Translator:Zander Wong

results matching ""

    No results matching ""