👀说在前面:
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)
\ddd
1到3位八进制所代表的任意字符
\xhh
1到2位十六进制所代表的任意字符
input()
输入如果条件成立,就执行语句
number = 6if number > 3:pirnt(number)
注意格式!
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非平级(缩进超级重要)
X = Y if 条件 else Z
,条件为真为Y,为假为Z
and
,或:or
,非:~
[]
。{}
。 type()
函数判类型len()
用于检查某个数据长度str()、float()、int()、list( )
score=int(input('输入分数:'))
a = 'python基础'
print(list(a))
[‘p’, ‘y’, ‘t’, ‘h’, ‘o’, ‘n’, ‘基’, ‘础’]
运算优先级:从左到右顺着来,括号里的优先算,乘除排在加减前。
students=[A, B, C, D]
对列表元素的处理
⚠️由索引取元素
print(students[2])
,列表中正向索引是从0开始数的print(students[-1])
,反向索引倒数几个从-1开始数⚠️查列表元素索引:列表.index(元素内容)
,关注从0开始索引
⚠️列表元素的修改:列表[索引] = 新值
⚠️列表元素的添加
列表.append(元素)
list = ['松','竹']
list = list.append('梅')
print(list)
ist = ['松','竹']
list.append('梅','岁寒三友')
print(list)
列表.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开始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,也可以通过第二个参数设置不存在时的默认返回值。
假 | 真 |
---|---|
0 | 任意整数/浮点数 |
‘’(空字符串) | ‘嘿嘿’(字符串) |
[](空列表) | [1,2,3] |
{}(字典) | {1:‘a’,2:‘b’} |
None |
in
属于 ,如果值在指定序列里,条件为真not in
不属于, 如果值不在指定序列里,条件为真print('He'in'Hello')
,Trueand
且 连接两个布尔值,如果两个都为真,该条件才为真or
或 连接两个布尔值,如果有一个为真,该条件即为真not
非 反逻辑状态,a为True,not a则为False,反之亦然和C思想都一样,就是语法上有一点差别
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号:珊迪
'''
break
如果满足条件,则结束循环
# 店里现在还剩 3 份食材
left = 3for i in range(1, 6):print('为第' + str(i) + '位客人做一份蟹黄堡')left -= 1if left == 0:breakprint('食材没有了,明天再来吧')'''
输出:
为第1位客人做一份蟹黄堡
为第2位客人做一份蟹黄堡
为第3位客人做一份蟹黄堡
食材没有了,明天再来吧
'''
continue
如果满足条件,则跳过当前循环的剩余语句,直接开始下一轮循环
# 建立一个列表,储存客人的名字
names = ['泡芙老师', '珊迪', '痞老板', '章鱼哥']for name in names:if name == '痞老板':print('海绵宝宝拒绝给痞老板做蟹黄堡')continueprint('给' + name + '做一份蟹黄堡')
'''
输出:
为泡芙老师做一份蟹黄堡
为珊迪做一份蟹黄堡
海绵宝宝拒绝给痞老板做蟹黄堡
为章鱼哥做一份蟹黄堡
'''
循环嵌套:即循环中有循环
- 函数是组织好的、可以重复使用的、用来实现单一功能的代码
- 函数类型可分为自定义函数和内置函数,自定义函数是需要自己定义,而内置函数是python内部已经定义好的函数,比如print()、input()等
def circle(r):c = 2 * 3.14 * r# 先打印计算结果print('该圆的周长是' + str(c))# 函数体最后一行加上 return 语句return cresult = circle(2)
print(result)
位置参数:调用的时候直接以一个量对应函数形参的相应位置,因此位置不能随意更换
关键字参数:调用的时候,在那个量之前加上称号,相当于给那个量标了名字。即按参数名 = 值的格式传入参数
默认参数:为了减少重复输入
不同参数之间的规则
- Python 在解析参数时,是优先考虑 位置参数 的,所以位置参数一定要放在关键字参数之前。
- 默认参数一定要放在最后面
局部变量:只能函数内或者一定代码块内生效
全局变量:在全局内生效的变量
global
:将局部变量转化为局部变量如果局部变量和全局变量的名称相同,那函数内部会有限访问局部变量,外部会访问全局变量。
school = '双叶幼儿园'def welcome():school = '春日部幼儿园'print('欢迎来到' + school)welcome()
# 访问的 school 是函数内的局部变量
# 输出:欢迎来到春日部幼儿园print('欢迎来到' + school)
# 访问的 school 是全局变量
# 输出:欢迎来到双叶幼儿园
但加了global的局部变量会自动取代它之前定义的全局变量并一直沿用下去。
- 类:具有相同属性和方法的对象的抽象 实例:类的个例
- 对象:Python中的对象是类和实例的集合,类可以看作是对象,实例也可以看作是对象
实例名.属性名
和 实例名.方法名()
来调用类的属性和方法。self.属性名
或 self.方法名()
才不会报错。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 otherprint('我是 main 模块')if __name__ == '__main__':print('main 模块被直接运行了')
'''
输出:
我是 other 模块
我是 main 模块
main 模块被直接运行了
'''