第二章 基本数据结构

第二章 基本数据结构

第一课 模块(库)初识

分类:

标准库:

不需要安装的库

第三方库:

需要安装的库

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'xe5x8cx97xe4xbaxacxe6xacxa2xe8xbfx8exe5xb0x94'

三元运算:

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 '.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'xe5x8cx97xe4xbaxacxe6xacxa2xe8xbfx8exe5xb0x94'三元运算: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 '.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.可添加商品,修改商品价格

原文地址:https://www.cnblogs.com/xuepangzi/p/8283250.html