
2.2 错在哪?打印调试信息
小小家门口有家蛋糕店,今天打出了一个促销广告:购买蛋糕总价小于或等于100元时,返还10%现金;购买总价高于100元但低于200元时,低于100元的部分返还10%,高于100元的部分返还7.5%;购买总价高于200元但低于400元时,高于200元的部分返还5%;购买总价超过400元时,超过400元的部分返还3%,多买多送。小小一看,这个规则太复杂了,到底能有多少优惠,只能写个程序来算一算了。
程序代码如下:


选择菜单命令Run→Run Module运行程序,输入购买的总价,得到应返现的金额,如图2.3所示。

图2.3 程序运行的结果
对这个结果满意吗?购买总价为50元时,总优惠金额为0!显然这个结果是错误的。必须通过调试来找出程序中的错误。
如何调试程序呢?一般可以分三个步骤:
第一步,让程序分段运行。也就是说,一段一段地来排除错误,逐渐缩小抓虫子的范围。这就需要使用一些办法,把程序分成一段一段的,运行一段后就停下来。
第二步,检查程序运行到分段处时,变量的值是否正确。
第三步,确定出错的根源在哪里,并进行修正,然后再回到第一步进行新一轮调试。
首先,小小在程序中添加了一些 print()语句,通过输出一些有用的中间信息来判断错误在哪,修改后的代码如下:


程序运行结果如图2.4所示。

图2.4 输出中间信息
通过输出的中间信息,小小发现,当输入10元的总价时,其应该处于0~100的区间范围,可是程序却定位在100以上的范围了。通过进一步分析,发现是程序读取的优惠范围这里出错了。
因此,将代码进行如下修改:

再次运行,结果如图2.5所示。

图2.5 含有调试信息的程序运行结果
这个结果到底对不对?小小进行了验算。当购买金额为10元时,返现为0.1×10=1元,正确;当购买金额为120元时,返现为0.1×100+0.075×(120-100)=11.5元,正确;当购买金额为280元时,返现为0.1×100+0.075×100+0.05×(280-200)=21.5,正确!
程序正确运行后,记得把那些调试用的print语句都去掉哦!再次编辑代码,删除调试用的print语句,然后,随意运行程序吧!注意,输入金额为0时程序会退出。