1.1.1 算法思维

假设你遇到了这样一个情况:你需要向一个从未开过车的朋友描述怎样把车从私家车道上倒出来。

你需要将上述任务分解成若干简单明了的步骤,便于你的朋友理解。例如,你可以向你的朋友提供以下一组指令:

1  插入钥匙。
2  转动钥匙,直到汽车发动,然后松手。
3  按下换挡杆上的按钮,并将其移至“倒挡”。
4  ……

遗憾的是,对于许多汽车来说,即使你的朋友理解每个指令,这个“代码”也无法工作,因为它有一个程序错误。在第3步之前,许多汽车要求驾驶员:

踩下左踏板。

另外,挡位的标记可能是“R”而不是“倒挡”。在编写这样的指令时,很难在一开始就达到较高的精度要求。

因为你的指令不是跟随操作进度而实时给出的,所以还需要考虑一些可能发生的意外情况:

如果听到嘎吱声,踩下左踏板……

将较长的操作步骤分解为小的且明确的子步骤并预先考虑意外情况是算法思维的开始。

如果你的朋友有很多看别人开车的经验,那么上面的指令可能就足够他理解操作步骤了。但如果面对的是机器人,则需要更多的细节。例如,前两个步骤可能需要扩展为以下内容:

抓住钥匙的宽端。
将钥匙的尖端插入方向盘柱右下侧的槽中。
沿顺时针方向(当从宽端向尖端看时)围绕其长轴旋转钥匙。
……

这两组指令说明了跟计算机沟通时低级语言和高级语言的差异。低级计算机程序类似于第二组明确指令,用机器能够理解的语言编写[1]高级系统可以理解许多常见任务,因此可以以较为简洁的方式编程,类似于上面的第一组指令。Python是一种高级语言,它提供了许多常用的命令,例如数学计算、文本处理和文件处理。另外,Python还可以调用许多标准库,这些标准库包含一系列程序,可以执行数据可视化和图像处理等高级功能。


[1] 机器代码和汇编语言是低级编程语言。

Python还附带了一个命令行解释器——在此程序中,输入Python命令后即可执行这些命令。因此,在Python中,既可以将指令保存在文件中以便未来运行,又可以输入命令立即执行。相比之下,科学计算中使用的许多其他编程语言,如C++或Fortran,则会要求在执行程序之前先编译程序。一个叫作编译器的独立程序会将你的代码翻译成低级语言。然后,运行生成的编译程序来执行(实现)算法。而使用Python,快速编写、运行和调试程序都相对容易(不过,这仍然需要耐心和练习)。

命令行解释器结合标准库和你自己编写的程序,构成了一个既方便又强大的科学计算平台。