xuzhengfu / pilot

进入编程世界的第一课
1 stars 0 forks source link

p1-2-structure-1 第二章 程序的基本结构(一):值与变量 #20

Open xuzhengfu opened 4 years ago

xuzhengfu commented 4 years ago

1. 了解 如何编程

我们前面说过,编程就像教孩子,更具体地说,就像给孩子讲故事。编故事和讲故事是有套路的,最基本的离不开“角色”和“情节”,角色要生动独特,情节要跌宕起伏一波三折,就比较吸引人,最后完成了一个主旨的表述。

以计算机为目标对象写故事,就要用编程语言的语法规则,在语法规则的体系内写清楚角色和情节,写出来的故事就是源代码(source code),然后通过编程语言的编译器或解释器让计算机运行源代码,得到我们想要的结果。

2. 理解 程序的结构的意义

理解程序的结构,就是理解编程语言提供给我们的“表达方式”有哪些,我们可以怎么去讲我们的故事。好的编程语言有很强的表达能力,用适合自己的编程语言书写代码经常会产生愉悦感,就来源于编程语言的表达力。

3. 了解 程序的基本结构之一 —— 值与变量

如果源代码是我们写出来的故事,那么“值和变量”就是故事的角色,是源代码中的“主语”和“宾语”。

在程序的世界里出现的角色无非是各种数据,最基本的数据包括:

  • 逻辑上的真和假,大名叫布尔值(boolean);
  • 各种数字,包括整数和小数(在计算机里叫浮点数 float);
  • 表示文本的字符和字符串(string)。

除了这些最基本的数据,还有几类“高级”一点的:

  • 对象:是我们可以自由定义的数据类型,一个对象可以有各种各样的属性(attribute)和方法(method);在这一部分的后面会专门介绍对象;
  • 数据容器:可以容纳数据的数据,比如一列数字;我们会在第四部分专门学习数据容器;
  • 函数:函数是完成特定工作的一段源代码,函数是程序本身的组成部分,但函数也是数据,我们会在第四部分专门学习函数。

数据在程序里的存在有两种形式,一种是“值(value)”,一种是“变量(variable)”。下面是一些值的例子:

42
3.14
'a'
'abracadabra'
True
False

值是有类型的,Python 提供了一个函数叫做 type(),可以告诉我们某个值是什么类型,我们可以试一下:

在学习用书的 jupyter lab 中依次运行如下命令:

type(42)
type(3.14)
type('abracadabra')
type(False)

结果分别如下:

int
float
str
bool

上面的运行结果告诉我们:

  • 42 类型是 int,这是 integer 的简写,即整数;
  • 3.14 类型是 float,即浮点数,我们可以理解为就是小数;
  • 'abracadabra' 类型是 str,这是 string 的简写,即字符串;
  • False 类型是 bool,这是 boolean 的简写,即布尔值,布尔值在计算机中代表逻辑上的真和假,只有两个布尔值,True 和 False。

一般来说,同样类型的数据之间是可以发生一些“运算”的,比如数字之间可以加减乘除,字符串之间可以串接起来,布尔值之间可以进行逻辑运算,而不同类型的数据之间就好像不同物种一样,没法交互。所以搞清楚数据的类型是很重要的事情。

有了值,我们就可以做计算,但是写不出真正的程序,为什么呢?因为程序写出来是希望能被很多人反复使用的——这些人叫做用户(user)——这样才比较划算,每次使用,用户输入一些数据,程序进行处理,然后给出用户想要的结果,尽管每次的输入可能是同一类型,但具体的值是多少在我们写程序时是不知道的,所以我们需要一种东西能够来代替值写在程序中,而在程序运行时这些东西才根据用户的输入变成实际的“值”,这些“东西”就是变量。

变量使得我们可以编写一个程序来处理一类值,而不管具体值是多少。我们学习代数的时候用 a + b = b + a 就表达了“加法交换律”这样高度抽象的普适规律,而不管 a 和 b 到底是多少,程序里的变量也一样,让我们能够进行“数据的抽象”,这个概念很重要,后面我们还会不断深化它。

所有编程语言都支持值和变量,也支持把特定的值赋予某个变量,这样的操作叫做“赋值(assignment)”。赋值之后变量就具有了相应的值,同时也具有了该值对应的类型,所以变量一经赋值就有了类型。

在学习用书的 jupyter lab 中运行如下命令:

a = 12
b = 30
f = 3.14
s = 'abracadabra'
l = [1, 2, 3]
t = True
f = False

type(a)
type(s)
type(t)
type(l)

结果分别如下:

int
str
bool
list

最后的这个 l 是新东西,叫做列表(list),是一种数据容器,我们以后会详细介绍。

如果我们想消灭一个变量不再使用,可以用 del 命令:

在学习用书的 jupyter lab 中运行如下命令:

del b

这之后变量 b 就变成没有赋值的状态了,既没有值也没有类型,实际上无法使用——在哪儿用都会报错。

在学习用书的 jupyter lab 中运行如下命令:

type(b)

结果如下:

---------------------------------------------------------------------------
NameError                                 Traceback (most recent call last)
<ipython-input-12-6fac7a639ca6> in <module>
----> 1 type(b)

NameError: name 'b' is not defined

Python 还支持 “多重赋值”,就是一次给多个变量赋值,比如这样:

a, b = 12, 30

之后 a 的值就是 12,而 b 的值就是 30。

赋值语句的右边不仅可以是值,也可以是变量,当一个变量写在赋值语句右边时,可以把它看做是“值的名字”,Python 解释器会把它替换成它的值(这个过程叫“求值”),比如:

g = f

先把 f 替换为它的值,也就是 False,上面的语句就变成了 g = False,这样变量 g 就得到 False 这个值,以及 bool 类型。

总结

  • 值和变量是程序的基本组成,是程序里操作的对象,就像故事中的主角配角;
  • 值具有类型,了解值的类型很重要;
  • 变量是值的抽象,可以帮助我们处理用户输入的任何值;
  • 赋值语句是值与变量、变量与变量之间的桥梁。

Logging

2020-02-14 13:58:55 initialize