👀说在前面:
python基础语法对照着C学,大体思想和方法都大差不差,但要关注python和C在表达上的不同点,即那些语法规则细节上的差异点
print()输出print(1+1) ,输出2print('秋水共长天一色') ,输出秋水共长天一色\' 表示一个单引号, \" 表示一个双引号
\a响铃(BEL)
\b退格(BS),将当前位置移到前一列
\f换页(FF),将当前位置移到下页开头
\n换行(LF),将当前位置移到下一行开头
\r回车(CR),将当前位置移到本行开头
\t水平制表(HT) (跳到下一个TAB位置)
\v垂直制表(VT)
\\代表一个反斜杠字符""
\'代表一个单引号(撇号)字符
\"代表一个双引号字符
\?代表一个问号
\0空字符(NUL)
\ddd1到3位八进制所代表的任意字符
\xhh1到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 模块被直接运行了
'''