前言
我想到我之前学过半吊子的python爬虫课,我给重新回顾一下,学个几天速成一下。写这一篇文章主要是为了记录一下python的基础语法,方便以后重温,当然我这一篇文章只能是抛砖引玉,python的基础知识绝对不止这么些,很多用法我都没有列举出来,这篇文章就是带人快速入个门。
print()函数与变量
print()函数与变量
在python中,print()函数是最常用的输出函数,可以输出字符串、数字、变量等内容。
无引号
1 | print(1+1) |
这里的输出结果是2
单引号
如果是要输出字符串,就需要用引号括起来
1 | print('hello world') |
这里的输出结果是hello world
双引号
如果这个字符串内部就带了引号,那么就需要用双引号括起来
1 | print("I'm a student") |
这里的输出结果是I’m a student
三引号
如果是多行字符串,就需要用三引号括起来
1 | print('''hello |
这里的输出结果是
1 | hello |
多个print()函数不换行
如果想要多个print()函数不换行,可以在print()函数中加一个end参数
1 | print('hello',end='') |
这里的输出结果是helloworld,如果要俩个print()函数之间有空格,就可以这样写
1 | print('hello',end=' ') |
同理,其他间隔符也可以通过end参数来控制
注释
在python中,注释有两种方式,一种是单行注释,一种是多行注释。
单行注释
单行注释用#号
1 | # 这是一个单行注释 |
多行注释
多行注释用三个单引号或者三个双引号
1 | ''' |
转义符号
这里就简单贴一张图,大家了解一下就行
变量与赋值
1 | name='fake' |
这里的输出结果是codesigner
变量命名规范
这里我也贴一张图,大家可以自己看看,和其他语法是差不多的
数据类型与转换
数据类型
在python中,数据类型也非常简单,就三种,分别是整数(int)、浮点数(float)、字符串(str)
字符串
字符串就是用引号包裹起来的,可以是单引号、双引号、三引号
比如’hello’、”world”、’’’hello world’’’这种
整数
整数就是没有小数点的数字
比如数字0,1,2这种
浮点数
浮点数就是有小数点的数字
比如1.1,2.2这种
数据的应用
四则运算
这里我简单贴一张图,大家看一下就行
字符串的拼接
在python中,字符串的拼接使用+号
1 | a='hello' |
这里的输出结果是helloworld
占位符号打印
在python中,可以使用占位符号打印
1 | age=24 |
我们看到格式符%后面有一个字母s,这是一个类型码,用来控制数据显示的类型。%s就表示先占一个字符串类型的位置。%d就表示先占一个整数类型的位置。
也可以使用format()函数
format()函数用来占位的是大括号{},不用区分类型码(%+类型码)。
具体的语法是:’str.format()’,而不是课堂上提到的’str % ()’。
而且,它对后面数据的引用更灵活,不限次数,也可指定对应关系。
1 | age=24 |
数据类型的查询——type()函数
在python中,可以使用type()函数查询数据的类型
1 | a=1 |
这里的输出结果是<class ‘int’>
同理,如果是字符串类型的输出结果就会是<class ‘str’>,如果是浮点数类型的输出结果就会是<class ‘float’>
数据转换
str()函数
str()函数可以将其他类型的数据转换为字符串类型
1 | a=1 |
这里的输出结果是字符串的’1’和’1.1’
int()函数
int()函数可以将其他类型的数据转换为整数类型,但是只能转换浮点型的或者满足整数数字的字符串
1 | a='1' |
这里的输出结果是1
小数形式的字符串,由于Python的语法规则,也不能使用int()函数强制转换。
比如我们这里的代码:
1 | a='3.8' |
这里的输出结果是报错ValueError:invalid literal for int() with base 10: '3.8'
如果这里是浮点型的3.8
1 | a=3.8 |
这里的输出结果是3,int()函数处理浮点型的数字会自动取整,没有四舍五入,直接丢掉小数部分。
float()函数
float()函数也可以将整数和字符串转换为浮点类型。但同时,如果括号里面的数据是字符串类型,那这个数据一定得是数字形式。
1 | height = 188.0 |
这里的输出结果是188.0、180.0、89.0
类型转换总结
这里我贴一张图,大家看一下就行
条件判断与条件嵌套
条件判断
单向判断
单向判断:if代表什么呢?相传六颗宝石是宇宙中最强大的东西。如果一个人同时拥有六颗宝石,ta就可以实现包括毁灭宇宙在内的所有事情。
1 | # 为宝石数量赋值 |
这里唯一一个需要注意的点,需要缩进和冒号
对于Python而言,冒号和缩进是一种语法。它会帮助Python区分代码之间的层次,理解条件执行的逻辑及先后顺序。【注:缩进是四个空格或一个Tab键】
如果没有缩进,就会有这样的一个报错IndentationError: expected an indented block(缩进错误:期望一个缩进块)
双向判断
在Python,我们可以利用if的双向判断形式:if…else…去实现这个行动:当宝石数量还没达到6颗的时候,就需要继续找。
1 | # 赋值语句:为宝石数量赋值 |
这个也很好理解
多向判断
在Python中,我们可以利用if的多向判断形式:if…elif…else…去实现这个行动:当宝石数量还没达到5颗的时候,就需要继续找,到达5颗还没6颗就提示还差一颗。
1 | # 为宝石数量赋值 |
if嵌套
比如我们有这样一个例子
1 | 考试成绩评价规则: |
我们给出一个分数,然后进行判断
1 | historyscore=26 |
此时会依次打印出不及格,学渣,程序结束
嵌套逻辑图
嵌套的逻辑就如下图
条件判断总结
这里我贴一张图,大家看一下就行
input()函数
input()函数
input()函数的使用
input()函数是Python内置的函数,用于接收用户输入的内容。在Python中,input()函数的返回值是字符串类型。
1 | # 为变量name赋值 |
此时在控制台输入你的名字,然后回车,name就会接收到你输入的名字,此时你可以print(name)看看你输入的是什么,答案显而易见,就是你输入的名字。
input()函数的类型转换
比如以下这段代码,无论你输入了什么,他都会走到else里面去,包括你在控制台输入了1,这是为什么呢?
1 | choice = input('请输入您的选择:') |
这是因为,input()函数的返回值是字符串类型,而我们在if条件判断中,使用的是整数类型。因此,如果我们想要正常进行判断,那么就需要我们把choice==1改成choice==’1’,这样就可以正常判断了。
input()函数的类型强制转换
如果你确定输入的值肯定是整数数字,那么可以使用int()函数强制转换
1 | choice = int(input('请输入您的选择:')) |
input()函数的总结
这里我贴一张图,大家看一下就行
练习题
需求
这里有个练习题,大家可以自己试试看
1 | 将下面的对话,用代码表现出来。 |
代码
这里我给了我的代码,大家可以参考一下
1 | req1=input('您好,欢迎来到古灵阁,请问您需要帮助吗?需要or不需要?') |
列表和字典
列表
什么是列表
简单来说,就和我们前端理解的数组差不多,就是一个有序的集合,可以存储任意类型的数据。
比如我们这样定义一个列表
1 | list=['小明','小红','小刚'] |
列表提取单个值
这个我们的常见的是一样的,通过索引来取值,比如我们要取小明,那就是list[0]
列表提取多个值
这里,和我们平时接触的稍微有点不太一样
1 | list2 = [5,6,7,8,9] |
这里的冒号就是切片的意思,前面的数字是开始的索引,后面的数字是结束的索引,但是不包括结束的索引,和我们的slice和substring很像,这里有个口诀左右空,取到头;左要取,右不取
给列表增加删除元素
增加元素
错误的写法
1 | list=[1,2,3] |
此时会报错append() takes exactly one argument(2 given)
append后的括号里只能接受一个参数,但却给了两个,也就是4和5。所以,用append()给列表增加元素,每次只能增加一个元素。
正确的写法
1 | list=[1,2,3] |
这样就不会报错了
同时,append还可以直接加入一个列表
1 | list=[1,2,3] |
此时list的值就是[1,2,3,[4,5]]
删除元素
del list[索引] # 删除索引位置的元素
这个和我们的splice非常的像
1 | list=[1,2,3,4,5] |
这里的输出结果就是[1,2,4,5]
字典
什么是字典
字典是一种无序的数据集合,使用键-值(key-value)存储,和我们的Object对象差不多
比如我们这样定义一个字典
1 | scores = {'小明':95,'小红':90,'小刚':90} |
获取字典的长度
python有一个len()函数,可以获取列表、元组、字典等数据类型的长度。
1 | len(scores) |
获取字典的值
这个和我们的数组差不多,通过键来获取值
1 | scores = {'小明':95,'小红':90,'小刚':90} |
这时候得到的值是95
新增删除字典中的值
使用del关键字删除字典中的元素,然后使用键值对的形式新增元素
1 | album = {'周杰伦':'七里香','王力宏':'心中的日月'} |
这里简单拓展一下元组,元组和列表差不多,只是元组是不可变的,不能增加删除元素
1 | tuple1 = ('A','B') |
获取元组中的值和列表一样,通过索引来获取
1 | print(tuple1[0]) |
这里的输出结果就是A
for与while循环
for…in…循环
循环列表
这里给大家一个例子,注意细节,for循环后面的冒号和缩进
1 | for item in [1,2,3,4,5]: |
循环字典
此时,如果我们for循环的是一个字典
1 | scores = {'小明':95,'小红':90,'小刚':90} |
这里打印出来的是字典的键
如果想打印出来的值,只需要如下执行即可
1 | scores = {'小明':95,'小红':90,'小刚':90} |
循环字符串
1 | for char in 'hello': |
这里打印出来的是h e l l o
这里需要注意的是,for in循环不能用于整数和浮点数。
range()函数
对应次数
如果你是想执行对应次数,完全可以使用range()函数
1 | for i in range(3): |
这时候就会打印三次,我很棒,这个i如果你想用,他对应的值是0,1,2
指定范围
当然你也可以指定范围
1 | for i in range(13,17): |
此时的i就是13,14,15,16
限制步长
这里我限制了步长为2
1 | for i in range(1,10,2): |
这里的i就是1,3,5,7,9
我给大家整理出来一张图
while循环
举例
1 | a = 0 |
相信大家都可以理解,这里的输出结果就是1,2,3,4,5,主要是注意格式,while后面的冒号和缩进
while和for循环的区别
这里给大家贴一个图
小案例
需求
小明、小红、小刚是同班同学,且坐在同一排,分别坐在第一位、第二位、第三位。
由于他们的身高都差不多,所以,老师计划让他们三个轮流坐在第一位。
每次换座位的时候,第一位变第三位,后面两位都往前一位。
代码
1 | students = ['小明','小红','小刚'] |
需求
小美想要用今天学到的循环打印数字1-7,不过,她不喜欢4这个数字……
但是,今天的课堂她没有认真看,导致现在有点晕,不知道怎么写代码。
所以,请你运用课堂中出现的两种循环方式,为她展示下什么叫融会贯通。
这个练习呢,其实就一件事:打印数字。
在这件事的基础上加循环(控制打印范围)和条件判断(跳过4)。
下面,请你用不同的循环方式来帮小美实现“打印1-7,但是不要4”这个愿望。
代码
1 | # while 循环 |
布尔值和四种语句
用数据做判断:布尔值
两个数值做比较
1 | print(1>2) |
这里的输出结果就是False
我给大家看一下其他的比较运算符
直接数值做运算
1 | if 1: |
这里的输出结果就是True
这里我给大家看一下其他的数值判断是否为真假,这里有些可能和我们的预期不一样,比如空列表,空字典,这种在我们前端都是true,但是在python中是false
bool()函数
bool()函数可以将其他类型的数据转换为布尔类型
1 | print(bool(1)) |
这里的输出结果就是True,和我们前端的Boolean()函数差不多
布尔值之间的计算
在python中,有以下的布尔运算,and、or、not、in、not in
and和or
1 | a = 1 |
比如这里的输出结果就是False、True,因为and就相当于我们的&&,or就相当于我们的||
逻辑关系就是这样
not
接下来我们看看【not】运算。这个运算很简单,表示翻转的意思。not True就等于False,not False就等于True。
in和not in
这俩个运算符是用来判断一个元素是否在列表、元组、字典等数据类型中的。
1 | list = [1,2,3,4,5] |
这里的输出结果就是True、True
如果是用在字典就可以用来判断字典中是否存在某个【键】:
1 | dict = {'小明':95,'小红':90,'小刚':90} |
这里的输出结果就是True
四种语句
break语句
我们先来看看break语句。break的意思是“打破”,是用来结束循环的,一般写作if…break。它的写法长这样:
1 | # break语句搭配for循环 |
在这里,if…break的意思是如果满足了某一个条件,就提前结束循环。记住,这个只能在循环内部使用。
举个例子
1 | for i in range(10): |
这里的输出结果就是0,1,2,3,4,因为当i等于5的时候,就会提前结束循环
continue语句
continue的意思是“继续”。这个子句也是在循环内部使用的。当某个条件被满足的时候,触发continue语句,将跳过之后的代码,直接回到循环的开始。
它的写法是这样的:
1 | # continue语句搭配for循环 |
举个例子
1 | # 观察代码,然后运行代码看看是什么结果 |
pass语句
pass语句就非常简单了,它的英文意思是“跳过”。
1 | a = int(input('请输入一个整数:')) |
这里的意思就是,当输入的数字大于等于100的时候,就跳过,不做任何操作,否则就打印出来,如果不加pass,那么就会报错
else语句
最后一种else语句,我们在条件判断语句见过【else】,其实,else不但可以和if配合使用,它还能跟for循环和while循环配合使用。
1 | for i in range(5): |
所以,用一句话总结,当循环中没有碰到break语句,就会执行循环后面的else语句,否则就不会执行。
总结四种语句
这里我给大家整理了一张图
练习
需求
假设有两名囚徒A和B因为合伙犯罪被抓捕,因没有确凿可以指认罪行的证据,审判者准备单独审判两位囚徒。
若两人都认罪,则两人各判10年;若一个认罪一个抵赖,则认罪的人判1年,抵赖的人判20年;若两人都抵赖,则各判3年。
现在,请写个代码:当两人都抵赖时,打印判决,代码结束;若为其他结果,则在打印判决后继续循环。
代码
1 | while True: |
需求
上一个练习,我们将“囚徒困境”写成了代码,让程序收集两名囚犯的认罪情况,进而决定他们的判决:
两人都认罪,则各判10年;一个认罪一个抵赖,则前者判1年,后者判20年;两人都抵赖,各判3年。只有两人都不认罪,程序才会停止。
现在有一个社会学家,在不同的人群中做这个实验,一旦遇到都不认罪的情况,就停止该人群中的实验。
同时,他希望程序能记录每一对实验者的选择,以及记录第几对实验者都选择不认罪。请你帮帮他吧。
代码
1 | n = 0 |
需求
我很喜欢看电影,我回忆了一下,这两年我觉得还不错的国产电影。
下面,会将电影的影片名和主演放在字典里,如movie = {‘妖猫传’:[‘黄轩’,’染谷将太’]}。
需要你补充一些代码,让其他人只要输入演员名,就打印出:××出演了电影××。
代码
1 | movies = { |
函数
定义函数
1 | # 函数名:1. 名字最好能体现函数的功能,一般用小写字母和单下划线、数字等组合 |
调用函数
1 | a = math(10) |
此时的输出结果就是35
函数参数默认值
1 | def menu(appetizer, course, dessert = '绿豆沙'): |
此时的结果是
1 | 一份开胃菜:话梅花生 |
不定长参数
它的格式比较特殊,是一个星号*加上参数名,它的返回值也比较特殊,我们来看看下面的例子。
1 | def menu(*barbeque): |
我们可以看到,这里的输出结果是一个元组
1 | ('烤鸡翅', '烤茄子', '烤玉米') |
print函数
比如说我们最熟悉的print()函数,它完整的参数其实是长这样的:
1 | print(*objects, sep = ' ', end = '\n', file = sys.stdout, flush = False) |
可以看到第一个参数objects带了*号,为不定长参数——这也是为什么print()函数可以传递任意数量的参数。其余四个为默认参数,我们可以通过修改默认值来改变参数,对比一下下列代码的输出结果。
1 | print('金枪鱼', '三文鱼', '鲷鱼') |
结果是这样的
1 | 金枪鱼 三文鱼 鲷鱼 |
返回多个参数
这里引入了一个random模块,使用了random.choice()函数,它的作用是从一个列表中随机选择一个元素。
1 | import random |
这里当我们执行coupon(3)的时候,输出结果是拍黄瓜,当我们执行coupon(6)的时候,输出结果是(‘拍黄瓜’, ‘溏心蛋’),他是一个元组
当然我们返回的时候赋值的时候也可以分开接受参数,比如
1 | dish,egg=coupon(6) |
此时我们的dish就是拍黄瓜,egg就是溏心蛋
函数的嵌套
我们这里写了一个函数,然后sum_cost()函数需要使用cost()函数的变量,但其实这个函数是错误的,因为variable_cost
是一个局部变量,而不是像rent一样的全局变量
1 | rent = 3000 |
此时,如果我们想要是哟个cost中的variable_cost变量,我们可以这样写,添加一个global语句,让这个局部变量变成全局的
1 | rent = 3000 |
或者我们可以直接把cost()函数的返回值赋值给variable_cost
1 | rent = 3000 |
try…except…语句排除异常
1 | while True: |
类与对象
创建类
1 | # 类名首字母大写 |
类的调用
1 | # 创建实例 |
类传参
1 | class Chinese: |
那你可能会产生疑问了,这个self是干什么用的,其实self是指向类本身的,也就是说,self就是Chinese这个类,比如我们要获取name这个属性,我们可以这样写
1 | class Chinese: |
特殊方法-初始化方法
定义初始化方法的格式是def __init__(self)
,是由init加左右两边的【双】下划线组成( initialize “初始化”的缩写)。
初始化方法的作用在于:当每个实例对象创建时,该方法内的代码无须调用就会自动运行。
1 | class Chinese: |
类的继承
python中的继承是通过在类名后面的括号中写上父类的名字来实现的,下面这个例子就是子类Cantonese继承了父类Chinese
1 | class Chinese: |
isinstance()
具体用法是输入两个参数(第一个是实例,第二个是类或类组成的元组),输出是布尔值(True 或 False)可以用来判断某个实例是否属于某个类。
1 | print(isinstance(1,int)) |
答案是True、False、True
ok,我们用来判断一下类的继承
1 | class Chinese: |
答案是
1 | 验证1:子类创建的实例同时也属于父类 |
整理关系图
类的多层继承和多重继承
多层继承例子
1 | class Earthman: |
多重继承例子
1 | class Su: |
类的定制
就是我们常见的子类继承父类,然后在子类中添加一些属性和方法
1 | class Chinese: |
类的重写
子类继承父类,然后对父类的方法进行重写
1 | class Chinese: |
这里一般都有优雅一点的写法
1 | class Chinese: |
案例
需求
下面,请你通过参数默认值的改变,完成子类的定制,让程序的运行结果为“雷猴!欢迎来到广东。
1 | class Chinese: |
实现
1 | class Chinese: |
到这里,我们就简单了解了python的一些基础语法。
结语
本篇文章主要是对python的一些基础语法的简单介绍,相对而言还是比较简单的,希望对大家学习或工作有所帮助。