• 第二章 基本数据结构


    第二章 基本数据结构

    第一课 模块(库)初识

    分类:

    标准库:

    不需要安装的库

    第三方库:

    需要安装的库

    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.可添加商品,修改商品价格

  • 相关阅读:
    codevs 3160 最长公共子串(SAM)
    noi2018d2t1
    后缀自动机
    [Scoi2014]方伯伯的玉米田
    【NOI2017】泳池
    【BZOJ2560】串珠子
    POJ 1737 统计有n个顶点的连通图有多少个 (带标号)
    【BZOJ3590】[Snoi2013]Quare 状压DP
    【BZOJ1095】【ZJOI2007】捉迷藏 [动态点分治]
    BZOJ1316: 树上的询问
  • 原文地址:https://www.cnblogs.com/xuepangzi/p/8283250.html
Copyright © 2020-2023  润新知