Python从0到1 | 02 | 变量和简单数据类型
第2章 变量和简单数据类型
2.1 运行hello_world.py
发生的情况
运行hello_world.py
时,Python都做了什么?
print("Hello Python World!")
运行上述代码,可以看到如下输出:
Hello Python World!
文件末尾的.py
说明这是一个Python文件,因此编辑器将使用Python解释器来运行它。
Python解释器读取整个程序,确定每个单词的含义。比如,看到print
就会将括号中的内容打印到屏幕,不管括号里写的是什么。
编辑器会用不同的颜色来突出显示程序的不同部分。例如print
是一个函数名称,将其显示为蓝色;Hello Python World!
不是Python代码,将其显示为橙色。这种功能叫语法突出。
2.2 变量
下面尝试在hello_world.py
中使用一个变量。
message = "Hello Python World!"
print(message)
运行这个程序,将看到输出:
Hello Python World!
我们添加了一个名为message
的变量。每个变量都会存储与其相关联的信息。
在这里,message
存储的内容是Hello Python World!
。
添加变量需要Python解释器做更多的工作,首先它将文本Hello Python World!
与变量message
关联起来;然后,它将与变量message
关联的值打印到屏幕。
现在进一步扩展这个程序,在hello_world.py
增加两行代码:
message = "Hello Python World!"
print(message)
message = "Hello Python Crush Course World!"
print(message)
运行这个程序,可以看到两行输出:
Hello Python World!
Hello Python Crush Course World!
程序中可以随时修改变量的值,而Python始终记录变量的最新值。
2.2.1 变量的命名和使用
在Python中使用变量要遵守一些规则和指南。违反这些规则会引发错误。
- 变量只能包含字母、数字和下划线。变量名可以字母或下划线开头,不能以数字开头。例如,可以命名
message_1
,但不能命名1_message
。 - 变量名不能包含空格,但可以用下划线分隔单词。例如,
greeting_message
是可以的,greeting message
不行。 - 不要将Python关键字和函数名用作变量名,即不要使用Python保留用于特殊用途的单词。
- 变量名应该简短又有描述性。
name
比n
好,student_name
比s_n
好,name_length
比length_of_person_name
好。 - 慎用小写字母
l
和大写字母O
,可能被人错看成1
和0
。
2.2.2 使用变量时避免命名错误
编写程序时总会犯错。优秀的程序员也会犯错,但是他们知道如何高效地消除错误。
现在有意编写一些会引发错误的代码(拼写错误的message
):
message = "Hello Python World!"
print(mesage)
当程序出错时,Python将尽力找出问题所在。当程序无法运行时,解释器会提供一个Traceback
,它是一条记录,指出解释器尝试运行代码时,在何处陷入了困境。
Traceback (most recent call last):
File "hello_world.py", line 2, in
print(mesage)
NameError: name 'mesage' is not defined
解释器指出,文件hello_world.py
的第2行存在错误;它列出了这行代码(print(mesage)
)旨在帮助你更快地找出错误;它还指出了发现的是什么类型的错误(NameError: name 'mesage' is not defined
)。在这里解释器发现了一个名称错误(NameError
),指出打印的变量mesage
没有定义。Python无法识别你给的变量,要么是在使用变量时忘了赋值,要么是输入变量时拼写不正确。
解释器不会对代码拼写做检查,但是要求变量名的拼写一致。如果一开始就将message
错误地拼写成了mesage
,那么程序将成功运行。
mesage = "Hello Python World!"
print(mesage)
>>> Hello Python World!
2.3 字符串
大多数程序定义并收集数据,然后使用数据做有意义的事情。
对数据进行分类大有裨益。现在介绍一种数据类型是字符串
,我们可以使用多种方式处理它。
字符串
就是一系列字符,在Python中使用引号
引起来的就是字符串,可以是单引号
,也可以是双引号
:
"This is a string."
'This is also a string.'
这种灵活性能够让你在字符串中包含引号和撇号:
'I told my friend, "Python is my favorite language."'
"The language 'Python' is named after Monty Python, not the snake."
"One of Python's strengths is its diverse and supportive community."
2.3.1 使用方法修改字符串的大小写
对于字符串,最简单的操作之一就是修改其中单词的大小写。
name = "ada lovelace"
print(name.title())
>>> Ada Lovelace
小写的字符串"ada lovelace"
存储到了变量name
中。在print()
语句中,出现了方法title()
。
方法
是Python对数据执行的操作。在name.title()
中,name
后的句点(.
)让Python对变量name
执行方法title()
指定的操作。
每个方法后面跟着一个括号,因为方法通常需要额外的信息来完成工作,这种信息是在括号内提供的(它们被称为参数)。函数title()
不需要额外的信息,所以括号里是空的。title()
方法的意思是,以首字母大写的方式显示每个单词。
当然还有其他类似的方法:
name = "Ada Lovelace"
print(name.upper()) # 将所有字母转为大写
print(name.lower()) # 将所有字母转为小写
lower()
方法很有用,有时我们不能指望用户提供正确的大小写,因此需要将提交的信息先转换为小写,然后处理它们。
2.3.2 合并(拼接)字符串
很多时候我们需要拼接字符串。比如我们将姓和名放在不同的变量,等到需要显示姓名时,再将其合而为一。
first_name = "ada"
last_name = "lovelace"
full_name = first_name + " " + last_name
print(full_name)
>>> ada lovelace
Python使用加号(+
)合并字符串。我们使用+
合并first_name
、空格和last_name
,从而得到完整的名字。这种合并字符串的方式称为拼接
,通过拼接可以创建完整的信息。再看一个例子:
first_name = "ada"
last_name = "lovelace"
full_name = first_name + " " + last_name
print("Hello, " + full_name.title() + "!")
>>> Hello, Ada Lovelace!
句子使用了全名,并使用了方法title()
调整名字的显示。我们还可以用拼接创建消息,然后用变量存储整个信息:
first_name = "ada"
last_name = "lovelace"
full_name = first_name + " " + last_name
message = "Hello, " + full_name.title() + "!"
print(message)
>>> Hello, Ada Lovelace!
虽然输出一样,但是因为使用了变量message
,最后的print
语句简单了许多。
2.3.3 使用制表符或换行符添加空白
空白
泛指任何非打印字符串,如空格、制表符和换行符。使用空白组织输出,使行文更易读。
在字符串中添加制表符,使用\t
:
print("\tPython")
>>> Python
在字符串中添加换行符,使用\n
:
print("Languages:\nPython\nC\nJavaScript")
>>>
Languages:
Python
C
JavaScript
还可以在同一个字符串中同时包含制表符和换行符。字符串\n\t
让Python换到下一行,并在下一行开头添加一个制表符:
print("Languages:\n\tPython\n\tC\n\tJavaScript")
>>>
Languages:
Python
C
JavaScript
2.3.4 删除空白
在程序中出现额外的空白会令人感到困惑。对于程序员而言,'python'
与'python '
看起来没什么差别,但是对程序而言,这是两个不同的字符串。Python会发现其中额外的空白,并认为它有意义——除非你告诉它不是的。
favorite_language = 'python '
print(favorite_language)
print(favorite_language.rstrip())
print(favorite_language)
>>> 'python '
>>> 'python'
>>> 'python '
存储在变量favorite_language
中的字符串末尾包含空白,我们第一次查看它的值,可以看到空白。使用方法rstrip()
之后,多余的空白就被删除了。这种删除是暂时的,当我们再一次访问这个变量,可以看到空白仍在。如果要永久删除空白,需要将删除后的值存回变量中。
favorite_language = favorite_language.rstrip()
print(favorite_language)
我们可以删除末尾的空白(rstrip()
),也可以删除开头的空白(lstrip()
),或者同时删除(strip()
)。strip
本身就是脱去、剥掉的意思,脱衣舞者就是stripper
;而l
和r
分别代表left
和right
吧,我猜的。
favorite_language = ' python '
print(favorite_language)
print(favorite_language.lstrip())
print(favorite_language.rstrip())
print(favorite_language.strip())
>>> ' python '
>>> 'python '
>>> ' python'
>>> 'python'
2.4 数字
我们经常使用数字记录得分,表示可视化数据,存储信息等。看一下Python如何管理数字。
2.4.1 整数
可对整数执行加(+
)减(-
)乘(*
)除(/
)运算。
加法:
a = 2 + 3
print(a)
>>> 5
减法:
a = 3 - 2
print(a)
>>> 1
乘法:
a = 2 * 3
print(a)
>>> 6
除法:
a = 3 / 2
print(a)
>>> 1.5
乘方:
a = 3 ** 2
print(a)
>>> 9
使用括号改变运算次序:
a = (2 + 3) * 4
print(a)
>>> 20
空格不影响Python计算表达式的方式,只是为了方便阅读。
2.4.2 浮点数
Python将带小数点的都成为浮点数
。很大程度上说,使用浮点数时不需要考虑其行为,只需要输入要使用的数字,Python通常会按照你期望的方式处理它们。
加法:
a = 0.1 + 0.1
print(a)
>>> 0.2
乘法:
a = 2 * 0.2
print(a)
>>> 0.4
但是,结果所包含的小数位数可能是不确定的。
a = 0.2 + 0.1
print(a)
>>> 0.30000000000000004
所有语言都存在这种问题,不必担心。Python会找到一种方式,以尽可能精确地表示结果。但是鉴于计算机内部表示数字的方式,有些情况下很难。暂时忽略掉多余的小数位数即可。在后面的项目中我们将学习如何处理多余的小数位的方式。
2.4.3 使用str()
避免类型错误
我们经常需要在消息中使用变量的值,例如祝贺别人生日快乐,我们刚开始可能会这么写:
age = 23
message = "Happy" + age + "rd Birthday!"
print(message)
结果运行之后会引发错误:
Traceback (most recent call last):
File "birthday.py", line 2, in
message = "Happy " + age + "rd Birthday!"
TypeError: Can't convert 'int' object to str implicitly
这是一个类型错误(TypeError
),Python无法识别使用的信息。变量age是一个整数(int
)类型,Python不知道如何解读它,它可能表示23
,也可能表示2
和3
。在字符串中使用整数,应当明确地告知Python将这个整数用作字符串。因此需要调用函数str()
,它可以将非字符串表示为字符串。
age = 23
message = "Happy " + str(age) + "rd Birthday!"
print(message)
2.5 注释
注释是一项非常有用的功能。随着程序越来越大,越来越复杂,就应当在其中添加说明,对你解决问题的方法进行大致的阐述。注释
能让你用自然语言在程序中添加说明。
2.5.1 如何编写注释
在Python中注释用井号(#
)标识。井号后面的内容都会被Python解释器忽略。
# 向大家问好
print("Hello Python people!")
2.5.2 该编写什么样的注释
注释的主要目的是阐述代码要做什么,是如何做的。开发项目的时候,刚开始对各个部分之间如何协同了然于胸,但是时间久了可能就忘了。你当然可以通过研究代码来确定,但是编写了注释,就能节省时间。
要成为专业程序员就需要与他人合作,大多数软件都是合作编写的,训练有素的程序员都希望代码中包含注释,因此最好现在开始就养成添加注释的习惯。
如果不确定是否要编写注释,就问问自己,在找到合理的方案之前,是否考虑了更多的方案。如果是的,那就对解决方案进行说明。这样总比写了注释之后,回头改方案,然后修改注释要轻松一点。