我的Python学习之路——week2
你们可能不知道用了一周多一点时间才学完一周的课程是什么概念,我们一般只会用两个字形容这种人:辣鸡(我:...)
我经常说一句话,当年你大学生可以用两周时间学完整个学期的课程,我Azie用八天时间学完一周课程,不是问题!!!
好了,言归正传,这周的内容是人见人爱,花见花开的以后我们经常会用到的:列表和字典!
Let‘s Go!
首先我们来讲一讲列表,那么什么是列表呢?形如:list = [a, b, c, d]的就是列表了。通俗点来说,就是中括号[ ]被称为列表,[ ]中的值只需要用逗号分隔开,就构成了一个完整的列表。
对于列表,有许多许多常规的操作,最简单的就是我们所说的取值(也就是查),取值方法包括如下两种:一种是通过下标取某一个单独的值,一种是给定一个下标的范围取值——学名:切片。
接下来代码来简单说明吧~
著名刑法老司机罗翔老师说过,罪犯张三,罪恶滔天,不能让他成为法外狂徒,所以,我们必须找出张三!
第一个程序:在人群中找出张三!(列表的创建以及两种取值方法。)

1 # -*- coding:utf-8 -*- 2 # @author:Azie Hu 3 4 5 ''' 6 任务: 7 在人群中找出张三! 8 列表的创建以及两种取值方法。 9 ''' 10 11 #创建列表 12 list = ['张三', '李四', '王五', '赵六'] 13 14 #取值:张三 15 #第一种取值方法,通过下标来取值,下标从0开始 16 value1 = list[0] 17 18 #取值赵六 19 #第一种取值方法的变种,取得最后一个值,不用数第几个,直接使用-1 20 value2 = list[-1] 21 22 #取值:李四,王五 23 #第二种取值方法:通过范围控制取值——切片! 24 #范围[1:3]属于顾头不顾尾类型,因此真实取值为1和2 25 value3 = list[1:3] 26 27 #跳跃取值:张三、王五 28 #三个参数分别为:start、stop、step 29 value4 = list[0:4:2] 30 31 32 print(value1) 33 print(value2) 34 print(value3) 35 print(value4)
结果:
到目前为止,我们已经学会了简单的列表数据的查找方式。那么传统的增删改查四大操作的其他三个怎么办呢?不要 着急,听我娓娓道来!
按照顺序,我们首先来看增。
在列表这种数据格式中,Python为我们提供了两种增加数据的方式:append 和 insert 。
append的作用是在列表的最后添加一个我们想要的元素,而insert则是在我们想要的位置添加一个我们想要的元素。所以,在用append增加元素时,我们只需要给出元素即可,而使用insert时,需要给出位置和元素!
下面演示两个增添数据的方法。
第二个程序:在列表中添加police(张三:???多大仇???)

# -*- coding:utf-8 -*- # @author:Azie Hu ''' 任务: 在列表中添加police ''' #创建列表 list = ['张三', '李四', '王五', '赵六'] #增加数据:append list.append('police') print(list) #增加数据:insert(添加到张三后面) list.insert(1, 'police') print(list)
结果:
接下来,我们先让无辜群众从包围圈出去吧!开始疏散群众(删除群众的数据)。Python为删除数据提供了三个方法:1、remove 2、del 3、pop
remove通过指定元素来删除,而del和pop则是通过指定元素的位置来删除。(说明:如果pop不给位置的话,会默认删掉最后一个元素,自己动手试试吧)
第三个程序:疏散群众!

# -*- coding:utf-8 -*- # @author:Azie Hu ''' 任务: 在列表中添加police 疏散群众!删除数据。 ''' #创建列表 list = ['张三', '李四', '王五', '赵六'] #增加数据:append list.append('police') print(list) #增加数据:insert(添加到张三后面) list.insert(1, 'police') print(list) #删除李四 list.remove('李四') #删除王五 list.pop(-3) #删除赵六 del list[-2] print(list)
结果:
我们可以发现,罪犯张三已经被我们的police追上了,所以他的结局就是入狱改造啦!
(十年后...)
张三出狱了,他已经决定改名换姓重新做人,为了保证他不再犯事,我们依然派遣了两名police监控他!
要更改列表的元素,直接指定位置然后赋值即可。
第四个程序:张三改名!(改)
改动部分:
结果:
好了,张三的闹剧就告一段落啦。接下来对于列表没有提到的知识点进行一个小总结吧。
1、list.index('value') ------------> 找出'value'的索引位置,给出下标
2、list.count('value')------------> 找出列表中有多少个'value',给出个数
3、list.reverse()------------------>翻转列表
4、list.sort()----------------------->列表排序(根据ascii码?)
5、list.extend(list2)------------->将list2拼接到list上
列表的内容差不多就结束了,Python中有一个和列表很相似的类型--元组,符号为小括号()。我们可以把元组理解为一个只读列表,因为它一旦被创建就不可修改。
元组只有两个操作,一个是count,另一个是index。用法和列表中这两个操作的用法相同!
接下来说一下另一个重点:字典,符号为大括号{}。
字典是一个必须满足键值同时存在的类型,也就是必须有key和value,对应关系为key:value,中间用分号(:)隔开。字典的特性是:字典是无序的且key值是唯一的。简单概括就是字典是一种无序不重复的类型!天生不重复(key不重复)!
那么什么是一个字典呢?形如dict = {'name':'zhangsan', 'age' = '19'}的就是字典啦。
和列表一样,字典也有常用的增删改查四大操作。
增/查:dict[key] = 'value'--------------------->如果有key的话,就返回value。如果没有key的话,就增加这一对键值。
删:del dict[key] ---------------------------->删除该key对应的value
dict.pop(key)---------------------------------->删除该key对应的value
dict.popitem()--------------------------------->随机删除
改:直接对dict[key]赋值
好了,常用知识点就到此结束啦。接下来是这周的两个作业:购物车程序和三级菜单。
1、购物车

# -*- coding:utf-8 -*- # # Author : Azie ''' 购物车程序要求: 1、启动程序后,让用户输入工资,然后打印商品列表 2、允许用户根据商品编号购买商品 3、用户选择商品后,检测余额,如果余额足够,直接扣款,如果余额不足,提示余额不足 4、用户可随时退出,退出时,打印已购买商品和余额 ''' print('*'*30) print(' Welcome to our mall') print('*'*30) goods = [('Iphone', 9999), ('Samsung',7999), ('Huawei', 6999), ('Xiaomi', 4999), ('Redmi', 2999)] buy = [] salary = input('请输入您的工资:') if salary.isdigit(): salary = int(salary) while True: print('本商城商品如下:') for index, good in enumerate(goods): print(index, good) answer = input('是否继续逛商城?(yes/no):') if answer == 'yes': choice = input('请输入您想购买商品的序号:') if choice.isdigit(): choice = int(choice) print('您想要购买的商品为\033[31;1m{}\033[0m,需要花费人民币\033[31;1m{}\033[0m元'.format(goods[choice][0], goods[choice][1])) confirm = input('是否确认购买?(yes/no):') if confirm == 'yes': if salary >= goods[choice][1]: salary -= goods[choice][1] buy.append(goods[choice]) print('*' * 30) print('购买的如下商品', buy) print('剩下的工资如下:', salary) print('*' * 30) else: print('-' * 30) print('钱不够了,买不起...努力赚钱吧!') print('-' * 30) break else: print('+' * 30) print('已取消购买,重新选择商品吧!') print('+' * 30) continue else: print('*' * 30) print('感谢您的光临,再见!') print('购买的如下商品', buy) print('剩下的工资如下:', salary) print('*' * 30) break else: print('您输入了错误的字符!')
2、三级菜单

''' 创建一个三级菜单,用于存储地名:省-市-县 用户输入‘b’返回上一级菜单 ''' menu = { '辽宁':{'沈阳':{'康平':'国家绿色食品基地建设县','法库':'瓷土的储量为全国最大'},'大连':{'中山':'2020中国县域潮品消费百强榜排名55','沙河口':'全国家庭教育示范区'}}, '四川':{'成都':{'双流':'全国文明城市','武侯':'高科技文化区'},'绵阳':{'三台':'2019中国西部百强县市','芦溪':'还全国美丽宜居小镇'}}, '海南':{'三亚':{'天涯区':'景区繁多','海棠区':'第一批革命文物保护利用片区'},'儋州':{'南丰':'国家水利风景区','大成':'以橡胶为支柱产业'}} } quit_flag = True while quit_flag: print('现有省份如下:') for province in menu: print(province) choice1 = input('请选择省份:') if choice1 in menu: while quit_flag: print('现有市级如下:') for city in menu[choice1]: print(city) choice2 = input('请选择市级:') if choice2 in menu[choice1]: while quit_flag: print('现有县级如下:') for county in menu[choice1][choice2]: print(county) choice3 = input('请选择县级:') if choice3 in menu[choice1][choice2]: print(menu[choice1][choice2][choice3]) quit_flag = False elif choice3 == 'b': break elif choice2 == 'b': break elif choice1 == 'b': break