文章目录
- 📚基础语法
- 🐇输入和输出
- 🥕`print()`输出
- 🥕`input()`输入
- 🐇 变量的命名
- 🐇条件判断
- 🥕单向判断
- 🥕双向判断
- 🥕多向判断
- 🥕if嵌套
- 🥕三元表达式
- 🐇和或非
- 📚数据类型
- 🐇数据类型
- 🐇类型转换
- 🐇四则运算
- 🐇数据的常用语法
- 🥕列表语法
- 👀列表特点
- 👀列表的操作
- 🥕字符串语法
- 🥕字典语法
- 🥕布尔值相关
- 📚循环
- 🐇for循环
- 🐇while循环
- 🐇while循环和for循环比较
- 🐇循环进阶
- 📚函数
- 🐇函数定义的语法
- 🥕参数的类型
- 🥕变量作用域
- 📚类与对象
- 🐇类的创建
- 🐇类的继承
- 📚模块
- 🐇模块类型
- 🥕内置模块
- 🐇模块和模块对象导入方法
- 🥕程序入口
👀说在前面:
python基础语法对照着C学,大体思想和方法都大差不差,但要关注python和C在表达上的不同点,即那些语法规则细节上的差异点
📚基础语法
🐇输入和输出
🥕print()输出
- 第一种: 不带引号,让计算机读懂括号里的内容,打印最终的结果
print(1+1),输出2
- 第二种:带单引号,计算机无须理解,原样复述引号中的内容(双引号和单引号作用一样,一般使用英文单引号)
print('秋水共长天一色'),输出秋水共长天一色
- 第三种:带三引号,实现换行用来包裹多行文本,按照原样打印出来
- 转义字符:当要打印的东西本身具有单引号——不需要被解析的引号面前加上反斜杠
\'表示一个单引号,\"表示一个双引号\a响铃(BEL)
\b退格(BS),将当前位置移到前一列
\f换页(FF),将当前位置移到下页开头
\n换行(LF),将当前位置移到下一行开头
\r回车(CR),将当前位置移到本行开头
\t水平制表(HT) (跳到下一个TAB位置)
\v垂直制表(VT)
\\代表一个反斜杠字符""
\'代表一个单引号(撇号)字符
\"代表一个双引号字符
\?代表一个问号
\0空字符(NUL)
\ddd1到3位八进制所代表的任意字符
\xhh1到2位十六进制所代表的任意字符
🥕input()输入
🐇 变量的命名
- 只能是一个词;
- 只能包含字母、数字和下划线;
- 不能以数字开头;
- 尽量描述包含的数据内容;
- 不要使用python函数名和关键字。
🐇条件判断
🥕单向判断
如果条件成立,就执行语句
number = 6
if number > 3:
pirnt(number)
注意格式!
- if后面要加冒号,判断条件不用括号。
- 同时执行语句要缩进!
🥕双向判断
if…else… 条件成立执行if语句 ,否则执行else语句
🥕多向判断
多选一,让计算机最先判断最难满足的条件,if…elif…else 三个及其以上条件的判断
grade = 65
if 80 <= grade <=100:
print('成绩优秀')
elif 60 <= grade < 80:
print('成绩中等')
else :
print('成绩差')
if…else…和if…if…的区别
- if…else…一个条件满足后就不会进行其他判断(if代表的条件和else代表的条件是互斥的)
- if…if…会遍历所有条件,一个条件无论满足还是不满足,都会进行下一个条件的判断
🥕if嵌套
使用if进行条件判断 ,还希望在条件成立的执行语句中再增加条件判断 ,即if中还有if ,这两个if非平级(缩进超级重要)
🥕三元表达式
X = Y if 条件 else Z,条件为真为Y,为假为Z
🐇和或非
- 和:
and,或:or,非:~
📚数据类型
🐇数据类型
- 字符串str:用引号括起来的文本(如:‘python’、‘123’)
- 整数int:不带小数点的数字(如:-1、1、0、520、1314)
- 浮点数float:带小数点的数字,运算结果存在误差(如:-0.15、3.1415、1.0)
- 列表list:是一种有序的集合,可以随时增加或删除其中的元素。标识是中括号
[]。 - 元组tuple:一种类似列表的数据类型,但是不能被修改。
- 字典dict:全称为dictionary,使用键值对(key-value)作为存储方式。标识是大括号
{}。- 字典中的键需要是唯一的,如果字典中有两个相同的 键,Python 只会保留后面那个。而值则没有限制,可以是任意类型的,也可以有相同的值。
- 布尔值bool:表示真假的数据类型,只有两个值,True和False。
type()函数判类型len()用于检查某个数据长度- 可变类型与不可变类型
🐇类型转换
str()、float()、int()、list( )
- 不能将字符串和整数相联加——常用到数据类型转换
- input本身都是字符串——常用到数据类型转换,
score=int(input('输入分数:')) - 任何类型都可以转换为字符串
- 不是所有都能转换成整数/浮点数示例举例
- 文本类字符串和浮点形式的字符串不能转化为整数
- 文字类型字符串无法转换为浮点数
- 浮点数转化为整型是对浮点数直接抹零取整。
- list() :将数据转换为列表类型
[‘p’, ‘y’, ‘t’, ‘h’, ‘o’, ‘n’, ‘基’, ‘础’]a = 'python基础' print(list(a))
🐇四则运算

运算优先级:从左到右顺着来,括号里的优先算,乘除排在加减前。
🐇数据的常用语法
🥕列表语法
👀列表特点
- 项目之间有先后顺序
- 列表内容可以编辑
- 可记录的项目各式各样
- 示例:
students=[A, B, C, D]- 一般推荐逗号与下一个元素之间加一个空格
- 在实际写代码的过程中,统一段代码不要出现函数名和列表名相同的情况,不然会报错。
👀列表的操作
对列表元素的处理
-
⚠️由索引取元素
- 正向索引
print(students[2]),列表中正向索引是从0开始数的 - 反向索引
print(students[-1]),反向索引倒数几个从-1开始数
- 正向索引
-
⚠️查列表元素索引:
列表.index(元素内容),关注从0开始索引 -
⚠️列表元素的修改:
列表[索引] = 新值 -
⚠️列表元素的添加
- ⭐️直接添加(默认在列表末尾添加):
列表.append(元素)- 用append时不能对列表赋值,以下输出None,第二行语法错误
list = ['松','竹'] list = list.append('梅') print(list) - append不能一次添加多个元素,以下TypeError: append() takes exactly one argument (2given)
ist = ['松','竹'] list.append('梅','岁寒三友') print(list)
- 用append时不能对列表赋值,以下输出None,第二行语法错误
- ⭐️在列表中间某个位置插入一个元素:
列表.insert(9,元素),即在第10位插入B,此时排在插入值后的索引值自动+1
- ⭐️直接添加(默认在列表末尾添加):
-
⚠️列表元素的删除
- ⭐️
列表.pop(索引):如果不填索引就默认为最后一个,pop删除会显示删除的具体值。
以students=[A, B, C, D]为例,例:
punished=students.pop(1),输出 punished=B- ⭐️
del列表[索引]:这里的删除不会显示被删的具体值- 每次只能删除一个元素
- 连续删除多个元素是,记得重新计算偏移值
[‘竹’, ‘梅’]list = ['松','竹','梅'] del list[0] print(list) del list[0] print(list)
[‘梅’] - ⭐️
列表.remove(值):在列表中找到的第一个指定的值,然后将它删除
- ⭐️
-
⚠️列表的分片:列表层面的提取,一次提取若干个元素,提出来的是列表
列表[起始索引:结束索引]例:若要获取第三到第五个元素,应为列表[2,5]- 若是从头开始,则可写为
列表[:3],同理最后可为列表[10:],也可用反向索引列表[-4:] - 列表分片必须用整数而不可以用浮点数,因此和/运算符相关的要把结果转化为整数
对列表的处理
-
⚠️列表的修改(同样是使用赋值语句,注意是对列表的赋值)
list = ['松','竹','梅'] list[:] = ['岁寒三友'] print(list)[‘岁寒三友’]
list = ['松','竹','梅'] list[:] = '岁寒三友' print(list)[‘岁’, ‘寒’, ‘三’, ‘友’]
-
⚠️统计列表中某元素出现的次数:
列表.count(元素) -
⚠️排序:
列表.sort()字符串列表默认按首字母排列,数值列表默认是从小到大排列 -
⚠️反转:
列表.reverse -
⚠️复制:
列表.copy()若直接A=B,不是复制,只不过是给列表改了个名字 -
⚠️清空:
列表.clear() -
⚠️列表的删除:
del 列表[分片] -
⚠️列表的增加 (列表的增加叫作列表的合并会更合理), 使用符号’+’
- 符号’+'只能用在列表之间,不能用在列表和元素之间
- 顺序:在加号前的元素排在新列表的前面
-
⚠️列表的乘法
列表*n:实质即为加了几次
列表的拓展操作
- ⚠️
zip(列表1,列表2):将两个长度相同的列表合并起来,对应位置完成合并,组队变成元组 - ⚠️
enumerate(列表,1):枚举功能,默认从1开始

- 上述两个操作所形成的的均为元组
- 元组:用圆括号包裹,元组里的元素不可以增改删但可以查询和分片和加法乘法。
- 只有一个元素的元组,在格式上与列表不同,写为(x ,)
元组和列表的互换- 元组→列表:
list(元组) - 列表→元组:
tuple(列表)
- 元组→列表:
- 所以上述两个拓展操作两者返回对象再用
list()转换为二维列表- 二维列表:通用格式:
列表名[行数-1][列数-1]
- 二维列表:通用格式:
🥕字符串语法
- 字符串的索引和分片规则均与列表同,分片范围超出总长度不会报错,但索引取值(print(string[100000])这种形式)超出范围会报错。
- 可以把字符串想象成一根绳子,分片就是用刀将绳子切分开来。在字符串长度内分片相当于在绳子上切割,而超出范围相当于一刀砍到了空气,对于绳子来说没有影响。
- 字符串的不可变性
- 字符串一旦创建后是不可以改变的,这个属性和元组类似,通过索引来改变字符串中的元素就会报错
- 想要修改字符串内容可
使用字符串分片和拼接去生成一个新的字符串
大小写互换

分割、组合与移除

定位与替换

字符串格式化输出
-
常见的占位符:
%d整数,%f浮点数,%s字符串:%s是万能的,它会把任何数据类型转换为字符串,%x十六进制整数
-
format()方法使用{}作为占位符,然后按照参数顺序替换对应的占位符。

- 我们还可以给占位符命名,命名后参数顺序不再重要

- 我们还可以给占位符命名,命名后参数顺序不再重要
🥕字典语法
字典数据的提取
列表使用偏移量来提取,字典使用键来提取
group = {'师父':'唐三藏', '大师兄':'孙行者', '二师兄':'猪八戒', '沙师弟':'沙和尚'}
print(group['师父'])
唐三藏
字典数据的修改
group = {'师父':'唐三藏', '大师兄':'孙行者', '二师兄':'猪八戒', '沙师弟':'沙和尚'}
group['师父']='唐玄奘'
print(group)
{‘师父’: ‘唐玄奘’, ‘大师兄’: ‘孙行者’, ‘二师兄’: ‘猪八戒’, ‘沙师弟’: ‘沙和尚’}
字典数据的添加
group = {'师父':'唐三藏', '大师兄':'孙行者', '二师兄':'猪八戒', '沙师弟':'沙和尚'}
group['白龙马']='敖烈'
print(group)
{‘师父’: ‘唐三藏’, ‘大师兄’: ‘孙行者’, ‘二师兄’: ‘猪八戒’, ‘沙师弟’: ‘沙和尚’, ‘白龙马’: ‘敖烈’}
字典数据的删除
group = {'师父':'唐三藏', '大师兄':'孙行者', '二师兄':'猪八戒', '沙师弟':'沙和尚'}
del group['师父']
print(group)
{‘大师兄’: ‘孙行者’, ‘二师兄’: ‘猪八戒’, ‘沙师弟’: ‘沙和尚’}
提取字典中所有的键dict.keys()
提出来的键是元组形式应该用list转化为列表
group = {'师父':'唐三藏', '大师兄':'孙行者', '二师兄':'猪八戒', '沙师弟':'沙和尚'}
print(group.keys())
#dict_keys(['师父', '大师兄', '二师兄', '沙师弟'])
#打印出了所有字典的键,但是都是元组的形式
group = {'师父':'唐三藏', '大师兄':'孙行者', '二师兄':'猪八戒', '沙师弟':'沙和尚'}
print(list(group.keys()))
#['师父', '大师兄', '二师兄', '沙师弟']
提取字典中所有的键值对dict.items()
group = {'师父':'唐三藏', '大师兄':'孙行者', '二师兄':'猪八戒', '沙师弟':'沙和尚'}
print(group.items())
dict_items([(‘师父’, ‘唐三藏’), (‘大师兄’, ‘孙行者’),(‘二师兄’, ‘猪八戒’), (‘沙师弟’, ‘沙和尚’)])
通过键获取字典对应的值dict.get('键','*')
当键不存在时,不会报错,而是默认返回none,也可以通过第二个参数设置不存在时的默认返回值。
🥕布尔值相关
- bool() 检查数值的真假
| 假 | 真 |
|---|---|
| 0 | 任意整数/浮点数 |
| ‘’(空字符串) | ‘嘿嘿’(字符串) |
| [](空列表) | [1,2,3] |
| {}(字典) | {1:‘a’,2:‘b’} |
| None |
- if自动进行布尔类型转换
- 比较运算符产生布尔值
- 成员运算符产生布尔值
in属于 ,如果值在指定序列里,条件为真not in不属于, 如果值不在指定序列里,条件为真- 例:
print('He'in'Hello'),True
- 逻辑运算符产生布尔值
and且 连接两个布尔值,如果两个都为真,该条件才为真or或 连接两个布尔值,如果有一个为真,该条件即为真not非 反逻辑状态,a为True,not a则为False,反之亦然
📚循环
和C思想都一样,就是语法上有一点差别
🐇for循环

-
for…in range():处理指定次数的循环

-
列表生成式:
y = [表达式 for x in range(A,B) if 条件]y = [] for x in range(1,11): if x%2 == 1: y.append(x*x) print(y)就等价于
y = [ x*x for x in range(1,11) if x%2 == 1] -
zip函数+for循环
# 客人编号 ids = [1, 2, 3] # 客人名字 names = ['派大星', '章鱼哥', '珊迪'] # 遍历按编号、名字顺序组合起来的数据 for id, name in zip(ids, names): print(str(id) + '号:' + name) ''' 输出: 1号:派大星 2号:章鱼哥 3号:珊迪 ''' -
enumerate函数+for循环
# 等待就餐的客人列表 names = ['派大星', '章鱼哥', '珊迪'] # 遍历按序号、名字组合起来的数据 for id, name in enumerate(names, 1): print(str(id) + '号:' + name) ''' 输出: 1号:派大星 2号:章鱼哥 3号:珊迪 '''
🐇while循环

- 当条件为真时,执行循环语句,只要条件为真,便会一直循环
- 在编程中,一个靠自身控制无法终止的程序称为 死循环。为了避免写出死循环,我们要保证循环条件最终可以变为 False。进入死循环,按Ctrl+C及时终止
🐇while循环和for循环比较
- for擅长处理固定次,自动遍历各序列
- while处理不定次数的循环,条件为False便停止
🐇循环进阶
-
break如果满足条件,则结束循环# 店里现在还剩 3 份食材 left = 3 for i in range(1, 6): print('为第' + str(i) + '位客人做一份蟹黄堡') left -= 1 if left == 0: break print('食材没有了,明天再来吧') ''' 输出: 为第1位客人做一份蟹黄堡 为第2位客人做一份蟹黄堡 为第3位客人做一份蟹黄堡 食材没有了,明天再来吧 ''' -
continue如果满足条件,则跳过当前循环的剩余语句,直接开始下一轮循环# 建立一个列表,储存客人的名字 names = ['泡芙老师', '珊迪', '痞老板', '章鱼哥'] for name in names: if name == '痞老板': print('海绵宝宝拒绝给痞老板做蟹黄堡') continue print('给' + name + '做一份蟹黄堡') ''' 输出: 为泡芙老师做一份蟹黄堡 为珊迪做一份蟹黄堡 海绵宝宝拒绝给痞老板做蟹黄堡 为章鱼哥做一份蟹黄堡 ''' -
循环嵌套:即循环中有循环
📚函数
- 函数是组织好的、可以重复使用的、用来实现单一功能的代码
- 函数类型可分为自定义函数和内置函数,自定义函数是需要自己定义,而内置函数是python内部已经定义好的函数,比如print()、input()等
🐇函数定义的语法

def circle(r):
c = 2 * 3.14 * r
# 先打印计算结果
print('该圆的周长是' + str(c))
# 函数体最后一行加上 return 语句
return c
result = circle(2)
print(result)
🥕参数的类型
-
位置参数:调用的时候直接以一个量对应函数形参的相应位置,因此位置不能随意更换

-
关键字参数:调用的时候,在那个量之前加上称号,相当于给那个量标了名字。即按参数名 = 值的格式传入参数

-
默认参数:为了减少重复输入

-
不同参数之间的规则
- Python 在解析参数时,是优先考虑 位置参数 的,所以位置参数一定要放在关键字参数之前。
- 默认参数一定要放在最后面
🥕变量作用域
-
局部变量:只能函数内或者一定代码块内生效
-
全局变量:在全局内生效的变量
global:将局部变量转化为局部变量- python内置函数
-
如果局部变量和全局变量的名称相同,那函数内部会有限访问局部变量,外部会访问全局变量。
school = '双叶幼儿园' def welcome(): school = '春日部幼儿园' print('欢迎来到' + school) welcome() # 访问的 school 是函数内的局部变量 # 输出:欢迎来到春日部幼儿园 print('欢迎来到' + school) # 访问的 school 是全局变量 # 输出:欢迎来到双叶幼儿园
-
但加了global的局部变量会自动取代它之前定义的全局变量并一直沿用下去。
📚类与对象
- 类:具有相同属性和方法的对象的抽象 实例:类的个例
- 对象:Python中的对象是类和实例的集合,类可以看作是对象,实例也可以看作是对象
🐇类的创建

- 定义类之后,首先要把类实例化,再通过
实例名.属性名和实例名.方法名()来调用类的属性和方法。 - 定义类的方法时,self 用来代表类创建的实例,千万别忘了它;
- 如果要在方法内部调用类的其他方法和属性,也要成
self.属性名或self.方法名()才不会报错。 - 定义类的方法时,第一个参数 self 不能丢,调用方法时要忽略;Python 是== 强制性== 地将 实例对象本身 传递给类方法的 第一个参数

🐇类的继承
class 子类名(父类名),继承不只是子类继承父类的属性和方法,当父类还有自己的父类时,子类也能继承父类的父类的属性和方法

- 新增 :指在继承父类的属性和方法的基础上添加自己独有的属性或方法。比如:师傅传授给你一套武功,你自己又练了别的功法,这样你就既继承了师傅的功法,也独创了自己的功法。
- 重写 指在继承父类的属性和方法的基础上重写父类的属性和方法。比如:师傅传授给你一套武功,你对其进行了改进,同样的功法就变成你的独创功法。

📚模块
🐇模块类型
🥕内置模块
-
time模块

-
datetime 模块
-
datetime日期获取

-
timedelta()用于日期计算

-
-
random模块

-
math模块
🐇模块和模块对象导入方法

🥕程序入口
- 如果
abc.py以导入的方式被运行,那 abc.py 中的__name__值就是'abc'; - 如果
abc.py被直接运行,那 abc.py 中__name__的值会被改为'__main__'。
# other.py
print('我是 other 模块')
if __name__ == '__main__':
print('other 模块被直接运行了')
# main.py
import other
print('我是 main 模块')
if __name__ == '__main__':
print('main 模块被直接运行了')
'''
输出:
我是 other 模块
我是 main 模块
main 模块被直接运行了
'''























