第二章 基本数据结构
第一课 模块(库)初识
分类:
标准库:
不需要安装的库
第三方库:
需要安装的库
sys模块:
import sys
print(sys.path) #打印环境变量(模块在这些路径下,执行时可直接被程序找到使用)
运行输出:
['D:\\自动化运维\\第二章 基本数据结构',
......
'C:\\Users....Python36\\lib\\site-packages']
print(sys.argv) #打印当前文件的相对路径,在pycharm中显示为绝对路径
运行输出:
['D:/自动化运维/第二章 基本数据结构/sys.py']
第二课 python数据类型
数字:
整型 int
浮点型 float
复数 complex
布尔值:
真True或假False
1或0
字符串str:
'hello world'
"hel'lo world"
bytes类型(字节)二进制数据:
字符串编码为二进制:
代码:
message='北京欢迎尔'
print(message.encode())#默认编码方式为utf-8
运行输出:
b'\xe5\x8c\x97\xe4\xba\xac\xe6\xac\xa2\xe8\xbf\x8e\xe5\xb0\x94'
三元运算:
result=值1 if 条件 else 值2
如果条件成立 result=值1 如果条件不成立 result=值2
进制:
二进制:01
八进制:01234567
十进制:0123456789
十六进制:0123456789ABCDEF
第三课 列表的使用
查:
代码块:
names=['a','b','c','d','e']
print(names[0])#打印列表中索引为0的元素
print(names[1],names[2])#打印列表中索引为1和索引为2的元素
print(names[1:2])#包括左,不包括右,切片出一个列表
运行输出:
a
b c
['b']
切片:
代码块:
print(names[-2:])#取出最后两个元素组成列表
运行输出:
['d', 'e']
代码块:
li=[1,2,3,4,5,6,7,8,9]
print(li[0:-1:2])
print(li[::2])
输出:
[1, 3, 5, 7]
[1, 3, 5, 7, 9]
增:
代码块:
names.append('x')#追加,元素放在最后
print(names)
names.insert(1,'y')#插入,根据索引将新元素插入任意位置
print(names)
输出:
['a', 'b', 'c', 'd', 'e', 'x']
['a', 'y', 'b', 'c', 'd', 'e', 'x']
改:
代码块:
names[0]='A'
输出:
['A', 'b', 'c', 'd', 'e']
删:
代码块:
names.remove('b')#删除'b'元素
输出:
['a', 'c', 'd', 'e']
代码块:
del names[1]#删除列表names中索引为1的元素
输出:
['a', 'c', 'd', 'e']
代码块:
x=names.pop()
print(names,x)#删除最后一个元素,并将元素返回
输出:
['a', 'b', 'c', 'd'] e
一些列表方法:
代码块:
print(names.index('c'))#names列表中元素c的索引
print(names.count('c'))#names列表中元素c的个数
names.reverse()#翻转
print(names)
names.sort()#排序
print(names)
names2=['x','y','z']
names.extend(names2)#合并列表
print(names)
输出:
2
1
['e', 'd', 'c', 'b', 'a']
['a', 'b', 'c', 'd', 'e']
['a', 'b', 'c', 'd', 'e', 'x', 'y', 'z']
第四课 深浅拷贝
1.赋值(浅拷贝):
代码块:
li1=[111,[222,222],333,444,555]
li2=li1
print('li2',li2)
li2[0]=999
print('li1',li1)
print('li2',li2)
li2[1][0]=100
print('li1',li1)
print('li2',li2)#修改li2的第二层,给li1造成了修改
输出:
li2 [111, [222, 222], 333, 444, 555]
li1 [999, [222, 222], 333, 444, 555]
li2 [999, [222, 222], 333, 444, 555]
li1 [999, [100, 222], 333, 444, 555]
li2 [999, [100, 222], 333, 444, 555]
2.copy方法(浅拷贝):
代码块:
li1=[111,[222,222],333,444,555]
li2=li1.copy()
print('li2',li2)
li2[0]=999
print('li1',li1)
print('li2',li2)
li2[1][0]=100
print('li1',li1)
print('li2',li2)#修改li2的第二层,给li1造成了修改
输出:
li2 [111, [222, 222], 333, 444, 555]
li1 [999, [222, 222], 333, 444, 555]
li2 [999, [222, 222], 333, 444, 555]
li1 [999, [100, 222], 333, 444, 555]
li2 [999, [100, 222], 333, 444, 555]
3.深拷贝:
代码块:
import copy
li1=[111,[222,222],333,444,555]
li2=copy.deepcopy(li1)
print('li2',li2)
li2[0]=999
print('li1',li1)
print('li2',li2)
li2[1][0]=100
print('li1',li1)
print('li2',li2)#修改li2的第二层,没给li1造成修改
输出:
li2 [111, [222, 222], 333, 444, 555]
li1 [111, [222, 222], 333, 444, 555]
li2 [999, [222, 222], 333, 444, 555]
li1 [111, [222, 222], 333, 444, 555]
li2 [999, [100, 222], 333, 444, 555]
第五课 元组和for遍历:
元组:
1.元组的写法就是将列表的[]换成()
2.元组不能增删改,只能查,是只读序列
3.只有count和index两个方法
for遍历:
代码块:
li=[1,2,3]
for i in li:
print(i)
输出:
1
2
3
程序练习:
购物车程序:
需求:
1.启动程序后,让用户输入工资,然后打印商品列表
2.允许用户根据商品编号购买商品
3.用户选择商品后,检测用户余额是否够,够就直接扣款,不够就提醒
4.可随时退出,退出时,显示已购买商品和余额
低配版示例代码块:
GoodList=[['book',80],['iphone',6000],['PC',8000],['coffee',100]]
bought=[]
Salary=int(input('your salary:'))
balance=Salary
while True:
num=0
for i in GoodList:
num+=1
print(num,i)
choice=input('choice good number or q:')
if choice=='q':
break
else:
choice=int(choice)-1
if balance>=int(GoodList[choice][1]):
bought.append(GoodList[choice][0])
balance=balance-int(GoodList[choice][1])
else:
print('余额不足')
print(balance)
print(bought)
第六课 字符串常用操作:
name='abcd'
print(name.capitalize()) #首字母大写 Abcd
print(name.count('a'))#查找有几个'a' 1
print(name.center(30,'-'))#打印占30字符,空位用'-'补足 -------------abcd-------------
print(name.find('c'))#将找到字符的索引返回 2
print(name.isdigit())#是否是一个整数 False
print(name.join(['1','2','3']))#将列表组合为字符串 1abcd2abcd3
print(' abc \n \t'.strip())#去掉左边右边的空格和回车 abc
print('aaab'.replace('a','A',1))#替换一个字符 Aaab
print('1+2+3+4'.split('+'))#用'+'对字符串进行分割组成列表 ['1', '2', '3', '4']
print('Abc'.swapcase())#大小写对换 aBC
print('abc bbc of cbc'.title())#变为标题,每个单词首字母大写 Abc Bbc Of Cbc
第七课 字典的常用操作:
字典的特性:
1.dict是无序的
2.键key是唯一的,天生去重
语法:
dict={key1:value1,key2:value2...}
字典的增删改查:
代码块:
info={1:1111,2:2222,33:3333,46:4444,}
print(info)#输出:{1: 1111, 2: 2222, 33: 3333, 46: 4444}
改:
info[1]=666
print(info)#输出:{1: 666, 2: 2222, 33: 3333, 46: 4444}
增:
info[5]=77777
print(info)#输出:{1: 666, 2: 2222, 33: 3333, 46: 4444, 5: 77777}
删:
del info[5]
print(info)#输出:{1: 666, 2: 2222, 33: 3333, 46: 4444}
查:
print(info.get(1))# 安全的查找方法,如果找不到返回None不会报错 输出:666
print(info[1])#如果字典里不存在这个键会报错,输出:666
循环一个字典(推荐使用):
for i in info:
print(i,info[i])
程序练习:
三级菜单:
低配版示例代码块:
info={
'阅文集团':{
'qq阅读':{
'血红':['升龙道','邪龙道','偷天'],
'徐公子胜志':['鬼股','地师','灵山'],
'打眼':['极品透视','黄金瞳','天才相师'],
},
'起点中文':{
'唐三':['光之子','狂神','神印王座'],
'番茄':['星辰变','寸芒','盘龙'],
'辰东':['不死不灭','遮天','神墓'],
},
'晋江文学':{
'Fresh果果':['花千骨','琉璃般若花','脱骨花'],
'顾漫':['微微一笑很倾城','何以笙箫默','杉杉来吃'],
'明晓溪':['会有天使替我爱你','旋风少女','烈火如歌'],
},
},
'百度文学':{
'纵横中文':{
'天蚕土豆':['武动乾坤','斗破苍穹','大主宰'],
'梦入神机':['永生','阳神','圣王'],
'月关':['回到明朝当王爷','锦衣夜行','步步生莲'],
},
'掌阅':{
'跳舞':['天王','恶魔法则','邪气凛然'],
'柳下挥':['火爆天王','天才医生','邻家有女初长成'],
'烽火戏诸侯':['极品公子','陈二狗的妖孽人生','剑来'],
},
'红薯网':{
'路人甲': ['瞎写', '胡写', '瞎胡写'],
'路人乙': ['瞎编', '胡编', '胡乱编'],
'路人丙': ['休闲', '逆天', '化身'],
},
},
'其他':{
'阿里文学':{
'垃圾': ['垃圾1', '垃圾2', '垃圾3'],
'盗版起家': ['书旗盗版传', '坑人恩仇录', '要洗白真经'],
'药丸': ['早药丸', '晚药丸', '早晚药丸'],
},
'17k':{
'皇甫奇': ['飞升之后', '大夏王朝', '人皇纪'],
'叶落失': ['天行', '斩龙', '纵横天下'],
'萧潜': ['缥缈之旅', '秒杀', '霸天雷神'],
},
'磨铁':{
'南派三叔': ['盗墓笔记', '黄皮子坟', '七星鲁王宫'],
'天下霸唱': ['鬼吹灯', '寻龙点穴', '死亡循环'],
'小佛': ['苗疆蛊事', '苗疆道事', '捉蛊记'],
}
},
}
flag=True
while flag:
for i in info:
print(i)
choice=input('choice key or b:')
if choice in info:
while flag:
for i in info[choice]:
print(i)
choice1 = input('choice key or b:')
if choice1 in info[choice]:
while flag:
for i in info[choice][choice1]:
print(i)
choice2 = input('choice key or b:')
if choice2 in info[choice][choice1]:
for i in info[choice][choice1][choice2]:
print(i)
choice3=input('b or e:')
if choice3=='b':
break
elif choice3=='e':
flag=False
else:
print('input is wrong!')
elif choice2=='b':
break
else:
print('input is wrong!')
elif choice1=='b':
break
else:
print('input is wrong!')
elif choice=='b':
pass
else:
print('input is wrong!')
作业:
优化购物车
用户入口:
1.商品信息存在文件里
2.已购商品,余额记录
商家入口:
1.可添加商品,修改商品价格
第二章 基本数据结构第一课 模块(库)初识分类:标准库:不需要安装的库第三方库:需要安装的库sys模块:import sysprint(sys.path) #打印环境变量(模块在这些路径下,执行时可直接被程序找到使用)运行输出: ['D:\\自动化运维\\第二章 基本数据结构', ...... 'C:\\Users....Python36\\lib\\site-packages'] print(sys.argv) #打印当前文件的相对路径,在pycharm中显示为绝对路径运行输出:['D:/自动化运维/第二章 基本数据结构/sys.py']第二课 python数据类型数字:整型 int浮点型 float复数 complex布尔值:真True或假False1或0字符串str:'hello world' "hel'lo world"bytes类型(字节)二进制数据:字符串编码为二进制:代码:message='北京欢迎尔'print(message.encode())#默认编码方式为utf-8运行输出:b'\xe5\x8c\x97\xe4\xba\xac\xe6\xac\xa2\xe8\xbf\x8e\xe5\xb0\x94'三元运算:result=值1 if 条件 else 值2如果条件成立 result=值1 如果条件不成立 result=值2进制:二进制:01八进制:01234567十进制:0123456789十六进制:0123456789ABCDEF第三课 列表的使用查:代码块:names=['a','b','c','d','e']print(names[0])#打印列表中索引为0的元素print(names[1],names[2])#打印列表中索引为1和索引为2的元素print(names[1:2])#包括左,不包括右,切片出一个列表运行输出:ab c['b']切片:代码块:print(names[-2:])#取出最后两个元素组成列表运行输出:['d', 'e']代码块:li=[1,2,3,4,5,6,7,8,9]print(li[0:-1:2])print(li[::2])输出:[1, 3, 5, 7][1, 3, 5, 7, 9]增:代码块:names.append('x')#追加,元素放在最后print(names)names.insert(1,'y')#插入,根据索引将新元素插入任意位置print(names)输出:['a', 'b', 'c', 'd', 'e', 'x']['a', 'y', 'b', 'c', 'd', 'e', 'x']改:代码块:names[0]='A'输出:['A', 'b', 'c', 'd', 'e']删:代码块:names.remove('b')#删除'b'元素输出:['a', 'c', 'd', 'e']代码块:del names[1]#删除列表names中索引为1的元素输出:['a', 'c', 'd', 'e']代码块:x=names.pop()print(names,x)#删除最后一个元素,并将元素返回输出:['a', 'b', 'c', 'd'] e一些列表方法:代码块:print(names.index('c'))#names列表中元素c的索引print(names.count('c'))#names列表中元素c的个数names.reverse()#翻转print(names)names.sort()#排序print(names)names2=['x','y','z']names.extend(names2)#合并列表print(names)输出:21['e', 'd', 'c', 'b', 'a']['a', 'b', 'c', 'd', 'e']['a', 'b', 'c', 'd', 'e', 'x', 'y', 'z']第四课 深浅拷贝1.赋值(浅拷贝):代码块:li1=[111,[222,222],333,444,555]li2=li1print('li2',li2)li2[0]=999print('li1',li1)print('li2',li2)li2[1][0]=100print('li1',li1)print('li2',li2)#修改li2的第二层,给li1造成了修改输出:li2 [111, [222, 222], 333, 444, 555]li1 [999, [222, 222], 333, 444, 555]li2 [999, [222, 222], 333, 444, 555]li1 [999, [100, 222], 333, 444, 555]li2 [999, [100, 222], 333, 444, 555]2.copy方法(浅拷贝):代码块:li1=[111,[222,222],333,444,555]li2=li1.copy()print('li2',li2)li2[0]=999print('li1',li1)print('li2',li2)li2[1][0]=100print('li1',li1)print('li2',li2)#修改li2的第二层,给li1造成了修改输出:li2 [111, [222, 222], 333, 444, 555]li1 [999, [222, 222], 333, 444, 555]li2 [999, [222, 222], 333, 444, 555]li1 [999, [100, 222], 333, 444, 555]li2 [999, [100, 222], 333, 444, 555]3.深拷贝:代码块:import copyli1=[111,[222,222],333,444,555]li2=copy.deepcopy(li1)print('li2',li2)li2[0]=999print('li1',li1)print('li2',li2)li2[1][0]=100print('li1',li1)print('li2',li2)#修改li2的第二层,没给li1造成修改输出:li2 [111, [222, 222], 333, 444, 555]li1 [111, [222, 222], 333, 444, 555]li2 [999, [222, 222], 333, 444, 555]li1 [111, [222, 222], 333, 444, 555]li2 [999, [100, 222], 333, 444, 555]第五课 元组和for遍历:元组:1.元组的写法就是将列表的[]换成()2.元组不能增删改,只能查,是只读序列3.只有count和index两个方法for遍历:代码块:li=[1,2,3]for i in li:print(i)输出:123程序练习:购物车程序:需求:1.启动程序后,让用户输入工资,然后打印商品列表2.允许用户根据商品编号购买商品3.用户选择商品后,检测用户余额是否够,够就直接扣款,不够就提醒4.可随时退出,退出时,显示已购买商品和余额低配版示例代码块:GoodList=[['book',80],['iphone',6000],['PC',8000],['coffee',100]]bought=[]Salary=int(input('your salary:'))balance=Salarywhile True:num=0for i in GoodList:num+=1print(num,i)choice=input('choice good number or q:')if choice=='q':breakelse:choice=int(choice)-1if balance>=int(GoodList[choice][1]):bought.append(GoodList[choice][0])balance=balance-int(GoodList[choice][1])else:print('余额不足')print(balance)print(bought)第六课 字符串常用操作:name='abcd'print(name.capitalize()) #首字母大写 Abcdprint(name.count('a'))#查找有几个'a' 1print(name.center(30,'-'))#打印占30字符,空位用'-'补足 -------------abcd-------------print(name.find('c'))#将找到字符的索引返回 2print(name.isdigit())#是否是一个整数 Falseprint(name.join(['1','2','3']))#将列表组合为字符串 1abcd2abcd3print(' abc \n \t'.strip())#去掉左边右边的空格和回车 abcprint('aaab'.replace('a','A',1))#替换一个字符 Aaabprint('1+2+3+4'.split('+'))#用'+'对字符串进行分割组成列表 ['1', '2', '3', '4']print('Abc'.swapcase())#大小写对换 aBCprint('abc bbc of cbc'.title())#变为标题,每个单词首字母大写 Abc Bbc Of Cbc第七课 字典的常用操作:字典的特性:1.dict是无序的2.键key是唯一的,天生去重语法:dict={key1:value1,key2:value2...}字典的增删改查:代码块:info={1:1111,2:2222,33:3333,46:4444,}print(info)#输出:{1: 1111, 2: 2222, 33: 3333, 46: 4444}改:info[1]=666print(info)#输出:{1: 666, 2: 2222, 33: 3333, 46: 4444}增:info[5]=77777print(info)#输出:{1: 666, 2: 2222, 33: 3333, 46: 4444, 5: 77777}删:del info[5]print(info)#输出:{1: 666, 2: 2222, 33: 3333, 46: 4444}查:print(info.get(1))# 安全的查找方法,如果找不到返回None不会报错 输出:666print(info[1])#如果字典里不存在这个键会报错,输出:666循环一个字典(推荐使用):for i in info:print(i,info[i])程序练习:三级菜单:低配版示例代码块:info={'阅文集团':{'qq阅读':{'血红':['升龙道','邪龙道','偷天'],'徐公子胜志':['鬼股','地师','灵山'],'打眼':['极品透视','黄金瞳','天才相师'],},'起点中文':{'唐三':['光之子','狂神','神印王座'],'番茄':['星辰变','寸芒','盘龙'],'辰东':['不死不灭','遮天','神墓'],},'晋江文学':{'Fresh果果':['花千骨','琉璃般若花','脱骨花'],'顾漫':['微微一笑很倾城','何以笙箫默','杉杉来吃'],'明晓溪':['会有天使替我爱你','旋风少女','烈火如歌'],},},'百度文学':{'纵横中文':{'天蚕土豆':['武动乾坤','斗破苍穹','大主宰'],'梦入神机':['永生','阳神','圣王'],'月关':['回到明朝当王爷','锦衣夜行','步步生莲'],},'掌阅':{'跳舞':['天王','恶魔法则','邪气凛然'],'柳下挥':['火爆天王','天才医生','邻家有女初长成'],'烽火戏诸侯':['极品公子','陈二狗的妖孽人生','剑来'],},'红薯网':{'路人甲': ['瞎写', '胡写', '瞎胡写'],'路人乙': ['瞎编', '胡编', '胡乱编'],'路人丙': ['休闲', '逆天', '化身'],},},'其他':{'阿里文学':{'垃圾': ['垃圾1', '垃圾2', '垃圾3'],'盗版起家': ['书旗盗版传', '坑人恩仇录', '要洗白真经'],'药丸': ['早药丸', '晚药丸', '早晚药丸'],},'17k':{'皇甫奇': ['飞升之后', '大夏王朝', '人皇纪'],'叶落失': ['天行', '斩龙', '纵横天下'],'萧潜': ['缥缈之旅', '秒杀', '霸天雷神'],},'磨铁':{'南派三叔': ['盗墓笔记', '黄皮子坟', '七星鲁王宫'],'天下霸唱': ['鬼吹灯', '寻龙点穴', '死亡循环'],'小佛': ['苗疆蛊事', '苗疆道事', '捉蛊记'],}},}
flag=Truewhile flag:for i in info:print(i)choice=input('choice key or b:')if choice in info:while flag:for i in info[choice]:print(i)choice1 = input('choice key or b:')if choice1 in info[choice]:while flag:for i in info[choice][choice1]:print(i)choice2 = input('choice key or b:')if choice2 in info[choice][choice1]:for i in info[choice][choice1][choice2]:print(i)choice3=input('b or e:')if choice3=='b':breakelif choice3=='e':flag=Falseelse:print('input is wrong!')elif choice2=='b':breakelse:print('input is wrong!')elif choice1=='b':breakelse:print('input is wrong!')elif choice=='b':passelse:print('input is wrong!')作业:优化购物车用户入口:1.商品信息存在文件里2.已购商品,余额记录商家入口:1.可添加商品,修改商品价格