Python大学实用教程
上QQ阅读APP看本书,新人免费读10天
设备和账号都新为新人

1.3 程序简介

计算机程序(Computer Program),或称为程序(Program),是一组指示计算机或其他具有信息处理能力的设备的每一步操作的指令集合。通常,程序由某种编程语言编写而成。

如前所述,如果使用机器语言编写程序,那么计算机就能直接“认识”了。但是,编程者就痛苦了。

用汇编语言,对编程者而言,痛苦程度下降了,但是计算机“不认识”汇编语言,还需要将汇编语言所编写的程序翻译为机器语言程序,这个过程被称为“汇编”,用于执行此过程的程序被称为“汇编器”。

用汇编语言编写程序也不是快乐的事情,因为它与机器语言一样,同属低级语言。

现在,更多的程序是用高级语言开发的。

计算机更“不认识”高级语言了。所以,用高级语言所编写的程序同样要被“翻译”为机器语言程序,才能被计算机识别和执行。

1.3.1 程序“翻译”方式

程序的“翻译”方式有两种:编译和解释。

在说明这两种“翻译”方式之前,先定义如下专有术语。

源代码:用某种高级语言写的程序就称为“源代码”。

源文件:保存源代码的文件称为源文件。

本地代码:计算机(具体就是CPU)能直接执行的机器语言的程序。用任何编程语言编写的源代码,最后都要被翻译为本地代码,否则CPU不能理解。

(1)编译

用编译器(complier,也是一种程序)将源代码全部翻译为本地代码的过程,就是“编译”。所谓编译器,则是执行这一过程的程序。

某些编程语言写的程序需要编译之后才能被执行,这类语言常被称为“编译型语言”,如C、C++、Pascal、Object-C、Swift、Rust等。

(2)解释

有的程序不需要编译,在运行它的时候,直接用解释器(interpreter,也是一种程序)对源代码进行解释和执行。

同样,用于编写这类程序的编程语言被称为“解释型语言”,如BASIC、PHP等。

不论程序用哪种方式被翻译为本地代码,程序中的内容都需要按一定规则来编写,其中最重要的规则就是算法。

1.3.2 算法

算法,比计算机还要古老,虽然它现在常常被放在计算机或者软件专业来学习,事实上算法的历史可以上溯到早期文字出现的时候。

其实,读者应该对算法不陌生。比如,小学数学中的竖式加法(见图1-3-1)就是一种算法。

编程序如同写文章,语句相当于文章中的句子,算法则与篇章结构类似。

算法是编写程序不可或缺的,而且普遍存在于编程过程中。或许因为它广泛存在,才使得定义它越发困难,所以迄今还没有一个严格的、大家公认的定义,但对它的基本含义还是有一些共识的。

算法(algorithm)是一系列解决问题的清晰指令。也就是说,对于符合一定规范的输入,程序能够在有限时间内获得所要求的输出(见图1-3-2)。

img

图1-3-1 加法的竖式算法

img

图1-3-2 算法定义

作为“指令”集合的算法传给computer,computer必须理解此指令,并能按照指令要求进行操作。而computer在很早的时候并不是现在所说的计算机(从构词法就可以推断,可能是从事compute工作的人)。或者说,算法不是必须与编程绑定的。

在著名的《几何原本》(公元前3世纪欧几里得著)中记载了最大公约数的算法。其现代方式的表述如下。

假设两个不全为0的非负整数mnm>n)的最大公约数记为gcd(mn),其计算方法如下。

第一步:如果n=0,返回m的值作为结果,同时结束计算;否则进入第二步。

第二步:m除以n,将余数赋给r,即r=m%n(%是Python中计算余数的符号)。

第三步:令m=nn=r;然后返回第一步。

对于算法的特征,业界基本认同高德纳在他的著作《计算机程序设计艺术》一书中的归纳。

①输入:一个算法必须有两个或以上输入量。

②输出:一个算法应有一个或以上输出量,输出量是算法计算的结果。

③明确性:算法的描述必须无歧义,以保证算法的实际执行结果是精确地符合要求或期望,通常要求实际执行结果是确定的。

④有限性:依据图灵的定义,一个算法是能够被任何图灵完备系统模拟的一串运算,而图灵机只有有限个状态、有限个输入符号和有限个转移函数(指令)。一些定义更规定,算法必须在有限个步骤内完成任务。

⑤有效性:一个算法的任何计算步骤都可以被分解为基本可执行的操作,每个操作都能够在有限的时间内完成。

算法对于程序开发而言,其重要性是不言而喻的。但因为本书的定位不是算法专门教程,所以,建议读者可以通过阅读算法类的专门书籍来学习有关算法知识。

本书的重点还是讲述如何用Python语言编写程序,其间会自然而然地用到算法,不过读者不必为此担心。

1.3.3 Hello World

解决同一个问题的程序,通常可以用不同编程语言实现,但是受限于客观条件,最终会选择某种语言。在某些项目中也会使用多种语言,不同语言所编写的程序之间通过“接口”实现数据和业务互通。

因为每种语言都有自己的语法规则,所以程序样式各异。图1-3-3展示了利用几种高级语言打印“Hello World”的程序。

img

图1-3-3 不同高级语言输出“Hello World”

不要根据代码行数评价语言的“好坏”,尽管Python 的“Hello World”最简短,也不意味着它就具有某种“可炫耀的优越”。因为不同类别的语言有不同的用武之地。

然而,Python的简洁还是吸引人的。