python笔记---day2
一、列表、元组操作
列表是我们以后最常用的数据类型之一,通过列表可以对数据实现最方便的存储,修改等操作。
列表的定义
nams=['刘德华','张学友','郭富城','黎明']
通过下标访问列表中的元素,下标是从0开始计数的
>>> names=['刘德华','张学友','郭富城','黎明'] >>> names[1] '张学友' >>> names[0] '刘德华' >>> names[-1] #还可以倒着取 '黎明' >>> names[-2] '郭富城' >>>
切片:取多个元素
>>> names=['刘德华','张学友','郭富城','黎明'] >>> names[1:3] #取下标1至3的元素,不包括3 ['张学友', '郭富城'] >>> names[1:-1] #取下标1至-1的元素,不包括-1 ['张学友', '郭富城'] >>> names[0:-1] ['刘德华', '张学友', '郭富城'] >>> names[2:] #取2到最后的元素,只能这样取 ['郭富城', '黎明'] >>> names[::2] # 后面的2是代表每隔一个元素就取一个(步长) ['刘德华', '郭富城'] >>> names[0::2] #跟上一句的效果一样 ['刘德华', '郭富城']
#利用步长倒去
>>> names
['金角大王', '黑姑娘', 'rain', '张勇', '狗蛋', '银角大王', 'eva', '鸡头']
>>>
>>> names[::-1]
['鸡头', 'eva', '银角大王', '狗蛋', '张勇', 'rain', '黑姑娘', '金角大王']
追加:
>>> names ['刘德华', '张学友', '郭富城', '黎明', '周星驰'] >>> names.append('成龙') >>> names ['刘德华', '张学友', '郭富城', '黎明', '周星驰', '成龙'] >>>
插入:
>>> names.insert(1,'zhourunfa') >>> names ['刘德华', 'zhourunfa', '张学友', '郭富城', '黎明', '周星驰', '成龙'] >>> names.insert(-1,'张家辉') >>> names ['刘德华', 'zhourunfa', '张学友', '郭富城', '黎明', '周星驰', '张家辉', '成龙'] >>>
修改:
>>> names ['刘德华', 'zhourunfa', '张学友', '郭富城', '黎明', '周星驰', '张家辉', '成龙'] >>> names[1]='周润发' >>> names ['刘德华', '周润发', '张学友', '郭富城', '黎明', '周星驰', '张家辉', '成龙'] >>>
扩展:
>>> names ['刘德华', '周润发', '张学友', '郭富城', '黎明', '周星驰', '张家辉', '成龙'] >>> job=['歌手','演员'] >>> names.extend(job) >>> names ['刘德华', '周润发', '张学友', '郭富城', '黎明', '周星驰', '张家辉', '成龙', '歌手', '演员'] >>>
拷贝:
>>> names ['刘德华', '周润发', '张学友', '郭富城', '黎明', '周星驰', '张家辉', '成龙', '歌手', '演员'] >>> names_copy=names.copy() >>> names_copy ['刘德华', '周润发', '张学友', '郭富城', '黎明', '周星驰', '张家辉', '成龙', '歌手', '演员'] >>>
统计:
统计元素的个数
>>> names ['刘德华', '周润发', '张学友', '郭富城', '黎明', '周星驰', '张家辉', '成龙', '歌手', '演员'] >>> names.insert(2,'歌手') >>> names.insert(4,'刘德华') >>> names ['刘德华', '周润发', '歌手', '张学友', '刘德华', '郭富城', '黎明', '周星驰', '张家辉', '成龙', '歌手', '演员'] >>> names.count('歌手') 2 >>> names.count('刘德华') 2
统计元素的总个数:
>>> names ['黎明', '郭富城', '歌手', '歌手', '成龙', '张家辉', '周星驰', '刘德华', '刘德华', 'liudehua', 'Liudehua', '5'] >>> len(names) 12 >>>
排序:
>>> names ['刘德华', 5, '歌手', 'liudehua', '刘德华', '郭富城', '黎明', '周星驰', '张家辉', '成龙', '歌手', 'Liudehua'] >>> names.sort() Traceback (most recent call last): File "<pyshell#43>", line 1, in <module> names.sort() TypeError: '<' not supported between instances of 'int' and 'str' #3.0以后不同数据类型不可以放在一起排序了 >>> names[1]='5' >>> names.sort() >>> names ['5', 'Liudehua', 'liudehua', '刘德华', '刘德华', '周星驰', '张家辉', '成龙', '歌手', '歌手', '郭富城', '黎明'] >>>
#反转
>>> names.reverse()
>>> names
['黎明', '郭富城', '歌手', '歌手', '成龙', '张家辉', '周星驰', '刘德华', '刘德华', 'liudehua', 'Liudehua', '5']
>>>
获取下标:
>>> names ['黎明', '郭富城', '歌手', '歌手', '成龙', '张家辉', '周星驰', '刘德华', '刘德华', 'liudehua', 'Liudehua', '5'] >>> names.index('歌手')#只能获取到第一个元素的下标 2 >>> names.index('刘德华') 7
元组:
元组的语法跟列表差不多,也是存一组数,只不过它一旦创建,就不能修改了;所以元组也叫只读列表。
语法:
>>> job=('teacher','student','police','cleaner') >>> len(job) 4 >>> job.index('cleaner') 3 >>> job.count('teacher') 1 >>>
它只有2个方法,一个是count,一个是index.
程序练习
请闭眼写出以下程序。
程序:购物车程序
需求:
- 启动程序后,让用户输入工资,然后打印商品列表
- 允许用户根据商品编号购买商品
- 用户选择商品后,检测余额是否够,够就直接扣款,不够就提醒
- 可随时退出,退出时,打印已购买商品和余额
product_list=[('Iphone',9822),('Mac Book Air',13500),('Watch',6850),('bike',4900),('milk',15), ('book',89)] buy_list=[] temp=input('Please enter your salary: ') if temp.isdigit(): salary=int(temp) while True: print('----------商品 列表--------------') for index,product in enumerate(product_list): print(index,product) serial_num=input('lease enter the item number you want to buy>>>>>>>>>>>: ') if serial_num.isdigit(): serial_num = int(serial_num) #转换数字 p_item = product_list[serial_num] #要买的商品 if salary > p_item[1]: buy_list.append(p_item) #购买的商品加入购物车 salary = salary - int(p_item[1]) # 余额等于工资减去商品的价格 print('>>>>>>>:已经将商品: 33[1;31m%s 33[0m 加入购物车.' %p_item[0]) else: print('The balance is not enough to buy the goods') elif serial_num == 'q' or serial_num == 'Q': print('-------------Shoopping cart list----------------------') for searial in buy_list: print (searial) temp = int(temp) con_sum = temp - salary #计算消费金额 print('付款: 33[1;31m%s 33[0m ,消费金额: 33[1;31m%s 33[0m, 余额: 33[1;31m%s 33[0m' %(temp,con_sum,salary)) exit() else: print('Error Input')
二,内置函数:字符串的操作
>>> name='Liu De Hua' >>> name 'Liu De Hua' #大写全变小写 >>> name.casefold() 'liu de hua' #首写字母变大写 >>> name='liu de hua' >>> name.capitalize() 'Liu de hua' #返回一个指定的宽度,默认为空格 >>> name.center(50,'-') '--------------------liu de hua--------------------' >>> #统计字符,出现的次数 '--------------------liu de hua--------------------' >>> name.count('u') 2 #将字符串编码成bytes格式 >>> name.encode() b'liu de hua' #判断字符是否以"ua"结尾 >>> name.endswith('ua') True #将 转换成多长的空格 >> "Liu De Hua".expandtabs(10) 'Liu De Hua' #查找字符串出现的次数 >>> name.find('u') 2
format:
格式化函数,
#方法一: >>> msg = "my name is {},and age is {}" >>> msg.format("zhang yong",18) 'my name is zhang yong,and age is 18' #方法二: >>> msg = "my name is {0},age is {1},come from{2}" >>> msg.format('zhangyong',18,'China') 'my name is zhangyong,age is 18,come fromChina' #方法三: >>> msg= "my name is {name},and age is {age}" >>> msg.format(name='Zhang Yong',age=18) 'my name is Zhang Yong,and age is 18'
format_map
>>> msg.format_map({'name':'zhang yong','age':18}) 'my name is zhang yong,and age is 18'
# 查找索引,返回索引值,找不到返回-1
index()语法:
str.index(str,beg=0,end=len(string))
- str -- 指定检索的字符串
- beg -- 开始索引,默认为0
- end -- 结束索引,默认为字符串的长度。
>>> msg.index("my") 0
>>> names="zhang yong"
查找g的索引
>>> names.index('g')
4
查找第二个“g”的索引
>>> names.index('g',names.index('g')+1)
9
>>>
#检测字符串是否由字母和数字组成,是就返回true >>> "asdf2134".isalnum() True >>> #判断是否整数 >>> '21'.isdigit() True
#判断字符是否只有数字组成 >>> '3452323'.isnumeric() True
#istitle() 判断是否是标题格式,这里理解为首字母大写 >>> 'Wlcome to china'.istitle() False >>> 'Wlcome To China'.istitle() True
#isupper() 判断字符串是否全部是大写 >>> "ZHANGYONG".isupper() True
三,字典操作
字典是一种 key -value 的数据类型,使用就像我们上学的时候用的字典,通过笔画,字母来查对应的详细页面。
语法:
info = { 'stu1101': "刘德华",'stu1102': "张学友", 'stu1103': "郭富城", 'stu1104' : "黎明", 'stu1105':"张国荣"}
字典的特性:
- dict是无序的
- key必须是唯一的,so 天生去重。
增加:
>>> info {'stu1101': '刘德华', 'stu1102': '张学友', 'stu1103': '郭富城', 'stu1104': '黎明', 'stu1105': '张国荣'} >>> info['stu1106'] = '陈奕迅' >>> info {'stu1101': '刘德华', 'stu1102': '张学友', 'stu1103': '郭富城', 'stu1104': '黎明', 'stu1105': '张国荣', 'stu1106': '陈奕迅'}
修改:
>>> info {'stu1101': '刘德华', 'stu1102': '张学友', 'stu1103': '郭富城', 'stu1104': '黎明', 'stu1105': '张国荣', 'stu1106': '陈奕迅'} >>> info['stu1102']='周杰伦' >>> info {'stu1101': '刘德华', 'stu1102': '周杰伦', 'stu1103': '郭富城', 'stu1104': '黎明', 'stu1105': '张国荣', 'stu1106': '陈奕迅'} >>>
删除:
>>> info {'stu1101': '刘德华', 'stu1102': '周杰伦', 'stu1103': '郭富城', 'stu1104': '黎明', 'stu1105': '张国荣', 'stu1106': '陈奕迅'} >>> info.pop('stu1103') #标准删除 '郭富城' >>> info {'stu1101': '刘德华', 'stu1102': '周杰伦', 'stu1104': '黎明', 'stu1105': '张国荣', 'stu1106': '陈奕迅'} >>> del info['stu1104'] #跟列表一样的删除 del通用 >>> info {'stu1101': '刘德华', 'stu1102': '周杰伦', 'stu1105': '张国荣', 'stu1106': '陈奕迅'} >>> info.popitem() #随机删除,工作中没什么用 ('stu1106', '陈奕迅') >>> info {'stu1101': '刘德华', 'stu1102': '周杰伦', 'stu1105': '张国荣'} >>> info.popitem() ('stu1105', '张国荣') >>> info {'stu1101': '刘德华', 'stu1102': '周杰伦'} >>>
多级字典嵌套与操作:
字典:
guangdong={ "广州市":{"越秀区":{},"白云区":{"同和街道","嘉禾街道"}}, "珠海市":{ "斗门区":{},"香洲区":{"吉大街道"} } }
查询:
>>> guangdong["广州市"] {'越秀区': {}, '白云区': {'同和街道', '嘉禾街道'}} >>> guangdong['广州市']['白云区'] {'同和街道', '嘉禾街道'} >>>
修改:
>>> guangdong['广州市']['越秀区']={'东山街道','农林街道','大东街道','大塘街道'} >>> guangdong['广州市']['越秀区'] {'大东街道', '东山街道', '农林街道', '大塘街道'}
增加:
>>> guangdong {'广州市': {'越秀区': {'大东街道', '东山街道', '农林街道', '大塘街道'}, '白云区': {'同和街道', '嘉禾街道'}}, '珠海市': {'斗门区': {}, '香洲区': {'吉大街道'}}} >>> guangdong['珠海市']['斗门区']={'井岸镇','白蕉镇','乾务镇'} >>> guangdong['珠海市'] {'斗门区': {'乾务镇', '白蕉镇', '井岸镇'}, '香洲区': {'吉大街道'}} >>>
删除:
>> guangdong['珠海市'] {'斗门区': {'乾务镇', '白蕉镇', '井岸镇'}, '香洲区': {'吉大街道'}} >>> del guangdong['珠海市']['香洲区'] >>> guangdong['珠海市'] {'斗门区': {'乾务镇', '白蕉镇', '井岸镇'}} >>>
其他操作
>>> info {'stu1101': '刘德华', 'stu1102': '周杰伦', 'stu1104': '黎明', 'stu1105': '张国荣', 'stu1106': '陈奕迅'} #显示字典的value值 >>> info.values() dict_values(['刘德华', '周杰伦', '黎明', '张国荣', '陈奕迅']) 显示KEY值 >>> info.keys() #Python 字典 setdefault() 函数和get() 方法类似, 如果键不存在于字典中,将会添加键并将值设为默认值。 dict_keys(['stu1101', 'stu1102', 'stu1104', 'stu1105', 'stu1106']) >>> info.setdefault("stu1107",'周华健') '周华健' >>> info {'stu1101': '刘德华', 'stu1102': '周杰伦', 'stu1104': '黎明', 'stu1105': '张国荣', 'stu1106': '陈奕迅', 'stu1107': '周华健'} >>> b={1:2,2:33,3:456456} #合并 >>> info.update(b) >>> info {'stu1101': '刘德华', 'stu1102': '周杰伦', 'stu1104': '黎明', 'stu1105': '张国荣', 'stu1106': '陈奕迅', 'stu1107': '周华健', 1: 2, 2: 33, 3: 456456} >>>
循环
#方法1 for key in info: print(key,info[key]) #方法2 for k,v in info.items(): #会先把dict转成list,数据里大时莫用 print(k,v)
程序练习
程序: 三级菜单
要求:
- 打印省、市、县三级菜单
- 可返回上一级
- 可随时退出程序
1 state={ 2 "广东省":{ 3 "广州市":{ 4 "越秀区": { 5 "北京街道": {}, 6 "虹桥街道": {}, 7 "流花街道": {}, 8 "东山街道": {}, 9 }, 10 "荔湾区": { 11 "岭南街道": {}, 12 "沙面街道": {}, 13 "东沙街道": {}, 14 "花地街道": {}, 15 }, 16 "海珠区": { 17 "琶洲街道": {}, 18 "南洲街道": {}, 19 "凤阳街道": {}, 20 "江海街道": {}, 21 }, 22 "白云区": { 23 "同和街道": {}, 24 "嘉禾街道": {}, 25 "石井街道": {}, 26 "均和街道": {}, 27 }, 28 }, 29 "深圳市": {}, 30 "珠海市": {}, 31 "汕头市": {}, 32 "东莞市": {}, 33 }, 34 "湖南省":{ 35 "长沙市": {}, 36 "株洲市": {}, 37 "湘潭市": {}, 38 "衡阳市": {}, 39 }, 40 41 "江西省":{ 42 "南昌市": {}, 43 "九江市": {}, 44 "宜春市": {}, 45 "赣州市": {}, 46 }, 47 48 } 49 50 #print(state["广东省"]) 51 52 exit_flag = False 53 54 while not exit_flag : 55 for key in state: 56 print(key) 57 choice = input("输入你的选择>>>>>>>>>>: ") 58 if choice == 'q' or choice == 'Q': 59 exit_flag = True 60 if choice in state: 61 while not exit_flag: 62 for key2 in state[choice]: 63 print(" ", key2) 64 choice1 = input("输入你的选择(可按q退出)>>>>>>>>>>: ") 65 if choice1 == 'q' or choice1 == 'Q': 66 exit_flag = True 67 if choice1 in state[choice]: 68 while not exit_flag: 69 for key3 in state[choice][choice1]: 70 print(" ", key3) 71 choice2 = input("输入你的选择(可按b返回或q退出)>>>>>>>>>>: ") 72 if choice2 == 'q' or choice2 == 'Q': 73 exit_flag = True 74 if choice2 in state[choice][choice1]: 75 while not exit_flag: 76 for key4 in state[choice][choice1][choice2]: 77 print(" ", key4) 78 choice3=input("最后一层了,按b返回!或者按 q 退出 >>>>: ") 79 if choice3 == 'q' or choice3 == 'Q': 80 exit_flag = True 81 if choice3 == 'b': 82 break 83 lse: 84 print("输入错误~,请重新选择") 85 if choice2 == 'b': 86 break 87 else: 88 print("输入错误~,请重新选择") 89 if choice1 == 'b': 90 break 91 else: 92 print("输入错误~,请重新选择") 93 else: 94 print("输入错误~,请重新选择")