程序不可能没有bug即便是最顶级的程序员,而且越专业的程序员就越会花时间去调试自己写的程序以求达到完美。那么接下来就像大家介绍一下常见的错误以及调试方法。
常见问题:
1. 缩进问题
这应该是我提到过最多次的问题,只要是一个小小的缩进问题都会导致程序的错误以及无法运行,可见缩进的重要性。
2. 变量类型问题
大家都知道变量有很多类型:int,string,float…但是在写程序中如果错误的表示了变量的类型,很有可能会导致输出结果的错误,或者是程序的无法运行,因为有些语句和函数需要特定的变量类型的参与。
3. 循环边界问题
在写循环语句时候,我们常常会用到range等函数,但是这就出现了一个问题:循环最终到底会在哪里停止,如果考虑不当的话,很可能会导致循环的次数错误,甚至一直无限进行。
4. 局部变量问题
在定义完一个函数,并在函数内书写代码的时候,我们会定义一些变量,但是有时候我们会把函数外的变量直接拿到函数内使用,或者把函数内的变量拿出使用,这就犯了局部变量和全局变量混淆的问题,这种问题一般会导致变量没有被定义的问题。
5. 情况遗漏问题
在处理一些十分复杂的问题,例如上面的24点的问题时,我们有时候可能会遗漏一些可能的情况,这种问题往往不会明显的表现出错误,但是它会导致程序的适应性不高,有可能在一些特殊的情况下无法运行。
调试方法
目前我最常用的调试方法就是在程序中多加一些print语句。通过print语句,我们可以知道每个部分代码所输出的结果,从而在产生错误后,更加容易的找出程序中出现错误的部分在哪里,而不用重新去看整个代码,从而大大节省了时间。在调试完之后我们可以把print语句注释掉以便以后使用(因为有可能不只一个错误)。
验证方法
在把所有表面上的错误解决之后,为了更加深入的增加程序的适应性,我们就需要用一些方法来验证程序。举个例:之前的24点问题,我为了验证数字的调换不会影响最终的结果(例如1347和3174所产生的24点的组合个数是一样的),我带入了许多值进行运算来验证这个程序,甚至把所有的四个数的组合输入到程序中来验证程序的适应性,试图把程序写到完美。还有就是大家可以带入一些特殊值来测试程序边界情况的运行情况。最后我希望大家记住任何程序都可以有改进的空间,大家不要认为写完代码之后就完成了整个程序,其实连50%都不到!
我的更多文章:
- [Python程序调试的一些体会](http://blog.sina.com.cn/s/blog_d6cca93e0101ewc9.html)(2013-10-06 22:57:35)
- [十四、Python编程计算24点(之二)](http://blog.sina.com.cn/s/blog_d6cca93e0101euxx.html)(2013-10-03 22:18:28)
- [十三、Python编程计算24点(之一)](http://blog.sina.com.cn/s/blog_d6cca93e0101eukc.html)![](https://box.kancloud.cn/2015-10-30_5632e1cc04fc3.gif "此博文包含图片")
(2013-10-02 22:15:46)
- [十二、Python简单数据结构应用(之二)](http://blog.sina.com.cn/s/blog_d6cca93e0101euk8.html)(2013-10-02 22:10:41)
- [十一、Python简单数据结构应用(之一)](http://blog.sina.com.cn/s/blog_d6cca93e0101ep9z.html)(2013-09-23 23:31:49)
- [十、Python编程解决组合问题(之二)](http://blog.sina.com.cn/s/blog_d6cca93e0101entc.html)![](https://box.kancloud.cn/2015-10-30_5632e1cc04fc3.gif "此博文包含图片")
(2013-09-21 23:37:27)
- [九、Python编程解决组合问题(之一)](http://blog.sina.com.cn/s/blog_d6cca93e0101ent7.html)(2013-09-21 23:32:54)
- [八、Python的函数编程(之二)](http://blog.sina.com.cn/s/blog_d6cca93e0101ekwj.html)![](https://box.kancloud.cn/2015-10-30_5632e1cc04fc3.gif "此博文包含视频")
(2013-09-20 23:09:39)
- [七、Python的函数编程(之一)](http://blog.sina.com.cn/s/blog_d6cca93e0101ekwg.html)![](https://box.kancloud.cn/2015-10-30_5632e1cc04fc3.gif "此博文包含视频")
(2013-09-20 23:09:10)
- [高中生如何学编程](http://blog.sina.com.cn/s/blog_d6cca93e0101e8fn.html)(2013-09-02 19:26:01)