练习 36 设计和调试

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

if 语句的规则:

  • 每一个“if 语句”必须包含一个 else。

  • 如果这个 else 永远都不应该被执行到,因为它本身没有任何意义,那你必须在 else 语句后面使用一个叫做 die 的函数,让它打印出错误信息并且死给你看,就像我们上节课做的那样,按照这个思路你可以找到很多错误。

  • “if 语句”的嵌套不要超过 2 层,最好尽量保持只有 1 层。

  • 把“if 语句”当做段落来对待,其中的每一个 if, elif, else 就跟段落中的句子一样。在每句前后留一个空行以作区分。

  • 你的布尔测试应该很简单,如果它们很复杂的话,你需要将它们的运算事先放到一个变量里,并且为变量取一个好名字。

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

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

循环的规则

  • 只有在循环永不停止时使用“while循环”,这意味着你可能永远都用不到。这条只有 Python 中成立,其他的语言另当别论。

  • 其他类型的循环都使用“for循环”,尤其是在循环的对象数量固定或者有限的情况下。

调试建议

  • 不要使用调试器(“debugger”)。调试器所做的相当于对病人的全身扫描。你并不会得到某方面的有用信息,而且你会发现它输出的信息太多,而且大部分没有用,或者只会让你更加困惑。

  • 最好的调试程序的方法是用 print 在每个你想要检查的关键环节将关键变量打印出来,从而检查那里是否有错。

  • 让程序一部分一部分地运行起来。不要等一个很长的脚本写完后才去运行它。写一点,运行一点,再修改一点。

课后作业

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

在写代码之前,你应该先把游戏的设计图画出来,包括玩家会碰到的房间、怪物、以及陷阱等环节。

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

写软件最好的方式是把它分解成很多小任务来完成:

  • 在一张纸或者索引卡片上,写上要完成这个软件你需要做的任务列表,这就是你的待办事项。

  • 从任务列表上找到对你来说最容易的一个任务。

  • 在你的源文件上用注释的方式写下你要用代码实现它的思路指南。

  • 在你的注释下面写代码。

  • 写完就执行脚本看看你的写的代码能否正常运行。

  • 坚持这样的过程:写代码、运行测试、修改代码,知道它能正常运行。

  • 完成后给这项任务打勾,然后找下一个最容易的任务,重复上述步骤。

这个过程能够帮助你以一种系统化和连贯的方式来写软件。在工作的过程中,通过移除不必要的任务以及添加新任务来更新你的任务列表。