本页面仅用于内容预览,不包含动画交互效果
讲义加载中,请耐心等待……
Python 编程:从入门到实践Python 编程:从入门到实践(第三版)(第三版)Teacher Name / Email1
与《Python 编程:从入门到实践(第三版)》一书配套使用讲义中的文本及绘图采用署名-非商业性使用-相同方式共享协议CC BY-NC-SA 4.0进行许可引用的网络图片附有超链接,可用于访问来源讨论、意见、答疑、勘误、更新:https://github.com/scruel/pcc_3e_slides作者:@Scruel Tao关于本讲义关于本讲义2
22 变量和简单的数据类型变量和简单的数据类型2.1 运行解释2.2 变量2.3 字符串2.4 数2.5 注释2.6 Python 之禅2.7 小结3
2.12.1 运行解释运行解释文件扩展名:结尾的 .py 用于指出文件内容是 Python 代码Python 解释器:读取整个文件,确定其中每一行的含义并执行例如,当解释器看到 print,就会将括号中的内容打印到屏幕上。语法高亮:用不同的颜色,区分出程序代码中的不同部分4

目前来说,你可以把 Python 解释器当作一个黑盒子,只要知道它大概的作用就行。

编程语言和世界上的其他语言一样,也有自己的语法和词汇,我们能通过学习 Python 语言,来和 Python 解释器进行沟通。

Python 解释器有点笨,它只能读懂 Python 语言,所以无法解释其他语言,就好像如果你不会外文,看外文就如同看天书一样。

同时它只会按部就班地执行你写的代码,所以需要你来确保代码的正确性,而这里的“按部就班”,却是很多人热爱编程的原因之一。

2.22.2 变量变量修改我们在上一章中写的代码:修改后的代码中:添加了一个名为 message变量(variable),指向的值为文本 "Hello Python world!" 每个变量都指向一个值(value),这个值与变量相关联5

message = "Hello Python world!"

print(message)

2.22.2 变量变量输出仍然是一样的:6

注:VS Code 不在终端中,而在调试控制台中输出内容的原因,是由于这里已经按照附录 B 进行了配置

2.22.2 变量变量再添加两行代码:运行程序可以看到两行不一样的输出我们可以在程序中随时修改变量的值,Python 将会始终记录最新值message = "Hello Python Crash Course world!"print(message)7
2.2.12.2.1 变量:命名和使用变量:命名和使用只能包含字母、数字和下划线不能以数字开头messagemessage!message1message_11message8

在 Python 3 中,变量名还可以包含其他Unicode 字符。

例如,中文字符也是支持的,但是不推荐,毕竟 Python 只认英文符号,输入时候切换来去会很麻烦。

2.2.12.2.1 变量:命名和使用变量:命名和使用只能包含字母、数字和下划线不能以数字开头不能包含空格用下划线来分隔单词message 1message_19

Python 中的命名变量法被称为蛇形命名法(snake case),或者也可以叫做下划线命名法

2.2.12.2.1 变量:命名和使用变量:命名和使用只能包含字母、数字和下划线不能以数字开头不能包含空格用下划线来分隔单词变量名应使用既简短又具有描述性的英文单词不建议用拼音msgmessagexiaoxim10

适当的无歧义简写是完全可以的,python 中有很多类似的做法,在这里使用 msg 这个简写来表示 message。

拼音很容易混淆,让人看不懂意思,比如这里到底是消息还是小溪还是小西?傻傻分不清

2.2.12.2.1 变量:命名和使用变量:命名和使用只能包含字母、数字和下划线不能以数字开头不能包含空格用下划线来分隔单词变量名应使用既简短又具有描述性的英文单词不建议用拼音变量名区分大小写,命名普通的变量一般使用小写慎用小写字母 l 和大写字母 O,因为它们容易被人错看成数字Python 的关键字和函数名不能用作变量名(见附录 A.4要养成良好的命名习惯11

在 Python 3 中,变量名还可以包含其他 Unicode 字符。例如,中文字符也是支持的,但是不推荐,对于不熟悉英文的同学,可以边用边查边学,建议还是要将常用单词背一下。

全大写的变量名,按照惯例视为常量,本章马上会提到。

2.2.22.2.2 变量:避免命名错误变量:避免命名错误尽量避免拼写错误,容易产生错误,可以利用工具检查利用 VS Code 的提示和运行后展示的 Traceback 信息排错名称错误(NameError)12

Traceback 信息:字面意思是追溯、回溯,是 Python 错误信息的报告,可以告诉你错误类型,发生错误的代码位置等信息。

注:虽然我们对 VS Code 应用了汉化,但有些信息仍然会是英文,尤其是 Python 给出的错误报告,如果你的英文不佳看不懂,我们推荐使用翻译软件来辅助学习,对于常见的错误,我们会单独给出解释。

2.2.22.2.2 变量:避免命名错误变量:避免命名错误Be Nice不要害怕犯错,更不要因为错误显而易见,就对他人冷嘲热讽~13

提醒要多多练习新学到的知识

2.2.32.2.3 变量是标签变量是标签变量是用于存储值的盒子?变量是可以被赋值的标签(变量指向特定的值)这个定义好得多!好像不太恰当14
2.32.3 字符串字符串字符串(string就是一系列字符 Python 中,用英文引号引起的都是字符串引号可以是双引号"Hello Python world!"15
2.32.3 字符串字符串字符串(string就是一系列字符 Python 中,用英文引号引起的都是字符串引号可以是双引号也可以是单引号'Hello Python world!'16
2.32.3 字符串字符串字符串(string就是一系列字符 Python 中,用英文引号引起的都是字符串引号可以是双引号也可以是单引号还有一种特殊的写法,使用三个双引号"""Hello Python world!"""17

注:三个单引号的写法也是支持的,硬要用也没有人能拦着,不过依据代码风格指南(PEP 8),为了一致性考虑,我们应该始终使用三个双引号的写法。

2.32.3 字符串字符串字符串(string就是一系列字符 Python 中,用英文引号引起的都是字符串引号可以是双引号也可以是单引号还有一种特殊的写法,使用三个单引号或三个双引号三个引号可以创建跨行字符串"""Hello Python world!Hello iTuring!"""18
2.32.3 字符串字符串字符串(string就是一系列字符 Python 中,用英文引号引起的都是字符串引号可以是双引号也可以是单引号还有一种特殊的写法,使用三个单引号或三个双引号三个引号可以创建跨行字符串,一个引号的写法则不能跨行"Hello Python world!Hello iTuring!"19

补充知识:一个引号的写法也可以跨行,只需要在每行的末尾加入表示连接的字符(\)即可,但这种写法并不会保留换行,而三个引号的写法将会保留括起的所有内容,两者均会包括开头和末尾添加的额外空白:

>>>"Hello Python world! \

Hello iTuring!"

Hello Python world! Hello iTuring!

>>>"""Hello Python world!

Hello iTuring!"""

Hello Python world!

Hello iTuring!

2.32.3 字符串字符串Python 提供了一些途径,帮助我们修改字符串,比如大小写:"ada lovelace""Ada Lovelace""ADA LOVELACE""ada lovelace""Ada Lovelace"20
2.3.12.3.1 字符串:大小写修改字符串:大小写修改方法/函数(method/functionPython 可对数据执行的操作。name 后面的点号(dotPython name 变量执行指定的操作。name = "ada lovelace"print(name.title())21
2.3.12.3.1 字符串:大小写修改字符串:大小写修改方法/函数(method/functionPython 可对数据执行的操作。name 后面的点号(dotPython name 变量执行指定的操作。name = "ada lovelace"print( name.title ( ) )都是英文括号哦!每个方法后面都跟着一对括号22
2.3.12.3.1 字符串:大小写修改字符串:大小写修改方法/函数(method/functionPython 可对数据执行的操作。name 后面的点号(dotPython name 变量执行指定的操作。每个方法后面都跟着一对括号括号内包含方法需要的额外信息name = "ada lovelace"print(name.title( ))title 方法所需的额外信息23
2.3.12.3.1 字符串:大小写修改字符串:大小写修改方法/函数(method/functionPython 可对数据执行的操作。name 后面的点号(dotPython name 变量执行指定的操作。每个方法后面都跟着一对括号括号内包含方法需要的额外信息name = "ada lovelace"print(name.title( ))print 函数所需的额外信息24
2.3.12.3.1 字符串:大小写修改字符串:大小写修改title():以首字母大写的方式显示每个单词这个方法没有所需的额外信息,因此它后面的括号内是空的。name = "ada lovelace"print(name.title())"ada lovelace"Ada Lovelace方法/函数(method/functionPython 可对数据执行的操作。25
关于函数和方法关于函数和方法刚才遇到了两个关键词:方法(method函数(functionname.title()print()26
关于函数和方法关于函数和方法它们的书写方式略有不同:刚才遇到了两个关键词:方法(method函数(function目前为止,我们还不用知道它们之间的异同,但你可以把方法视为特殊的函数实例名.方法名(...)函数名(...)27
关于函数和方法关于函数和方法如果你想要力求精确,可以通过去掉函数后面的括号,然后交给 Python 解释器执行代码,来告诉你它到底是什么:刚才遇到了两个关键词:方法(method函数(function目前为止,我们还不用知道它们之间的异同,但你可以把方法视为特殊的函数。28

Python3 对函数和方法做出了区分,但有些人仍会在日常混用方法和函数,这可能很常见,不用大惊小怪。

补充:Python 是一门特殊的语言,在后续讲到类的时候,我们还会继续补充,现在你只要记得“方法是特殊的函数”即可。

2.3.12.3.1 字符串:大小写修改字符串:大小写修改upper():将字符串全部改为大写。name = "Ada Lovelace"print(name.upper())"Ada Lovelace"ADA LOVELACE29
2.3.12.3.1 字符串:大小写修改字符串:大小写修改upper():将字符串全部改为大写。lower():将字符串全部改为小写。name = "Ada Lovelace"print(name.lower())"Ada Lovelace"ada lovelace30
2.3.12.3.1 字符串:大小写修改字符串:大小写修改upper():将字符串全部改为大写lower():将字符串全部改为小写title():每个单词的首字母大写name = "ada lovelace"print(name.title())name = "Ada Lovelace"print(name.upper())print(name.lower())31
2.3.22.3.2 字符串:字符串:ff--字符串字符串我们可以在 f-字符串中,使用花括号来引用代码中定义的变量f format 的简写first_name = "ada"last_name = "lovelace"full_name = f"{first_name} {last_name}"print(full_name)message = f"Hello, {full_name.title()}!"print(message)32
2.3.32.3.3 字符串:添加空白字符串:添加空白我们可以使用空格来添加空白:print('Python Rust')Python Rust33

字符串中的空白有好几种,这里我们介绍两种,分别是制表符和换行符

2.3.32.3.3 字符串:添加空白字符串:添加空白或使用特殊的字符来添加空白:\t:在字符串中表示制表符。print('Python\tRust')PythonRust看着比空格要长一些print('Python Rust')Python Rust34

字符串中的空白有好几种,这里我们介绍两种,分别是制表符和换行符

2.3.32.3.3 字符串:添加空白字符串:添加空白或使用特殊的字符来添加空白:\t:在字符串中表示制表符。\n:在字符串中表示换行符。print('Python\nRust')PythonRust35

字符串中的空白有好几种,这里我们介绍两种,分别是制表符和换行符

2.3.32.3.3 字符串:添加空白字符串:添加空白直接使用空格\t:在字符串中表示制表符。\n:在字符串中表示换行符。print('Python Rust')print()print('Python\tRust')print()print('Python\nRust')36

实际上,\t 和 \n 这两个家伙有一个家族名称,叫做转义字符,家族中还有很多其他的成员

2.3.42.3.4 字符串:删除空白字符串:删除空白额外的空白可能令人迷惑,毕竟很难看出来有什么区别:字符串空白?Python 认得!37
2.3.42.3.4 字符串:删除空白字符串:删除空白可以使用以下方法来删除空白:lstrip():移除左端的空白rstrip():移除右端的空白strip() :移除两端的空白' iTruing'.lstrip()'iTruing '.rstrip()' iTruing '.strip()38
2.3.42.3.4 字符串:删除空白字符串:删除空白可以使用以下方法来删除空白:lstrip():移除左端的空白rstrip():移除右端的空白strip() :移除两端的空白'iTruing''iTruing''iTruing'39

删除空白的方法不会改变原字符串(示例里没有体现出来,介绍即可)

2.3.42.3.4 字符串:删除空白字符串:删除空白可以使用以下方法来删除空白:lstrip():移除左端的空白rstrip():移除右端的空白strip() :移除两端的空白' iTruing'.lstrip()'iTruing '.rstrip()' iTruing '.strip()40
2.3.52.3.5 字符串:删除前缀字符串:删除前缀还有一个常见的字符串处理任务是删除前缀比如我们有时需要删除网址的前缀 'https://' 部分'https://www.ituring.com.cn'41
2.3.52.3.5 字符串:删除前缀字符串:删除前缀还有一个常见的字符串处理任务是删除前缀比如我们有时需要删除网址的前缀 'https://' 部分'www.ituring.com.cn'42
2.3.52.3.5 字符串:删除前缀字符串:删除前缀还有一个常见的字符串处理任务是删除前缀比如我们有时需要删除网址的前缀 'https://' 部分removeprefix():移除字符串中指定的前缀url = 'https://www.ituring.com.cn'url = url.removeprefix('https://')print(url)运行结果www.ituring.com.cn43

这里在变量名后面加上了点号和 removeprefix() 方法,并且在括号内输入了要从原始字符串中删除的前缀。

与删除空白的方法一样,removeprefix() 也保持原始字符串不变。

如果想保留删除前缀后的值,既可将其重新赋给原来的变量,也可将其赋给另一个变量。

2.3.62.3.6 字符串:避免语法错误字符串:避免语法错误语法错误:包含非法的 Python 代码时发生的错误例如,单引号和双引号的错误包裹,时常会引起语法错误:message = 'Life's pathetic, let's pythonic.'print(message)运行结果 File "<stdin>", line 1 message = 'Life's pathetic, let's pythonic.' ^SyntaxError: unterminated string literal (detected at line 1)44
2.3.62.3.6 字符串:避免语法错误字符串:避免语法错误语法错误:包含非法的 Python 代码时发生的错误我们可以这样纠正,将两边的单引号改为双引号:message = "Life's pathetic, let's pythonic."print(message)运行结果Life's pathetic, let's pythonic.45

注:使用转义字符 \‘,也能纠正这个错误。

2.3.62.3.6 字符串:避免语法错误字符串:避免语法错误语法错误:包含非法的 Python 代码时发生的错误(时常会遇到)解释器无法正确地确定字符串的结束位置,所以会给出错误语法错误较难定位(不借助工具时)利用编辑器的语法高亮注意编辑器的错误提示查看运行后的错误提示参考书籍附录 C 的建议46
字符串的简单拼接字符串的简单拼接除了用 f-字符串来生成字符串,我们能对字符串做运算”:可以使用 + 号来拼接字符串:还可以使用 * 号来生成重复的字符串:"Hello" + " iTuring""Hello iTuring""Hello " * 2"Hello Hello "47

注:Python 当然也支持使用字符串变量来进行类似的操作

字符串的简单拼接字符串的简单拼接试着输出一下你的 Ohhhh!48
2.42.4 数:整数和浮点数数:整数和浮点数整数(integer):不带小数点的数浮点数(float):带小数点的数11.549

乘法符号使用 * 来表示而非使用 × 来表示,因为计算机的键盘上并不存在 × 这个键

2.42.4 数:整数和浮点数数:整数和浮点数整数(integer):不带小数点的数浮点数(float):带小数点的数print(1)print(1.5)运行结果11.550
2.42.4 数:整数和浮点数数:整数和浮点数整数(integer):不带小数点的数浮点数(float):带小数点的数10000001000000.551
2.42.4 数:整数和浮点数数:整数和浮点数整数(integer):不带小数点的数浮点数(float):带小数点的数可在数中添加下划线使大数更易读1_000_0001_000_000.552
2.42.4 数:整数和浮点数数:整数和浮点数整数(integer):不带小数点的数浮点数(float):带小数点的数可在数中添加下划线使大数更易读print(1000000)print(1_000_000)print(1000000.5) print(1_000_000.5)运行结果100000010000001000000.51000000.553
2.42.4 数:整数和浮点数数:整数和浮点数整数(integer):不带小数点的数浮点数(float):带小数点的数数的基本运算:加(+print(3 + 3)print(2.5 + 2)print(1 + 2)print(1.5 + 1.5)运行结果64.533.054

只要运算过程中有浮点数,结果就会是浮点数

2.42.4 数:整数和浮点数数:整数和浮点数整数(integer):不带小数点的数浮点数(float):带小数点的数数的基本运算:加(+减(-print(3 - 3)print(2.5 - 2)print(1 - 2)print(1.5 - 1.5)运行结果00.5-10.055

只要运算过程中有浮点数,结果就会是浮点数

2.42.4 数:整数和浮点数数:整数和浮点数整数(integer):不带小数点的数浮点数(float):带小数点的数数的基本运算:加(+)减(-乘(*print(3 * 3)print(2.5 * 2)print(1 * 2)print(1.5 * 1.5)运行结果95.022.2556

只要运算过程中有浮点数,结果就会是浮点数

乘法符号使用 * 来表示而非使用 × 来表示,因为计算机的键盘上不存在 × 这个键

2.42.4 数:整数和浮点数数:整数和浮点数整数(integer):不带小数点的数浮点数(float):带小数点的数数的基本运算:加(+)减(-)乘(*除(/print(3 / 3)print(2.5 / 2)print(1 / 2)print(1.5 / 1.5)运行结果1.01.250.51.057

除法的结果总是浮点数

2.42.4 数:整数和浮点数数:整数和浮点数整数(integer):不带小数点的数浮点数(float):带小数点的数数的基本运算:加(+)减(-)乘(*)除(/双斜杠(//):表示整数除法print(3 // 3)print(2.5 // 2)print(1 // 2)print(1.5 // 1.5)运行结果11.001.058

整数除法(简称整除法)的结果会向零做圆整,只要运算过程中有浮点数,结果就会是浮点数

2.42.4 数:整数和浮点数数:整数和浮点数整数(integer):不带小数点的数浮点数(float):带小数点的数数的基本运算:加(+)减(-)乘(*)除(/双斜杠(//):表示整数除法双乘号(**):表示乘方运算print(3 ** 3)print(2.5 ** 2)print(1 ** 2)print(1.5 ** 1.5)运行结果276.2511.837117307087383659

注1:浮点数与浮点数间也是可以做乘方运算的

注2:事实上有关于数的运算,还有求模运算符、自赋值运算符和位运算符等,这里暂时不给出,后续会在有必要的情况下给出。

2.42.4 补充:布尔值(补充:布尔值(BooleanBoolean用于表示逻辑真或假True 表示真False:表示假print(True) print(False)运行结果TrueFalse60

对于布尔值,目前以了解为主,由于比较重要,这里提前给出,我们很快会在逻辑判断的章节中涉及到相关的知识。

2.42.4 同时给多个变量赋值同时给多个变量赋值Python 支持在一行代码中给多个变量赋值:上面的代码中,我们将 xyz 都初始化为了零。书写的顺序就是分配的顺序x, y, z = 0, 0, 061
2.42.4 常量(常量(constantconstant常量:程序内一直保持不变的变量Python 没有内置的常量支持,我们给出的是一个约定俗成的惯例使用全大写字母(单词由下划线分割)来将某个变量视为常量MAX_CONNECTIONS = 5000请不要在程序中修改任何常量!62
2.52.5 注释(注释(CommentComment注释:让你能够使用自然语言在程序中添加说明Python 中使用(#)标识注释解释器会忽略注释的内容# 向大家问好print("Hello Python people!")63
2.52.5 注释(注释(CommentComment注释:让你能够使用自然语言在程序中添加说明Python 中使用(#)标识注释解释器会忽略注释的内容# 向大家问好# print("Hello Python people!")64

常用的编辑器支持使用快捷键来注释选中行,快捷键一般为 Ctrl+/

2.52.5 该编写什么样的注释该编写什么样的注释65

调侃一下,另外 ChatGPT 写的注释还挺不错

2.52.5 该编写什么样的注释该编写什么样的注释阐述代码的目的阐述难懂的细节要力求清晰简洁便于个人回忆和团队合作避免添加没必要的注释不要怕麻烦而不写注释66
2.6 Python2.6 Python 之禅之禅Python 社区的理念(由 Tim Peters 撰写)Beautiful is better than ugly.Simple is better than complex.Complex is better than complicated.Readability counts.There should be one -- and preferably only one --obvious way to do it.Now is better than never.>>> import thisThe Zen of Python, by Tim Peters67

对于 Python 之禅的解读,请配合阅读原书

2.72.7 小结小结学习了如何使用变量,如何创建描述性变量名,以及如何消除名称错误和语法错误学习了字符串是什么,以及如何调整字符串的显示方式,使用空白来显示整洁的输出,还学习了如何删除字符串中多余的字符。学习了如何使用整数和浮点数,了解了一些使用数值数据的方式。学习了如何编写说明性注释,了解了让代码尽可能简单的理念在下一章中,我们将学习关于列表的相关知识。68
课后拓展课后拓展学习并使用用于获取帮助信息的内置函数 help()了解如何养成良好的编码习惯了解什么是转义字符,利用它解决 2.3.6 节中出现的错误完成书中习题,粗略地浏览一下 Python 之禅中的其他指导原则可选拓展学习用于获取变量类型的内置函数 type()了解数值运算的运算优先级及括号的用法了解位运算以及其他的数类型了解精度丢失及其原因69

Python 之禅中有一条:

> Although that way may not be obvious at first unless you're Dutch.

这里的“荷兰人”特指 Python 语言的创始人 Guido van Rossum,即 Python 之父。

意思是在 Python 语言中,有些解决方案可能对初学者来说不太明显,但对于有经验的 Python 开发者(特别是创始人)来说,就很容易知道哪个方法是最佳的。这也是在强调 Python 的设计哲学:简单、明确。

转义字符(反斜杠)