Python 和 SPL 对比 13——程序调试

编写程序难免出现 bug,有时即使程序能够正常运行,得到的结果也可能不正确,所以除了查看报错信息,我们通常还要进行一些调试工作,本文就来对比一下 Python 和 SPL 在程序调试方面的情况。

Python

我们在安装 Python 时,就自动安装了 Python 官方提供的集成开发学习环境 IDLE (Integrated Development Learning Environment)。下图是 IDLE 的截图。

..

从界面就可以看出 IDLE 很简洁,甚至简洁到简陋的地步,业界也很少有人使用这款 IDE 来开发工程,如果以这款工具来与 SPL 对比程序调试功能,有点太欺负人了。我们还是以业界常用的集成开发环境 Pycharm 来对比程序调试功能。

以计算组合数为例介绍 Pycharm 的调试功能:

随机生成 6-10 中的一个数 n,再随机生成 1-5 中的一个数 k,计算组合数..

..

Python代码

import random
def Fact(n):
a=1
for i in range(1,n+1):
a=a*i
return a
n=random.randint(6, 10)
k=random.randint(1,5)
Fn=Fact(n)
Fk=Fact(k)
Fn_k=Fact(n-k)
Cnk=Fn/Fk/Fn_k
print(Cnk)

阶乘函数

n

k

n的阶乘

k的阶乘

n-k的阶乘

组合数

调试程序,通常只需要把不确定的变量 print 出来即可,如想知道 n 和 k 分别是多少,甚至想知道 n 的阶乘、k 的阶乘、n-k 的阶乘都是多少,都可以 print 出来查看。代码如下:

import random
def Fact(n):
a=1
for i in range(1,n+1):
a=a*i
return a
n=random.randint(6, 10)
print("n:",n)
k=random.randint(1,5)
print("k:",k)
Fn=Fact(n)
print("Factorial
(n):",Fn)
Fk=Fact(k)
print("Factorial(k):",Fk)
Fn_k=Fact(n-k)
print("Factorial(n-k):",Fn_k)
Cnk=Fn/Fk/Fn_k
print(Cnk)

阶乘函数

n

k

n的阶乘

k的阶乘

n-k的阶乘

组合数

这种方法简单易行,详细直观,但如果变量很多,都用 print 打印出来就不太现实了,这就需要用断点来调试了,查看运行到断点时各个变量的情况,甚至还可以查看自定义函数内部的变量情况。

比如想查看计算 k 的阶乘之前 n、k 和 n 的阶乘 Fn 的值,可以在 k 的阶乘这一行打上断点,点击 debug 按钮,就可以看到这些值,如下图:

..

从程序界面和变量信息界面都可以看到变量信息,变量信息界面还显示了变量的数据类型,如 Fn={int}40320,Fn 是整数类型。

希望程序继续运行可以根据需求选择单步调试、进入子函数等调试功能。

Pycharm还有一个功能很好用,在编写代码的时候,它有补全函数和变量名的功能,如下图:

..

只要输入函数和变量名的部分内容就会弹出可能的函数(包括自定义函数和内置函数)和变量名,大大提高了编程效率。

SPL

SPL是网格编程语言,程序执行后,网格会变成黄色,表示成功执行这一格,直接点击就可查看网格变量的值,如下图:

..

程序运行后,每一格的值都可以这样查看,不需要 print。

通常情况下,SPL 只要通过查看每格的变量值就可以完成调试。但当程序很复杂时,SPL 也提供了断点调试功能,和 Pycharm 的断点类似,也可以查看程序运行到断点时各变量的取值情况,如下图:

..

当程序中设置变量后,SPL 还可以在集算器的右下角查看变量信息,如下图:

..

程序调试方面,SPL 还是很方便,不过在编写程序时,SPL 还没有那么“智能”,函数和变量名还是要自己输入,暂时没有补齐功能。

小结

Pycharm 这一集成开发环境使 Python 调试更加便捷,但最常用的 print 大法比较麻烦,断点的设置、执行等操作还是略显繁琐,不过强大的函数、变量名补齐功能还是可圈可点,使程序编写更加便捷。

SPL 是网格式编程,可以随时查看网格值和变量值,相较于 print 大法要方便了太多太多,断点的设置和使用和 Pycharm 区别不大;需要优化的是函数名、变量名的补齐功能。