今天对 Python 的知识框架做梳理。
这会帮助你在脑内搭起知识的框架,将学到的零散知识组织起来。
此外,我们会学习字符串的进阶知识,及 Python 的内置函数。
其中字符串的格式化及后面会讲到的 input() 函数都是重点。
1.Python 核心知识框架
Python 的核心知识板块包括:数据类型,控制流,函数,模块,类。
每个板块都有不同的知识,它们具备不同的特性。
这几个板块具体指什么,包含什么知识呢?依次来看一下。
首先,数据类型:程序本质上是在操作和处理数据,所以 Python 中所有数据都属于某种数据类型。
像整数、浮点数、字符串就是 Python 中常见的数据类型。
在这一板块我们需要理解不同数据类型的概念、特性以及它们支持的操作。
然后是控制流
。
顾名思义,控制流的功能是控制程序的执行流程、代码的运行顺序,包含多种结构,如:顺序结构,分支结构,循环结构。
在程序中,我们称这些不同的程序结构为控制流,接下来的课程中,我也会为你逐一讲解这些程序结构。
再来看函数
、模块
和类
。
有些代码不止可以解决某一特定问题,还可以解决一类相似的问题,这时候,需要把代码打包起来,以便后续解决同类问题时可以直接使用。
而 Python 中的函数
、模块
和类
就可以实现代码打包,让代码重复使用。
咱们一个个拆开来讲。
函数
是打包好的一个功能,例如,print() 函数是一个可以直接使用的函数;
模块
里通常包含一系列相关功能,导入模块就可以使用模块里的功能,例如,os 模块是一个常用于文件目录“打交道”的模块;
类
则是另一种打包代码的方式。
简单来说,数据类型
讲各种数据,控制流
讲程序执行的顺序。
函数
、模块
和类
的共同点是,将代码打包起来,以便重复使用。
接下来,咱们通过一段简单的代码,体会一下数据类型、控制流、函数在程序中的应用。
有些知识还不懂是正常的,因为你还没有学到,重要是体验。
fruits = ['西瓜', '桃子', '香蕉']
for i in fruits:
print('我喜欢吃:' + i)
print('我喜欢吃水果。')
代码解析
第 1 行代码用到的知识是数据类型
和变量赋值,来看右侧代码👉:
['西瓜', '桃子', '香蕉']
是一个列表,列表中的'西瓜'
,'桃子'
,'香蕉'
都是字符串。
数据类型不止出现在这一行,比如,我喜欢吃:
也是一个字符串。
这里第 2,3 行代码用到了控制流
👉:
这个循环语句会重复执行三次。通过循环,可以将列表中的每个元素依次取出来。
每一个元素是一个字符串,可以和'我喜欢吃:
这个字符串进行拼接。
第 3,4 行代码用到了函数
👉:
第 3 行的 print() 函数从属于循环语句,每循环一次,都打印输出字符串拼接的结果;
第 4 行的 print() 函数在循环控制流外部,只执行一次,打印输出一个字符串。
这里没有展示模块和类的使用,你可以回忆一下 os 模块的使用,也可以期待一下类的使用。
运行下面的代码,观察结果。可以想想你之前写过的代码中,哪些部分用到了数据类型、控制流、函数、模块,以及它们如何合作得到最终结果。
如上面展示的,在 Python 程序中,数据类型通常是必要的,函数在各种简单的代码中也很常见。
控制流在需要重复执行或做分支选择时起到了重要作用。只有各个板块结合,才能完成其功能。
通常在解决实际问题时需要使用模块和类,这是不可或缺的。
Python 的核心知识框架包括数据类型、控制流、函数、模块和类五个板块。
只有当你能够在记忆中想起Python的框架,并且能够回忆起框架中每个板块的核心知识点、用法和示例,才能算是对Python学习有些基础。
2.input() 函数
今天我们要学习一个内置函数:input() 函数,它将用于获取你从终端中输入的内容。
有同学可能会问了,内置函数是什么呢?
很简单,内置函数通常指 Python 自带的函数,安装 Python 后可以直接使用,使用方式:函数名(参数)
。例如,你的老朋友:print() 函数。
2.1 从终端获取输入
回到 input() 函数中来,input() 函数的语法是 input('提示性文字')
。
提示性文字可选,是字符串形式,用来提示输入什么。
程序运行到 input() 函数时,终端会出现光标提示用户输入内容,此时需要在终端输入内容,再按回车结束输入。
光这样说有点干巴巴的,咱们直接来看下面的代码。
先体验一下没有提示语的 input() 函数 :
再体验一下有提示语的 input() 函数:
这里我输入的是123。
输入到终端的内容,会被 input() 函数获取。为了后续能够使用输入的内容,通常需要将 input() 函数的结果赋值给一个变量,语法是:变量 = input('提示性文字')
。
举个例子,我最近给自己制定了一个读书计划,坚持每天打卡,我使用 input() 函数来获取从键盘输入的天数。
代码如下,阅读代码,不用修改,直接在本地运行:
# 在终端收集读书的天数
days = input('读书打卡,请输入今天是读书第几天:')
print(days)
2.2 input() 函数的结果:字符串
input() 函数规定了结果的数据类型:字符串。
也就是说,使用 input() 函数时,无论你在终端输入的内容是什么,被 input() 函数获取后,最终得到的结果都是字符串类型。
例如,在终端用键盘输入 1,input() 函数的结果是字符串 ‘1’。
3.type()
3.1 用 type() 获取数据类型
type() 可以用于获取数据的数据类型,适用于任何数据。
在语法上是type(数据)
,使用时,需要把数据作为 type() 的参数放到括号中,一次可以获取一个数据的类型。例如 type('Hello world!')
,type(12)
具体是什么效果呢?先看一段代码,本地运行,对比查看代码和运行结果。
# 字符串
print('---获取字符串的数据类型:---')
print(type('Hello world!'))
# 整数
print('---获取整数的数据类型:---')
print(type(2020))
# 浮点数
print('---获取浮点数的数据类型:---')
print(type(3.14))
# 列表
print('---获取列表的数据类型:---')
print(type([1, 2, 3, 4]))
从终端的显示可见,显示的结果分别是:<class 'str'>
,<class 'int'>
, <class 'float'>
和 <class 'list'>
。
'str'
代表字符串,是英文 string
的缩写。'int'
代表整数,'float'
代表浮点数,'list'
代表列表。
这样,通过打印 type() 返回的结果即可得到对应的数据类型结果。
3.2 类型为何重要?
因为不同数据类型会支持不同的操作。
每个数据从生成开始,Python 就给它贴了个“标签”,这就是数据的类型。
数据类型最重要的意义其实是规定了数据支持的运算、方法以及其他操作。
使用 type() 获取数据的数据类型时,其实是给我们人类看 Python 给这个数据贴了哪个标签:整数 'int'
,浮点数 'float'
,字符串 'str'
等等。
以字符串为例,字符串本质是一种文本数据。
Python 给数据贴上 ‘str’ 标签,就意味着它只能是一个文本,而不会同时是一个数字。
所以即使 ‘1’,‘2’,‘3’ 这样看起来是数字的数据,也不能进行数值运算。
举个例子,我最近在读一本书,共 289 页,每天读 9 页。
我想写个简单的程序,输入读书天数,就能计算出还剩多少页没读。
如果直接做运算,写出的代码直接运行会报错。
# 在终端收集读书的天数
days = input('读书的天数:')
# 计算剩余未读完的页数
pages = 289 - 9*days
# 把剩余的页数打印出来
print(pages)
因为数字(整数、浮点数)才能做数值运算,而字符串是不可以的。
为了能计算,读书天数 days 的数据类型应该是整数,那这怎么办呢?
好在满足实际需求这方面,Python 总不会让人失望,Python 提供了一种功能:数据类型转换。
4.数据类型转换
像前面的例子一样,由于不同的数据类型支持不同的操作,有时候,我们输入数据的数据类型并不能直接使用,那么就需要先进行类型转换。
今天我们要学习的是将数据转换为整数、浮点数、字符串的三种类型转换,分别是:int()、float() 和 str()。
int 表示整数,float 表示浮点数,str 表示字符串。int(),float(),str() 可以将数据转换为对应的数据类型。
这个过程就像手动复制一个数据,给它贴上新标签。
4.1 int()
int() 可以将浮点数,或者整数样子的字符串转换为整数。如 int(3.14)
的结果是3
,int('2020')
是2020
。
可以看到,用 int() 转换浮点数时,它会直接舍弃小数点之后的内容。
眼见为实,咱们也运行一段代码看看~
print('---浮点数3.14转整数:---')
# 浮点数转整数
num_1 = int(3.14)
print(num_1)
print(type(num_1))
print("---字符串'2020'转整数:---")
# 字符串转整数
num_2 = int('2020')
print(num_2)
print(type(num_2))
这里要记住:浮点数样子的字符串(例如 ‘3.14’)不可以
被 int()直接转化为整数。
4.2 float()
float() 可以将整数,或者数字(整数、浮点数)样子的字符串转化为浮点数。
例如 float(3)
可以得到3.0
,float('3.14')
可以得到3.14
。
print('---整数21转浮点数:---')
# 整数转浮点数
num_1 = float(21)
print(num_1)
print(type(num_1))
print("---字符串'3.14'转浮点数:---")
# 字符串转浮点数
num_2 =float('3.14')
print(num_2)
print(type(num_2))
print("---字符串'5'转浮点数:---")
# 字符串转浮点数
num_3 =float('5')
print(num_3)
print(type(num_3))
4.3 str()
str() 就厉害了,几乎能将其他任何类型的数据转化为字符串。
如 str(3)
可以得到'3'
,str(3.14)
可以得到'3.14'
,str([1,2,3,4])
可以得到'[1,2,3,4]'
。
print('---浮点数3.14转字符串:---')
# 浮点数转字符串
string_1 = str(3.14)
print(string_1)
print(type(string_1))
print('---列表[1, 2, 3, 4]转字符串:---')
# 列表转字符串
string_2 = str([1, 2, 3, 4])
print(string_2)
print(type(string_2))
5.字符串的进阶操作
程序在处理数据后,通常需要输出结果。例如,用 print() 函数在终端输出内容。
使用 print() 时,如果同时有文本信息和变量需要打印,那就可以用字符串拼接的方法来输出。
回到读书计划的例子中来。
如果通过计算后,想要在终端显示【这本书剩余未读页数:xx 页】,可以写成下面的代码。
# 在终端收集读书的天数
days = int(input('读书打卡,读书的天数:'))
# 计算剩余未读完的页数
pages = 289 - 9*days
# 把剩余的页数打印出来
print('这本书剩余未读页数:' + str(pages) + ' 页')
就像 input() 得到的字符串不能做数值计算,整数也不能和字符串拼接,因此,我用了 str() 帮忙将 pages 转换为字符串。
转换成字符串的 pages 才可以和前后的字符串拼接起来打印。
现在我们将学习一种更符合人类读写习惯的操作,它可以实现在字符串中嵌套其他内容而无需进行数据类型转换。我们称之为字符串格式化的是一种字符串操作。
5.1 字符串格式化:format()
对字符串进行格式化是在字符串中嵌入其他内容的一种操作,并需要按照指定的语法格式来书写。
学习了这种方法后,你会发现使用字符串格式化比先进行类型转换再拼接更易读。
字符串的格式化操作有几种不同方法,今天我们就学习其中一种:format()。
format() 的使用需要紧跟着字符串,写法是 str.format()。这种写法表示 format() 是字符串的一个功能(str 在这里指一个具体的字符串)。
我们通过一段代码来更直观地看看它是如何使用的:
# 第一种用法
print('今天是星期{},气温 {} 度。'.format('五', 9))
# 第二种用法
print('{name}今年 {age} 岁。'.format(name='知枫', age=21))
上述两种都是用 format() 格式化字符串的语法。
用 format() 格式化的字符串包含着以花括号 {} 括起来的“替换字段”,如上述代码中的{}
,{name}
和{age}
都是替换字段。
程序执行时,替换字段会被 format() 参数的值替换。
第一种用法:花括号{}
中没有内容,如果字符串中有多对花括号,format() 的参数会按照 {} 的位置顺序分别替换。
第二种用法:花括号{}
中填入字符,如{name}
,name 就像替换字段的标识,format() 按照标识,用值替换对应的替换字段。
需要注意的是,替换字段的“标识”应该是有意义的内容,这样做的好处是即使不看替换后的内容,也能大致理解字符串表达的意思。
注意,这里format()内参数的值可以是任意类型,这和字符串拼接不同。
例如,上面例子中使用9
和age=21
作为参数,此时参数的值是整数,在格式化时,并不用事先转换为字符串。
然后我们来看几个不同的字符串格式化案例
print('知枫本月话费余额{}元'.format(20))
print('{owner}的猫名字叫{pet}'.format(owner='月娜', pet='潘潘'))
print('体温计显示的结果是{}度'.format(36.5))
5.2 转义字符:\n
除了要注意代码本身的可读性之外,我们也别忘了输出的结果同样需要有好的阅读体验。
在 Python 中,字符串还能用“转义字符”实现换行:单行代码,多行输出。
转义字符是什么呢?
转义字符是一种有特殊功能的字符组合,以反斜杠 \
开头,后面跟一个或几个字符。
转义字符具有特定的含义,不同于字符原有的意义,故称“转义”字符。
例如 \n
,n 在转义之前是字符 n,转义之后 \n
变成了 newline,表示换行。
Python 中,在字符串中加入转义字符可以实现特殊控制功能(如换行符 \n
、制表符 \t
等转义字符能产生键盘上回车键、tab 键的效果)。
另一方面,转义字符还可以将一些功能字符转义为普通文本,如(单引号 \'
,加上反斜杠后,则不会被识别为字符串的边界)。
常用的转义字符有:\n
换行,\r
回车,\\
反斜杠符号,\'
单引号,\"
双引号,\t
横向制表符 tab。
对于这些转义字符,不用背诵,只要有个印象就可以~
当然了,讲了这么多,我们还是需要看一下在程序中的实际效果。
print('小白兔,\n白又白。\n两只耳朵竖\t起来。')
print('爱吃萝卜,\n爱吃菜。')
print('\'知枫\'觉得上面的儿歌很\"有趣\"。')
ok,看完效果后,我们仔细认识一下\n
。
换行符\n
是最常用的转义字符之一。有了换行符,输入和输出时,终端显示就可以更清晰友好。
\n
在 Python 中是一个字符串,如果单独写就是 ‘\n’。这里的 ‘\’ 是一个字符,‘n’ 也是一个字符,但是 ‘\n’ 是转义字符,打印该字符不显示 ‘\n’,而是执行换行的功能。我们通常会将**\n
**写在一个需要换行的字符串中。
当打印字符串遇到\n
,会重起一行再继续打印\n
之后的内容。
例如上面代码的例子,print('小白兔,\n白又白。')
就能打印出’小白兔,(换行)白又白。'的效果。
注意,\n
的斜杠是反斜杠,反斜杠是向左倾斜的,和除法的正斜杠(向右倾斜)要区分开。
6. 知识总结
本节我们学到的知识和技能有:
1)字符串的格式化操作 str.format(),转义字符(换行符 \n
)的用法;
2)用 int()、float()、str() 进行类型转换;
3)用 type() 获取数据的类型;
4)使用 input() 函数从终端获取键盘输入的内容,得到字符串的结果。
注意啦,本关卡的重点是 str.format() 和 input() 函数,下面我们再巩固一下这两个知识点。
str.format()
format() 是一种字符串格式化操作,它有两种用法。
第一种用法:‘今天是星期{},气温 {} 度。’.format(‘五’, 9)
第二种用法:‘{name}今年{age}岁’.format(name=‘知枫’, age=21)
input()
语法:变量名 = input(‘提示性文字’)
注意:无论输入什么,input() 得到的结果都是字符串。
使用 input() 时通常将结果赋值给一个变量,提示文字可省略,但有提示会更友好。