丰富的线上&线下活动,深入探索云世界
做任务,得社区积分和周边
最真实的开发者用云体验
让每位学生受益于普惠算力
让创作激发创新
资深技术专家手把手带教
遇见技术追梦人
技术交流,直击现场
海量开发者使用工具、手册,免费下载
极速、全面、稳定、安全的开源镜像
开发手册、白皮书、案例集等实战精华
为开发者定制的Chrome浏览器插件
[美]肯尼斯·A.兰伯特(KennethA.Lambert)著刘鸣涛孙黎甘靖译
引言完成本章的学习之后,你将能够做到以下几点:●描述算法的基本特征。●解释在计算机体系结构中硬件和软件是如何协作的。●总结计算机的发展简史。●编写并运行一个简单的Python程序。
跟大多数的研究领域一样,计算机科学涉及一系列广泛的相互关联的思想。其中最基本的两个思想是算法和信息处理。本节会对这两个基本思想做简要介绍,后面的章节中会详细地介绍它们。
现在简单介绍一下现代计算机系统的结构。现代计算机系统由硬件和软件组成。硬件由执行算法所需的物理设备组成。软件是这些算法的集合,表示为程序,特别是编程语言。在接下来的讨论中,我们将重点讨论典型台式计算机系统中的硬件和软件,尽管在其他计算机系统中也可以找到类似的组件,例如手持设备和ATM(自动取款机)。
计算机的基本硬件组件是存储器、中央处理器(CPU)和一组输入/输出设备,如图1-1所示。
存储在存储器中的信息可以表示任何类型的数据,例如数字、文本、图像或声音,或者程序的指令。我们还可以在内存中存储一个编码为计算机二进制指令的算法。一旦信息被存储在内存中,我们通常想用它做点什么,也就是说,我们想处理它。负责处理数据的计算机部分是中央处理器(CPU)。这种设备有时也称为处理器,由电子开关组成,用来执行简单的逻辑、算术和控制操作。CPU通过从存储器中提取二进制指令、解码并执行它们来执行算法。执行指令可能还需要从内存中获取其他二进制信息(数据)。处理器可以非常快速地定位计算机主存储器中的数据。然而,这些数据只有在电力进入计算机时才存在。如果电源故障或关闭,主存储器中的数据将丢失。显然,需要更永久性的内存来保存数据。这种更持久的内存称为外部或辅助内存,它有几种形式。磁带和硬盘等磁存储介质允许位模式作为模式存储在磁场中。半导体存储介质(例如闪存棒)与光学存储介质(例如CD和DVD)以不同的技术实现几乎相同的功能。这些辅助存储介质中的一些可以容纳比计算机的内部存储器大得多的信息量。
■.练习
Python是一种解释语言,你可以在名为shell的交互式编程环境中运行简单的Python表达式和语句。打开Pythonshell最简单的方法是启动IDLE(集成开发环境)。这是Python安装附带的集成程序开发环境。执行此操作时,将打开一个名为PythonShell的窗口。图1-6显示了macOS上的shell窗口,在Windows系统或Linux系统上运行的shell窗口看起来应该与这个相似。请注意,此屏幕截图中出现的Python版本是3.6.1。本书假设你将使用Python3而不是Python2。这两个版本之间有很大的差异,本书中使用的许多示例不适用于Python2。
在shell窗口中包含一条打开消息,后面跟着一个特殊符号>>>,称为shell提示符。shell提示符下的光标等待你输入Python命令。请注意,通过在shell提示符下输入help或从窗口的下拉菜单中选择帮助,便可以立即获得帮助。当你输入表达式或语句时,Python会对其进行计算并显示结果(如果有的话),然后显示新的提示符。接下来的几行显示了对几个表达式和语句的求值。
注意Python代码中颜色的使用。IDLE编程环境使用颜色编码来帮助读者挑选代码中的不同元素。在这个例子中,引号内的项目是绿色的,标准函数的名称是紫色的,程序注释是红色的,IDLE对用户命令的响应是蓝色的,剩余的代码是黑色的。表1-1列出了本书所有程序代码中使用的颜色编码方案。
Pythonshell对于尝试用短表达式或语句来学习该语言的新特性以及查阅该语言的文档非常有用。要退出Pythonshell,你可以选择窗口的关闭框,或者按下Control+D组合键。本节的其余部分将探讨开发更复杂和更有趣的程序的方法。
在这个例子中,文本“Hithere”是我们希望Python显示的文本。在编程术语中,这段文字被称为字符串。在Python代码中,字符串总是用引号括起来。但是,print函数显示不带引号的字符串。你还可以编写一个打印函数,该函数包含两个或多个用逗号分隔的表达式。在这种情况下,print函数会评估表达式,并在一行中显示结果,用单个空格分隔。带有两个或更多表达式的print语句的语法如下所示:
注意这个语法示例中的省略号(...)。省略号表示你可以在第一个表达式之后包含多个表达式。无论输出一个或多个表达式,print函数总是以换行符结束其输出。换句话说,它显示表达式的值,然后将光标移动到窗口的下一行。要在与上一行相同的行上开始下一个输出,可以将表达式end="",即“用空字符串而不是换行符结束行”,放在表达式列表的末尾,如下所示:
在Python中创建程序时,你经常希望程序向用户请求输入。你可以通过使用input函数来做到这一点。此功能使程序停止并等待用户从键盘输入值。当用户按下return或enter键时,该函数接受输入值,并使其可供程序使用。以这种方式接收输入值的程序通常会将其保存以供进一步处理。下面的示例接收来自用户的输入字符串并保存它以供进一步处理。用户的输入是黑色的。
输入功能执行以下操作:●显示输入提示。在这个例子中,提示是"Enteryourname:"。●接收在键盘上输入的称为字符的击键字符串,并将该字符串返回给shell。输入函数如何知道使用什么作为提示?括号中的文本"Enteryourname:"是input函数的一个参数,它告诉input函数如何用于提示。参数是函数完成工作所需的信息。通过将函数返回的字符串分配给变量name来保存。具有输入功能的赋值语句的形式如下:
变量标识符简称变量,它只是一个值的名称。当变量在input语句中收到它的值时,变量就会引用这个值。如果用户在最后一个示例中输入了名称“KenLambert”,变量名的值如下所示:
input函数总是根据用户的击键建立一个字符串并将其返回到程序中。输入代表数字的字符串后,程序员必须将它们从字符串转换成合适的数字类型。在Python中,为此有两个类型转换函数,分别称为int(整数)和float(浮点数字)。下一个例子输入两个整数并显示它们的总和:
注意,调用int函数时,输入函数会返回每个结果。将这两个数字相加,然后输出它们的总和。表1-2总结了本节介绍的函数。
虽然在shell提示符下以交互方式尝试短Python表达式和语句很容易,但是编写、编辑和保存文件中更长、更复杂的程序更方便。然后,我们可以在IDLE中运行这些程序文件或脚本,也可以在操作系统的命令提示符下运行,而不打开IDLE。脚本文件也是Python程序分发给他人的方式。最重要的是,正如你从写学期论文中知道的,文件允许你安全和永久地保存若干小时的工作。要以这种方式编写和执行程序,请执行以下步骤:
图1-7显示了一个IDLE窗口,其中包含一个完整的脚本,提示用户输入矩形的宽度和高度,计算矩形的面积,并输出结果。
脚本当脚本从IDLE窗口运行时,它会在图1-8所示的shell窗口中产生与用户的交互。
与在Python解释器的提示下直接输入程序相比,这可能是一种互动程度稍低的执行程序的方式。但是,从IDLE窗口运行脚本将允许你构建一些复杂的程序,测试它们,并将它们保存在程序库中,以便重用或与他人共享。
无论你是将Python代码作为脚本运行还是在shell中交互运行,Python解释器都会做大量工作来执行程序中的指令。这项工作可以分成一系列步骤,如图1-9所示。
程序员在编写程序时不可避免地会犯拼写错误,Python解释器几乎总能检测到这些错误。这种错误称为语法错误。术语语法是指在语言中形成句子的规则。当Python在程序中遇到语法错误时,它会停止执行,并显示错误消息。Pythonshell的以下示例显示了几种类型的语法错误和相应的错误消息:
第一条语句为变量Length分配一个输入值。下一条语句试图打印变量Length的值。Python回应说这个名字没有定义。虽然程序员可能想写变量Length,但是Python只能读取程序员实际输入的内容。这是一个很好的例子,说明一台计算机只能读取它接收的指令,而不能读取我们打算给它的指令。下一条语句试图打印拼写正确的变量的值。但是,Python仍然会生成错误消息。
在此错误消息中,Python解释了这一行代码意外缩进。事实上,在print之前还有一个额外的空格。缩进在Python代码中非常重要。在shell提示符或脚本中输入的每一行代码必须从最左边的列开始,没有前导空格。此规则的唯一例外发生在控制语句和定义中,其中嵌套语句必须缩进一个或多个空格。你可能会认为跟踪程序中的缩进会很痛苦。然而,作为补偿,Python语言比其他编程语言简单得多。因此,要遇到和纠正的语法错误类型更少,要学习的语法也更少!在我们的最后一个例子中,程序员试图添加两个数字,但是忘记了第二个数字:
在后面的章节中,你将了解更多其他类型的程序错误以及如何修复产生这些错误的代码。■.练习