第1章 为什么要学习编程

编程是一项极具创造性和有益的活动。编程的原因很多,大到为谋生去解决一个困难的数据分析问题,小到因为帮助别人解决一个问题而获得快乐。本书假定每个人都需要知道怎样编程,一旦学会编程,你就会想要用这个新技能做些什么了。

我们的日常生活中计算机无处不在,大到笔记本电脑,小到手机。这些计算机可视为帮助我们打理很多事情的“私人助理”。如今的计算机硬件从根本上是构建在不断回答我们提问的基础上,即“下一步想要做什么?”

图1-1

程序员在硬件之上添加了操作系统和应用程序,我们手中拿到的成品是一个很有用的个人数字助理(PDA,Personal Digital Assistant),它能够帮我们处理很多不同的事情。

计算机运行速度很快并拥有大量的内存,如果我们知道了如何与计算机沟通,告诉计算机想要它接下来做什么,这对更好地使用计算机很有帮助。如果掌握了计算机沟通语言,就能让计算机根据我们的意愿完成一些重复性工作。有趣的是,计算机能够胜任并且做得很好的工作就是那些经常让我们人类感到无聊、令人头脑麻木的事情。

例如,阅读本章的前三段,找出出现频率最高的词是哪一个,以及这个词总共出现了多少次。尽管你能在短时间内阅读和理解这些文字,但要对它们进行统计就很痛苦了。这类问题不是人的大脑擅长解决的。计算机恰好相反,她很难像人一样阅读和理解一段文字,但是进行文字统计并告诉你出现频率最高的词及其出现次数,对计算机而言却是非常容易的:

python words.py
Enter file:words.txt
to 16

“个人信息分析助理”很快告诉我们,单词“to“在本章前三段中一共出现了16次。

事实上,计算机擅长做人类不擅长做的事,这就是为什么你需要熟练掌握一门与计算机对话的语言。一旦学会这门新语言,你就可以将枯燥的工作指派给你的计算机搭档了,留出更多的时间去做适合你自己的事。在这种合作关系中,你的贡献是才思、直觉力和创造力。

1.1 创新与动机

这本书不是为专业程序员准备的,专业编程是份非常有前途的工作,可算是物质与精神双丰收。为他人创造有用的、简洁的与智能的程序是一项创新性很强的活动。你的计算机或PDA通常安装了来自许多不同程序员开发的各种软件,每一款软件都想要吸引你的注意力和兴趣。它们尽其所能来满足你的需求,在使用过程中让你获得优质的用户体验。在某些情况下,当你选择了一个软件,这个软件的开发者就会因为你的选择而直接获得收益。

如果将程序看作是程序员的创新性产出,那么下图就是一个更形象的PDA模型:

图1-2

本书的写作初衷不是为了赚钱或者取悦最终用户,而是让我们能更好地处理生活中的数据与信息。开始学编程,你既是程序员,也是你所写程序的最终用户。当你获得了程序员的技能,如果编程让你感到有创新活力的话,到时你的想法也许会发生改变,转向为他人开发程序也说不定。

1.2 计算机硬件架构

学习这种向计算机发指令来开发软件的语言之前,我们需要了解一下计算机的构成。

如果拆开你的计算机或者手机,仔细观察就会发现以下这些组件:

图1-3

这些组件的一般定义如下:

  • 中央处理器(Central Processing Unit ,CPU)是专门为解决“下一步做什么”而存在的组件。如果计算机处理速度达到3.0 GHz,这就意味着CPU每秒会提问30亿次“下一步做什么?”。你不得不学会如何跟CPU如此快速地交谈与保持同步。
  • 主存储器(Main Memory)用来存储CPU即刻需要的信息。主存储器的速度几乎与CPU不相上下。但是,关闭计算机之后主存储器里的信息也就消失了。
  • 辅助存储器(Secondary Memory)也是用来存储信息的,但是它比主存储器速度慢很多。辅助存储器的优点是,它可以在计算机不带电情况下存储信息。常见辅助存储器包括磁盘和闪存。闪存通常用在U盘和便携式音乐播放器上。
  • 输入输出设备(Input and Output Devices)包括屏幕、键盘、鼠标、麦克风、扬声器以及触摸板等。这些都是用来与计算机进行交互的设备。
  • 如今大多数计算机之间还建立了网络连接,通过网络获取信息。我们可以将网络看成信息存储与检索速度很慢的一个空间,而且不总是那么稳定。从某种意义上讲,网络是速度很慢且并不是那么可靠的辅助存储器。

这些组件的工作原理细节最好还是交给计算机厂商吧。这里只是为了掌握一些术语,在编程时方便提及这些组件。

作为一名程序员,你的工作就是利用并协调这些资源来解决问题和分析数据。作为程序员,你主要与CPU打交道,告诉它下一步做什么。有时,你要告诉CPU调用主存储器、辅助存储器、网络或输入输出设备。

图1-4

你需要成为回答CPU“下一步做什么”的人。但把你压缩到5毫米高,塞入计算机,让你每秒发出3亿次命令,想必这样会很不舒服。所以,你必须提前写好你的指令。我们把这些存储下来的指令称为程序,编写指令并进行调试的活动称之为编程。

1.3 理解编程

在本书其他章节中,我们尝试把你培养成长为一名理解编程艺术并具备一定编程能力的人。最后,你会成为一个程序员,也许不是专业的。但至少你掌握了如何看待数据(信息)分析问题,并开发出解决问题的程序。

从某种意义上来说,程序员的养成需要两种技能:

  • 首先,需要掌握编程语言(Python)本身—— 熟悉词汇和语法。能够准确地拼写这门新语言中的单词,并且掌握如何使用这门新语言正确地“造句”。
  • 其次,学会讲故事。在写故事的过程中,通过文字和句式的组合,向读者传达思想。编故事的艺术与能力通过写作与反馈得以提高。在编程中,程序即故事,待解决的问题即传达的想法。

当掌握一种编程语言(如Python)之后,你会发现学习其他编程语言,如JavaScript或者C++,就会容易许多。虽然新的编程语言拥有很多不同的词汇和语法,但你已经学会解决问题的技能,所有编程语言本质上都是相通的。

Python的词汇和句式上手很快,但要能写出一些连贯的程序来解决一个全新的问题,尚需时日磨练。讲授编程就像讲授写作一样。先对程序进行阅读和解释,然后编写简单的程序,接着逐步编写更复杂的程序。当达到一定水平,你就形成了自己的编程风格,自然而然地去应对问题,通过编写程序解决它。一旦修炼到这个程度,编程就变成一个愉悦且富有创造力的过程了。

我们从Python程序的词汇和结构讲起。第一次阅读时,一定要耐心学习那些简单的例子。

1.4 词汇与句子

与人类语言不同的是,Python的词汇数量实际上相当少。我们称这些“词汇”为“保留字”,它们是Python中具有特殊意义的词汇。对于Python来说,程序中出现的这些词汇,它们有且仅有一个含义。等下你在编程时,你自己定义的词汇称为变量。变量命名非常自由,但有一点,你不能使用Python的保留字作为变量名。

从某种意义上讲,我们训练一只狗时会使用一些特殊的词汇,比如“坐下”、“停下”和“拿来”。跟狗说话时不用这些保留字的话,它们就会傻傻地看着你,直到你对它说出保留字。举例来说,“我希望更多的人通过散步来促进健康。”,而大多数狗听到的可能是,“吧啦吧啦散步吧啦吧啦。”这是因为在狗的语言中“散步”是保留字。很多人可能觉得人类和猫之间的语言没有保留字1

Python的保留字如下:

and       del       from      not       while
as        elif      global    or        with
assert    else      if        pass      yield
break     except    import    print
class     exec      in        raise
continue  finally   is        return
def       for       lambda    try

就这么多词汇。Python比狗训练有素多了。当你说“try”,Python会毫无差错地执行try。

后续章节会介绍这些保留字及它们的适用场合。现在,我们只关注怎么与Python对话(就像人跟狗说话)。教Python说话是件有意思的事情,把想要说的话用单引号括起来就可以了。

print 'Hello world!'

这就是我们写出的第一个语法正确的Python语句。以保留字print开头,后面跟一个文本字符串,用单引号括起来。

1.5 与Python对话

我们已经掌握了Python的一个词汇与一个简单语句,接下来需要了解如何与Python对话,测试我们的新语言技能。

与Python对话之前,必须先在计算机上安装Python软件,学会如何启动Python。本章包含许多细节,建议查看http://www.pythonlearn.com,网站上有Python在Mac和Windows系统上配置和启动的详细说明和视频演示。当打开终端或者命令行窗口,输入python,Python解析器会以交互模式启动,如下所示:

Python 2.6.1 (r261:67515, Jun 24 2010, 21:47:49)
[GCC 4.2.1 (Apple Inc. build 5646)] on darwin
Type "help", "copyright", "credits" or "license" for more information.
>>>

>>>提示符表示Python解析器在询问,“你希望我下一步做什么?”。Python已经准备好与你对话。你需要掌握的是怎样说Python语言,发起一个对话。

举个例子,你对Python语言最简单的词汇或句子一无所知,想要使用宇航员的标准用语(喊话)。宇航员在一个遥远的星球登陆,试着和这个星球的居民用以下语句对话:

>>> I come in peace, please take me to your leader
  File "<stdin>", line 1
    I come in peace, please take me to your leader
         ^
SyntaxError: invalid syntax
>>>

事情进展好像并不顺利。除非你反应迅速,否则这个星球的居民可能会拿长矛刺向你,向你吐口水,然后把你放在火上烤,当成晚饭吃掉。

幸运的是,旅行时你带了这本书,及时翻到了这一页,再试一次:

>>> print 'Hello world!'
Hello world!

这次看起来效果不错,试着与他们继续对话:

>>> print 'You must be the legendary god that comes from the sky'
You must be the legendary god that comes from the sky
>>> print 'We have been waiting for you for a long time'
We have been waiting for you for a long time
>>> print 'Our legend says you will be very tasty with mustard'
Our legend says you will be very tasty with mustard
>>> print 'We will have a feast tonight unless you say
  File "<stdin>", line 1
    print 'We will have a feast tonight unless you say
                                                     ^
SyntaxError: EOL while scanning string literal
>>>

此时,你应该意识到,Python虽然非常复杂与强大,但在语法上非常挑剔,并不那么智能。对话中必须使用正确的语法。

在某种意义上,当你使用别人写的程序时,Python就在你和其他程序员之间充当中间人。Python是程序编写者将对话进行下去的一种方式。在阅读完短短几章之后,你将成为Python程序员中的一员,与你的程序使用者进行对话。

结束与Python解析器的第一次谈话之前,你可能要知道如何正确地与这个星球的居民说“再见”:

>>> good-bye
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
NameError: name 'good' is not defined

>>> if you don't mind, I need to leave
  File "<stdin>", line 1
    if you don't mind, I need to leave
             ^
SyntaxError: invalid syntax

>>> quit()

你会发现前两个错误提示是不同的。由于if是保留字,Python看到保留字会认为我们想说些什么,但句子的语法是错的。

跟Python说“再见”的正确方法是,在交互模式的提示符>>>后输入quit()。猜出这个命令这可能会花费一些时间,所以手头备本书可能会派上用场。

1.6 术语:解释器与编译器

Python是一种高级语言,旨在较为方便地让人类进行读写,让计算进行读取与处理。其他高级语言包括:Java、C++、PHP、Ruby、Basic、Perl以及JavaScript等。CPU里的硬件并不能理解任何一种高级语言。

CPU能理解的语言称之为机器语言。机器语言非常简单,坦白讲,编写起来非常无聊。它全部由0和1组成:

01010001110100100101010000001111
11100110000011101010010101101101
...

虽然机器语言表面看起来很简单,只有0和1,但它的语法比Python复杂得多。所以,很少有程序员用机器语言编程。相反,借助各种翻译器,程序员可以编写像Python或JavaScript这样的高级语言,这些翻译器会将程序转换成机器语言,再交由CPU执行。

因为机器语言依附于计算机硬件,所以不能在不同类型硬件之间移植。使用高级语言编写的程序可以在不同的计算机之间移植,通过在另一台计算机上使用不同的编译器,或者重新编译代码,生成一个适合这台计算机的机器语言版本。

编程语言的翻译器大体可分为两类:(1)解释器 与 (2) 编译器。

解释器读取程序员所写程序的源代码,解析源代码并实时解释指令。Python是一种解释器。当交互式执行Python时,输入一行Python语句,Python就会立即处理它,并做好准备让我们输入下一条语句。

Python语句中有一些地方会告诉Python,你想要Python记住等下会用到的一些数据。这时就需要为数据挑选一个名称来记住它,这样之后就可以通过这个名称来获取对应的数据了。我们使用变量(variable)来代表存储的数据。

>>> x = 6
>>> print x
6
>>> y = x * 7
>>> print y
42
>>>

在这个例子中,我们让Python记住数值6,并将6赋值给变量x,以便后续使用。为了确认Python已经记住这个数值,使用print命令打印变量x的值。接下来,我们让Python获取变量x的值并乘以7,然后将结果赋给新变量y。最后,打印出当变量y的当前值。

一次输入一行命令,Python将其视为一个语句序列,后面的语句可以获取前面语句的数据。四句组成的段落以一种有逻辑的和有意义的顺序编写,这就是我们写出的第一个简单的多行程序。

如上所示,解释器的本质是进行交互式对话。编译器需要将整个程序放在一个文件中,将高层次的源代码翻译成低层次的机器语言,然后编译器将生成的机器语言放到一个文件中以便后续执行。

如果你使用Windows系统,这些可执行的机器语言程序通常带有“.exe”或“.dll”后缀,分别代表这是“可执行的”和“动态可加载库”。在Linux和Mac中没有这样的后缀来明确表示文件是否是可执行的。

如果在文本编辑器中打开一个可执行文件,满眼望去完全看不懂:

^?ELF^A^A^A^@^@^@^@^@^@^@^@^@^B^@^C^@^A^@^@^@\xa0\x82
^D^H4^@^@^@\x90^]^@^@^@^@^@^@4^@ ^@^G^@(^@$^@!^@^F^@
^@^@4^@^@^@4\x80^D^H4\x80^D^H\xe0^@^@^@\xe0^@^@^@^E
^@^@^@^D^@^@^@^C^@^@^@^T^A^@^@^T\x81^D^H^T\x81^D^H^S
^@^@^@^S^@^@^@^D^@^@^@^A^@^@^@^A\^D^HQVhT\x83^D^H\xe8
....

机器语言的读写并不容易,好在借助解释器和编译器,能够使用Python或C这样的高级语言编写程序。

通过对解释器与编译器的讨论,你应该对Python解释器本身有了一些了解。那它又是用什么语言写的?是用汇编语言写的吗?当我们输入“python”,究竟发生了什么?

Python的解释器是用C语言编写的。你可以访问http://www.python.org网站,查看Python解释器的源代码,如有你有意愿改造这些源代码也是可以的。Python本身就是一个程序,它被编译成机器代码。当你(或计硬件供应商)在计算机上安装了Python,实际是上将一份编译好的Python程序的机器代码拷贝到你的计算机系统。在Windows中,Python可执行的机器代码很可能位于以下文件夹中:

C:\Python27\python.exe

要成为一名Python程序员,你知道这些还远远不够。但在一开始,花一些时间解释这些细节问题,还是值得的。

1.7 编写一个程序

体验Python功能的最好方式是在Python解析器中输入命令,但不建议采用这种方式来解决复杂的问题。

编程时,我们在文本编辑器里把Python指令写到一个文件里,这个文件称为脚本。一般而言,Python脚本以.py命名结尾。

为执行脚本,你必须告诉Python解释器脚本文件的名称。在Unix或Windows命令窗口中,你可以输入以下代码来执行hello.py脚本文件:

csev$ cat hello.py
print 'Hello world!'
csev$ python hello.py
Hello world!
csev$

“csev$”是操作系统提示符,“cat hello.py”是查看“hello.py”文件的内容,其中包含了字符串打印的一行Python程序。

我们调用Python解释器,告诉它从“hello.py”文件中读取源代码,而不是用命令行交互式执行Python代码。

你会发现,没有必要在Python程序文件末尾加上quit()。Python读取源代码文件时,到达文件末尾它会自己停止。

1.8 什么是程序?

程序的基本定义是,完成特定任务的一组Python语句序列。最简单的hello.py脚本也是一个程序,不过只是一行代码的程序罢了,没多大作用,但是从严格的定义上来说,它是一个Python程序。

考虑一个可以被程序解决的问题,然后用程序来解决它,这可能是理解程序的最简单方式。

假设,你想对Facebook上的发帖进行社会计算方面的研究,可能感兴趣的是发帖中最常用的词汇是什么。你可以打印出这些发帖,然后通读文本,从中寻找最常见的词,但这需要很长时间而且很容易出错。通过编写Python程序来快速且准确地处理这个任务,这样会比较明智,周末就可以做些其他有趣的事了。

举例来说,阅读以下内容,这是关于一个小丑和一辆车的文本,找出出现次数最多的单词,并统计它出现的次数。

the clown ran after the car and the car ran into the tent
and the tent fell down on the clown and the car

想象一下,要阅读数百万行文本来完成这个统计任务会是怎样的情形。坦率地说,学习Python,编写一个Python程序来统计的话,要比人工扫描单词快得多。

一个好消息,我用一个简单程序解决了在文本文件中找到最常见单词的这个问题。我已经编写好并测试了这个程序。现在,我把它交给你使用,这样就可以节省你的一些时间。

name = raw_input('Enter file:')
handle = open(name, 'r')
text = handle.read()
words = text.split()
counts = dict()

for word in words:
   counts[word] = counts.get(word,0) + 1

bigcount = None
bigword = None
for word,count in counts.items():
    if bigcount is None or count > bigcount:
        bigword = word
        bigcount = count

print bigword, bigcount

你甚至不需要知道Python就可以使用这个程序。你需要通过本书第10章来完全理解所用到的Python编程技术。你现在是最终用户,只需使用这个程序,你就会惊叹于它的聪明,感叹如何让你摆脱繁重的手工扫描。你只需输入代码,保存成words.py文件并执行它,或者也可以从http://www.pythonlearn.com/code/下载源码。

这个示例充分体现了Python以及这门语言在你(最终用户)与我(程序员)之间扮演的中间人角色。在安装了Python的用户计算机上,Python作为一种通用语言,让我们可以交换有用的指令序列(即程序)。因此,我们并不是跟Python交流,而是通过Python与其他人交流。

1.9 程序的架构

后续章节会详细介绍深Python的词汇、句子结构、段落结构与篇章结构。我们将学习Python的强大功能,以及如何将这些功能组合起来创建有用的程序。

程序的构造包含一些低层次的概念模式。这些构造模式不仅仅针对Python程序,而是每一种编程语言从机器语言到高级语言的通用组成部分。

输入: 从 “外部世界”获取数据,可以从文件中读取数据,或者从某种传感器,比如麦克风或GPS获取数据。在我们最初的程序中,输入是用户通过键盘输入数据。

输出:将程序的结果显示在屏幕上,或保存在一个文件,或写入一个设备,如扬声器可以播放音乐或朗读文字。

顺序执行:按照脚本中的语句顺序,一句接一句执行。

条件执行:根据特定条件执行或者跳过特定语句序列。

重复执行:重复执行一些语句,通常也会存在一些变化。

重用:编写好一组指令,为它们命名,之后在程序中根据需要可以再次使用这些指令。

这些听起来好像很容易,事实上并不是那么简单。这就好比,走路很简单吧,“把一只脚放在另一只脚前面”。编程的“艺术”就是不断创造和组合这些基本元素,创造对用户有用的东西。

除了“重用”模式之外,上面的词频统计程序几乎用到了上面提及的所有模式。

1.10 导致出错的原因

在前面与Python的对话中已经看到,我们编写Python代码必须非常精确,很小的偏差和错误都会导致Python放弃执行程序。

初学者通常认为,Python不能容忍犯错,给人留下低劣、可恨与残忍的印象。虽然Python看上去与其他人一样,但它能理解初学者,只是把这种“抱怨”转化为督促,让我们更好地编写程序。不要再说Python老是折磨我们了。

>>> primt 'Hello world!'
  File "<stdin>", line 1
    primt 'Hello world!'
                       ^
SyntaxError: invalid syntax
>>> primt 'Hello world'
  File "<stdin>", line 1
    primt 'Hello world'
                      ^
SyntaxError: invalid syntax
>>> I hate you Python!
  File "<stdin>", line 1
    I hate you Python!
         ^
SyntaxError: invalid syntax
>>> if you come out of there, I would teach you a lesson
  File "<stdin>", line 1
    if you come out of there, I would teach you a lesson
              ^
SyntaxError: invalid syntax
>>>

与Python争论没什么好处。它只是一个工具,没有情感,它很高兴随时准备为你服务。它的错误信息看起来很苛刻,但这些信息帮助提供线索。Python看到了你输入的内容,但不明白你输入的是什么。

Python更像一只狗,无条件爱你,只能理解很少的关键词,用它那甜美的表情(>>>)看着你,等待你输入一些它能理解的东西。当Python说道:“SyntaxError: invalid syntax”,它只是摇着尾巴说:“你似乎说了什么,但我不太明白,请你继续跟我说话(>>>)。”

当程序变得越来越复杂,你会遇到以下三种类型的错误:

语法错误:

这是你遇到的第一种错误,很容易解决。语法错误意味着,你违反了Python的“语法”规则。Python会尽可能指出一行语句中它所困惑、不能理解的地方和字符。语法错误唯一棘手的是,有时候程序中需要修改的错误可能位于Python所指出困惑的位置前方。所以,Python指出的语法错误位置只是你排查问题的起点。

逻辑错误: 逻辑错误是程序没有语法错误前提下,语句顺序或语句关系存在错误。逻辑错误的一个形象举例是,“打开水瓶喝口水,把它放到书包里,走到图书馆,然后再把水瓶盖上。”

语义错误: 语义错误是程序的语法完美且逻辑正确,但无法达到预期。也就是说,程序完全正确,但它不能做到你想要它做的事。一个简单的例子,如果你给人指路怎么去一家餐馆,如此说:“…当你走到有加油站的十字路口时,向左转,继续走一英里,你的左手边有一座红色建筑,餐馆就在那儿。”过了很长时间,你的朋友打来电话,他们正在一个农场,围着一个谷仓转圈,并没有看到餐馆的标志。”然后,你问:“你们在加油站左转还是右转了?”他们说:“完全是按你指示的方向走,我还写到纸上,在加油站左转,继续走一英里”。然后,你说:“非常抱歉,虽然我的方向指示在语法上没错,但其中悲催地包含了一个很小的、没有被发现的语义错误。”

对于这三种错误,Python会尽最大努力按照你的要求准确地去执行。

1.11 学习之旅

当循序渐进阅读本书时,如果初次遇到某些概念不能很好理解,不要担心。小时候学说话时,头几年只要能发出一些可爱的喃喃之音,这不是什么问题。花6个月的时间,从能说简单的词汇发展到能表达简单的句子,再用5到6年的时间,从句子上升到段落,这样的发展过程是正常的。再过几年就能依据自身兴趣,独立写出一篇完整的作文了。

我们希望你能以更快地速度学习Python,所以有些内容在接下来的几章中会多次涉及到。学习一门新语言需要花时间去吸收和理解,才能做到运用自如。全景是由一块块小的片段拼接起来的。我们会一再提及一些主题,尝试让你看清全景,这可能会导致一些混乱。由于书的体例是线性的,如果你参加一门课,推进方式是线性的,但不要受此约束。前后来回翻阅,进行一些略读。在没有充分理解细节之前,跳过有难度的内容,这有助于更好的理解编程之道。通过回顾之前的内容,或者重做之前做过的练习,你可能会感收获颇多,其中这些内容可能在你一开始接触时觉得有些费解的。

学习第一门编程语言时,通常会有一些值得欢呼雀跃的时刻。这就像用斧凿精心雕琢,一块岩石最终在你手中变成一尊美丽的雕塑。

如果有些事看起来特别困难,通宵熬夜耗着是没有意义的。休息一下,打个盹,吃点零食,向某人(可能是你的狗)倾诉下你当下遇到的问题,然后,以全新的眼光回过头来再看这个问题。我保证,一旦你从本书中学会了编程知识,再回头看,你会发现编程是非常简单和优雅的行为,只是需要花一些时间去吸收罢了。

1.12 术语

臭虫:程序中的错误。

中央处理单元:所有计算机的心脏。我们编写的软件都由它来执行,也称为“CPU”或者“处理器”。

编译:把高级语言编写的程序翻译成低级语言,为后续执行做好准备。

交互模式:在提示符后输入命令和表达式,这是Python解释器的一种使用方法。

解释:采用一次翻译一行的方式来执行高级语言编写的程序。

低级语言:一种旨在便于计算机执行的编程语言,也称为“机器码”或“汇编语言”。

机器代码: 最接近硬件的编程语言,可直接由中央处理单元(CPU)执行。

主存储器:存储程序和数据。关闭电源后主存储器的信息会丢失。

解析:检查程序和分析语法结构。

可移植性:程序的一个属性,即程序可在不同类型的计算机上运行。

print语句: 能让Python解释器在屏幕上显示数据的指令。

问题解决: 提出一个问题,找到解决方法并形成解决方案的过程。

程序:实现特定计算的一组指令集。

提示:程序显示一个消息,等待用户的输入。

辅助存储器:存储程序和数据,电源关闭后数据不会丢失。辅助存储器的速度通常比主存储器慢。辅助存储器包括磁盘驱动器、U盘中的闪存等。

语义:程序本身的含义。

语义错误:程序的一种错误。程序并未按照程序员意愿做事。

源代码:程序的高级语言代码。

1.13 练习

习题1.1 计算机的辅助存储器的功能是什么?

a) 执行程序的所有计算和逻辑

b) 在互联网上检索网页

c) 长期存储信息,甚至重启之后信息不会丢失

d) 接收用户的输入

习题1.2 什么是程序?

习题1.3 编译器和解释器有什么区别?

习题1.4 下面哪个选项包含了“机器代码”?

a)解释器

b)键盘

c)Python源文件

d)word文档

习题1.5 找出下面代码的错误:

>>> primt 'Hello world!'
  File "<stdin>", line 1
    primt 'Hello world!'
                       ^
SyntaxError: invalid syntax
>>>

习题1.6 执行以下Python语句,变量“X”存于何处?

x = 123

a)中央处理器

b)主存储器

c)辅助存储器

d)输入设备

e)输出设备

习题1.7 以下程序会输出什么?

x = 43
x = x + 1
print x

a)43

b)44

c)x+1

d)出错,因为x = x + 1在数学上讲不通

习题1.8 以人作类比,解释以下事物:(1)中央处理单元,(2)主存储器,(3)辅助存储器,(4)输入设备和(5)输出设备。例如,“计算机的中央处理单元相当人体哪个部位”?

习题1.9 如何解决“语法错误”?

1. http://xkcd.com/231/