编程语言基础
变量
世界先被测量为数字,再被人类以命名。
通过本节课,你将理解:
#goal世界中的变量
#hook-variable观察世界时,我们会发现周围的一切都会改变。
温度计「此刻的读数」随着时间上下变化,座位上同学也会随着毕业发生变化,我们在生活里已经在用「变量」来理解世界了。

在代数中,变量更为常见。方程 里,、、 不是某一个固定的数,而是占位:路程、速度、时间各自可以取不同的值,关系却保持不变。解方程时写「设未知数为 」,也是先给「待求的那一项」一个名字,再谈它等于多少。代数之所以有力,正在于它允许我们谈论可变的量!

变量的声明与赋值
#explore-name在 Python 里,我们可以很容易的声明一个变量。
如下代码所示,在一个空白的行,直接输入你意向中的变量名字,并且通过=给它一个初始值,你就得到了一个变量。
# 声明一个名为x的变量,并把初始值设为1
x = 1
# 将变量x当前的值输出显示
print(x)然后,我们可以使用类似的方式,对变量的值进行修改:
x = 3
print(x)
x = 8
print(x)是的!在Python里,如果需要修改变量的值,你需要通过代码自行进行修改,如果没有代码要求修改变量的值,它自己是不会变的。
你并不能随意的给变量起名字,如果你使用了某一些名字,会导致程序不能正常工作,比如:
# 将变量命名为print
print = 1
# 导致原本print的输出能力失效
print('hello, world!')事实上,我们通常会在命名时遵守一定的规范,比如在Python领域影响最大的规范为 PEP 8。
根据PEP 8中的规定,我们应该尽量使用有实际含义的单词或缩写来命名,如果有多个单词,可以使用下划线进行区隔。
# 不推荐:看不出在记什么
a = 21.5
d1 = 3
n = '林安'
# 推荐:有意义的名字(下划线法)
temperature_c = 21.5
trial_id = 3
student_name = '林安'
is_valid = True在科研领域,为了正确的处理数据,通常也会把单位或范围写进名字,减少误会:
height_cm = 168
speed_m_per_s = 3.0
sample_count = 12Python在语法层面上支持使用中文来命名变量,可以使得代码的阅读体验对我们更为友好。但并不是所有的设备和系统都支持中文,如果使用中文可能会导致代码的可用性变差,并不推荐使用。
在给变量进行赋值时,我们使用了=,貌似没有问题,但它并没有看起来这么简单,我们需要展开来聊一下。
名字 = 表达式 的意思是:先算出右边的值(也许不需要计算),再让左边的变量的值修改为新的值。也就是说,=的两边只有在这一刻是相等的,之后可就不一定了。
举例来说:
# 变量x的值为3
x = 3
# 变量y的值设定为x的当前值,也就是3
y = x
# 将变量x的值改为4
x = 4
# 输出x,值为4
print(x)
# 输出y,值为3,与x不相同
print(y)这样的机制,会让代码出现一些在数学课上看起来会奇怪的式子,比如 a = a + 1 ,在程序里非常常见:
# 变量x的值设定为3
a = 3
# 先计算=右边的值3+1=4,再把4这个计算结果给到变量a,更新a的值为4
a = a + 1
# 输出a
print(a)也因为这样,用于根据变量原值来更新的语句经常使用,Python中还有一类复合了「计算与赋值」的特殊符号——赋值运算符,比如+=:
# 变量x的值设定为3
a = 3
# 意思为将变量a的当前值加一,相当于a=a+1
a += 1
# 输出a
print(a)类似这样的运算符还有很多,我们会在下节课了解更多的基本运算后再探索。
四种基本数据类型
#explore-types你可以对数字做加法,但不能对一段文字做加法。每个变量所拥有的值,也决定了它的数据类型,从而影响到后续的计算。
在Python中最常见的四种数据类型,分别对应四种对世界的描述方式:
| 类型 | 含义 | 可以描述什么 | 例子 |
|---|---|---|---|
int | 整数 | 物品的个数 | 3 |
float | 浮点数(小数) | 速度、时间等物理量 | 1.5 |
str | 字符串 | 文本 | '林安' |
bool | 布尔值 | 真或假 | True |
请注意:
True与False的首字母必须大写。
使用 type() 查看一个值属于哪种类型:
# 查询3、'3'、1.5、True的数据类型,并将结果输出显示
print(type(3))
print(type('3'))
print(type(1.5))
print(type(True))上一课已经见过:print(2 + 3) 与 print('2 + 3') 结果不同。引号把内容声明为字符串。
count = 3
label = '3'
print(type(count))
print(type(label))
print(count + 1)
print(label + '1')count 是整数;label 是字符串。count + 1 将被计算为4,但label + '1' 将得到 '31',因为在字符串类型里,+表示两段文字的拼接,不是进行加法运算。
这是程序非常容易出Bug的地方,错误的使用类型,程序不一定立刻报错,而可能安静地给出不符合预期的答案。
本节练习:一次钟摆记录
#practice在 在线 IDE 里用下面这组数据记下一次钟摆观测:名称 '单摆A'(字符串)、次数 12(整数)、周期 2.0(浮点数)、是否可用 True(布尔值)。先打印这四个值和它们的 type,再把次数加上 1 后重新打印。次数应变为 13,类型仍是整数。
本节要点
#review- 变量用于表示一个可变的量,可以理解为一种装了数值的容器。
- 变量的赋值先算右边,再让左边指向结果;再次赋值是覆盖,不是数学上的恒等。
- 四种基本类型对应四种提问:个数(
int)、连续量(float)、文本(str)、真假(bool)。 - 不同的数据类型会影响运算规则。
'3' + '1'得到'31',不是4。
单选题
再次赋值会覆盖
下面程序运行后,两次 print 依次输出什么? x = 3 print(x) x = 8 print(x)
单选题
赋值不是永久相等
下面程序运行后,print(x) 与 print(y) 依次输出什么? x = 3 y = x x = 4 print(x) print(y)
单选题
命名习惯
按本节介绍的 PEP 8 习惯,哪一项更适合作为变量名?
单选题
更新原值
下面程序运行后,print(a) 的输出是什么? a = 3 a += 1 print(a)
单选题
类型决定运算
已知 count = 3,label = '3'。运行 count + 1 与 label + '1',结果分别是?
未登录时不会保存学习进度