python基础第二天的课程,主要内容列表,元祖,字典,字符串等主要内容
列表
定义列表
>>> names = ["ZhangSan","LiSi","WangWu","ZhaoLiu",["ZhangXin","MengDong"],"ZongQi","HeiBa","DongJiu"]>>> print(names)['ZhangSan', 'LiSi', 'WangWu', 'ZhaoLiu', ['ZhangXin', 'MengDong'], 'ZongQi', 'HeiBa', 'DongJiu']
列表取值
>>> names[0] #names列表元素从左往右,从0开始数'ZhangSan'>>> names[4][0]'ZhangXin'
列表切片
>>> print(names[0])ZhangSan>>> print(names[0:]) #从第一个元素取到最末['ZhangSan', 'LiSi', 'WangWu', 'ZhaoLiu', ['ZhangXin', 'MengDong'], 'ZongQi', 'HeiBa', 'DongJiu']>>> print(names[-1]) #取最后一个元素DongJiu>>> print(names[:-1]) #从第一个元素取到最后一个(不包含最后一个)['ZhangSan', 'LiSi', 'WangWu', 'ZhaoLiu', ['ZhangXin', 'MengDong'], 'ZongQi', 'HeiBa']>>> print(names[-2:]) #取最后两个元素['HeiBa', 'DongJiu']>>> print(names[:4]) #取前4个元素['ZhangSan', 'LiSi', 'WangWu', 'ZhaoLiu']>>> print(names[-4:]) #取后四个元素[['ZhangXin', 'MengDong'], 'ZongQi', 'HeiBa', 'DongJiu']>>> print(names[::2]) #从头开始取,2代表,每隔一个取一个。 如果是3,每两个取一个,以此类推['ZhangSan', 'WangWu', ['ZhangXin', 'MengDong'], 'HeiBa']
列表的操作
>>> names.append("DaWa") #在列表内最后追加>>> print(names)['ZhangSan', 'LiSi', 'WangWu', 'ZhaoLiu', ['ZhangXin', 'MengDong'], 'ZongQi', 'HeiBa', 'DongJiu', 'DaWa']
names.insert(1,"ErWa") #在下标位置为1的元素前插入>>> print(names)['ZhangSan', 'ErWa', 'LiSi', 'WangWu', 'ZhaoLiu', ['ZhangXin', 'MengDong'], 'ZongQi', 'HeiBa', 'DongJiu', 'DaWa']
>>> names[1]="SanWa">>> print(names)['ZhangSan', 'SanWa', 'LiSi', 'WangWu', 'ZhaoLiu', ['ZhangXin', 'MengDong'], 'ZongQi', 'HeiBa', 'DongJiu', 'DaWa']
>>> del names[0] #删除元素下标位置的数据>>> print(names)['SanWa', 'LiSi', 'WangWu', 'ZhaoLiu', ['ZhangXin', 'MengDong'], 'ZongQi', 'HeiBa', 'DongJiu', 'DaWa']>>> names.remove("DaWa") #删除指定数据>>> print(names)['SanWa', 'LiSi', 'WangWu', 'ZhaoLiu', ['ZhangXin', 'MengDong'], 'ZongQi', 'HeiBa', 'DongJiu']>>> names.pop() #删除最后一个数据'DongJiu'>>> print(names)['SanWa', 'LiSi', 'WangWu', 'ZhaoLiu', ['ZhangXin', 'MengDong'], 'ZongQi', 'HeiBa']
>>> print(names)['SanWa', 'LiSi', 'WangWu', 'ZhaoLiu', ['ZhangXin', 'MengDong'], 'ZongQi', 'HeiBa']>>> names2=["1","2","3","4","5","6","LiSi"]>>> names.extend(names2) #在names列表数据后面追加names2的数据>>> print(names)['SanWa', 'LiSi', 'WangWu', 'ZhaoLiu', ['ZhangXin', 'MengDong'], 'ZongQi', 'HeiBa', '1', '2', '3', '4', '5', '6', 'LiSi']
>>> names1 = ['one','two','three','four',["five","six"],7,8,9,]>>> names2 = names1.copy()>>> print(names2)['one', 'two', 'three', 'four', ['five', 'six'], 7, 8, 9]>>> names2[4][1]= "none" #修改name2列表中的列表数据后,names1中的值也跟着修改>>> print(names1) ['one', 'two', 'three', 'four', ['five', 'none'], 7, 8, 9]>>> print(names2)['one', 'two', 'three', 'four', ['five', 'none'], 7, 8, 9]
>>> names=["LiSi","1","2","3","4","5","6","LiSi"]>>> names.count("LiSi")2
>>> names = ['one','two','three','four',"7","8","9"]>>> names.sort()>>> print(names) #按ASCII编码排序['7', '8', '9', 'four', 'one', 'three', 'two']
>>> names = ['one','two','three','four',"7","8","9"]>>> names.reverse()>>> print(names)['9', '8', '7', 'four', 'three', 'two', 'one']
>>> names['9', '8', '7', 'four', 'three', 'two', 'one']>>> names.index("four") #获取该元素下标值3
元组
元组tuple和列表十分类似,只不过元组和一样是不可变的,即你不能修改元组。
定义元组
>>> t_name = ("zhang","li","wang","zhao","sun")>>> print(t_name)('zhang', 'li', 'wang', 'zhao', 'sun')
元组操作
统计
>>> t_name = ("zhang","li","wang","zhao","sun")>>> t_name.count("sun")1
获取下标
>>> t_name.index("wang")2
购物车练习
- 启动程序后,让用户输入工资,然后打印商品列表
- 允许用户根据商品编号购买商品
- 用户选择商品后,检测余额是否够,够就直接扣款,不够就提醒
- 可随时退出,退出时,打印已购买商品和余额
1 shoping_list = [ 2 ('iphone',5800), 3 ('Mac Pro', 16000), 4 ("bike", 800), 5 ("python book", 58), 6 ] 7 curt_list = [] #购物车列表 8 salary = input("你的工资是多少:") 9 if salary.isdigit(): #判断是否是整数10 salary = int(salary) #转整型11 while True:12 for index,item in enumerate(shoping_list): #循环打印商品列表13 # print(shoping_list.index(item),item)14 print(index,item) 15 choice_number = input("请输入你要选择的编号:")16 if choice_number.isdigit(): 17 choice_number = int(choice_number)18 if choice_number < len(shoping_list) and choice_number >=0: #判断选择编号是否存在19 p_item = shoping_list[choice_number] #选择商品20 if p_item[1] <= salary: #判断 商品价格小于等于工资 购买,否则提示余额不足 21 curt_list.append(p_item) #加入购物车22 salary -=p_item[1] #剩余余额23 print("\033[31;1m%s\033[0m已经加入购物车,你的余额是\033[32;1m%s\033[0m"%(p_item[0],salary))24 else:25 print("你的余额不足")26 else:27 print("你输入的商品不存在")28 elif choice_number == "q":29 print("——————shop list——————")30 for i in curt_list:31 print(i)32 print("您的余额是%s"%salary)33 exit()34 else:35 print("你的输入有误")36 37 else:38 print("你的输入有误")
字符串
name = "Zhangxin Hanchuan"print(name.capitalize())print(name.casefold())print(name.center(20,"-"))print(name.count("s"))print(name.encode())print(name.endswith("aa"))print(name.find("1"))print(name.format_map({ "name":"zhangxin","age":18}))print(name.format(name= "zhangxin",age= 19))print(name.isalnum()) #是否阿拉伯数字+阿拉伯字符print("abc".isalpha()) #是否纯英文字符print("10101010".isdecimal()) #是否十进制print("abc".isdigit()) #是否整数print("abc".isidentifier()) #是否是合法变量名,合法标识符print("Abc Is".islower()) #是否是小写print("Abc Is".istitle()) #是否是大写print("123411121".isnumeric()) #是否是数字,和isdigit没区别print("asdfasdf".isprintable()) #是否可以打印 is tty file,drive fileprint(" ".isspace()) # 是否是个空格print("+".join(["1","2","3","4"])) # 是否是列表中加入"+" 字符print(name.ljust(30,"-")) # 右侧补全20个字符--print(name.lower())print("\n ab\n ".strip()) #去掉空格和换行print(name.replace("a","A"))print(name.rfind("a"))print(name.split("a"))print("a+b+c+d".split("+"))print("zhang xin".swapcase())
字典
字典(dictionary),字典一种key - value 的数据类型,使用就像我们上学用的字典,通过笔划、字母来查对应页的详细内容。
字典定义
info = { "stdu1101" : "Wuteng Lan", "stdu1102" : "Maliya XiaoZe", "stdu1103" : "Duoyejiyi Bo", "stdu1104" : "LongZe Luola",}
字典特性
- 字典是没有顺序的
- key的值是唯一,天生去重复
增加
>>> info["stdu1105"]= "苍井空"
>>> info{'stdu1101': 'Wuteng Lan', 'stdu1102': 'Maliya XiaoZe', 'stdu1103': 'Duoyejiyi Bo', 'stdu1104': 'LongZe Luola', 'stdu1105': '苍井空'}修改
>>> info["stdu1101"]= "波多野结衣">>> info{'stdu1101': '波多野结衣', 'stdu1102': 'Maliya XiaoZe', 'stdu1103': 'Duoyejiyi Bo', 'stdu1104': 'LongZe Luola', 'stdu1105': '苍井空'}
删除
>>> info.pop("stdu1101")'波多野结衣'>>> del info["stdu1102"] >>> info{ 'stdu1103': 'Duoyejiyi Bo', 'stdu1104': 'LongZe Luola', 'stdu1105': '苍井空'}>>> info.popitem() #随机删除一个元素('stdu1105', '苍井空')
查找
>>> info{ 'stdu1103': 'Duoyejiyi Bo', 'stdu1104': 'LongZe Luola'}>>> "stdu1103" in info #标准查找True>>> info.get("stdu1103") #获取'Duoyejiyi Bo'>>> info["stdu1103"] #同样获取'Duoyejiyi Bo'>>> print(info.get("stdu1105"))#获取不存在的元素返回NoneNone>>> info["stdu1105"]#获取不存在的元素返回错误Traceback (most recent call last): File "", line 1, in info["stdu1105"]KeyError: 'stdu1105'
多层嵌套字典
>>> litle_dict = { "欧美": { "德国": ["工业4.0", "严谨"], "美国": ["很牛逼", "很自大"], "法国": ["很浪漫", "很懒"], "英国": ["足球流氓很多", "它要脱欧"] }, "日韩": { "日本": ["AV不错", "汽车不错"] }, "大陆": { "中国大陆": ["足球垃圾", "高铁牛逼"] }}>>> litle_dict{ '欧美': { '德国': ['工业4.0', '严谨'], '美国': ['很牛逼', '很自大'], '法国': ['很浪漫', '很懒'], '英国': ['足球流氓很多', '它要脱欧']}, '日韩': { '日本': ['AV不错', '汽车不错']}, '大陆': { '中国大陆': ['足球垃圾', '高铁牛逼']}}
修改
>>> litle_dict["欧美"]["美国"][1] = "特朗普">>> litle_dict{ '欧美': { '德国': ['工业4.0', '严谨'], '美国': ['很牛逼', '特朗普'], '法国': ['很浪漫', '很懒'], '英国': ['足球流氓很多', '它要脱欧']}, '日韩': { '日本': ['AV不错', '汽车不错']}, '大陆': { '中国大陆': ['足球垃圾', '高铁牛逼']}}
字典的其他操作
>>> info = { "stdu1101" : "Wuteng Lan", "stdu1102" : "Maliya XiaoZe", "stdu1103" : "Duoyejiyi Bo", "stdu1104" : "LongZe Luola",}>>> info.keys>>> info.keys() #列表的key值dict_keys(['stdu1101', 'stdu1102', 'stdu1103', 'stdu1104'])>>> info.values()dict_values(['Wuteng Lan', 'Maliya XiaoZe', 'Duoyejiyi Bo', 'LongZe Luola'])>>> info.items() dict_items([('stdu1101', 'Wuteng Lan'), ('stdu1102', 'Maliya XiaoZe'), ('stdu1103', 'Duoyejiyi Bo'), ('stdu1104', 'LongZe Luola')])>>> info.setdefault("stdu1105","苍井空") #不存在的参数设置默认值'苍井空'>>> info{ 'stdu1101': 'Wuteng Lan', 'stdu1102': 'Maliya XiaoZe', 'stdu1103': 'Duoyejiyi Bo', 'stdu1104': 'LongZe Luola', 'stdu1105': '苍井空'}>>> info.setdefault("stdu1101","武藤兰")#存在的参数设置默认值不生效'Wuteng Lan'>>> info{ 'stdu1101': 'Wuteng Lan', 'stdu1102': 'Maliya XiaoZe', 'stdu1103': 'Duoyejiyi Bo', 'stdu1104': 'LongZe Luola', 'stdu1105': '苍井空'}>>> b = {1:2,3:4,"stdu1102":"小泽玛丽亚"}>>> info.update(b)#合并数据,并替换存在参数的数据>>> info{ 'stdu1101': 'Wuteng Lan', 'stdu1102': '小泽玛丽亚', 'stdu1103': 'Duoyejiyi Bo', 'stdu1104': 'LongZe Luola', 'stdu1105': '苍井空', 1: 2, 3: 4}>>> dict.fromkeys([1,2,3],"test") #坑多慎用{ 1: 'test', 2: 'test', 3: 'test'}
循环dict
>>> info{ 'stdu1101': 'Wuteng Lan', 'stdu1102': '小泽玛丽亚', 'stdu1103': 'Duoyejiyi Bo', 'stdu1104': 'LongZe Luola', 'stdu1105': '苍井空', 1: 2, 3: 4}>>> for key in info: print(key,info[key])stdu1101 Wuteng Lanstdu1102 小泽玛丽亚stdu1103 Duoyejiyi Bostdu1104 LongZe Luolastdu1105 苍井空1 23 4>>> for k,v in info.items(): #info内容比较大的时候 不建议使用,info.item()转换需要花费很多时间 print(k,v) stdu1101 Wuteng Lanstdu1102 小泽玛丽亚stdu1103 Duoyejiyi Bostdu1104 LongZe Luolastdu1105 苍井空1 23 4
三级菜单练习
- 打印省、市、县三级菜单
- 可返回上一级
- 可随时退出程序
1 menu = { 2 "北京":{ 3 "通州":{ 4 "梨园":{ 5 "蓝岛": {}, 6 "贵友大厦": {}, 7 }, 8 "永顺":{ 9 "京杭府": {},10 "北京one": {},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 exit_flag = False36 37 while not exit_flag:38 for a in menu:39 print(a)40 district = input("请输入城市名称:")41 if district in menu:42 while not exit_flag:43 for b in menu[district]:44 print("\t",b)45 town = input("请输入区、县名称:")46 if town in menu[district]:47 while not exit_flag:48 for c in menu[district][town]:49 print("\t\t",c)50 hot_business_area = input("请输入城镇名称:")51 if hot_business_area in menu[district][town]:52 for d in menu[district][town][hot_business_area]:53 print("\t\t\t",d)54 end = input("最后一层了,按b返回")55 if end == "b":56 pass57 elif end =="q":58 exit_flag = True59 if hot_business_area == "b":60 break61 elif hot_business_area == "q":62 exit_flag = True63 if town == "b":64 break65 elif town == "q":66 exit_flag = True
作业
一、元素分类 有如下值集合 [11,22,33,44,55,66,77,88,99,90...],将所有大于 66 的值保存至字典的第一个key中,将小于 66 的值保存至第二个key的值中。 即: {'k1': 大于66的所有值, 'k2': 小于66的所有值}
L = [11,22,33,44,55,66,77,88,99,90]v1 = []v2 = []S = { "k1":v1,"k2":v2}for s1 in L: # print(s1) if s1 <= 66: v1.append(s1) else: s1 > 66: v2.append(s1)print(S)
二、查找 查找列表中元素,移除每个元素的空格,并查找以 a或A开头 并且以 c 结尾的所有元素。
1 li = ["alec", " aric", "Alex", "Tony", "rain"] 2 tu = ("alec", " aric", "Alex", "Tony", "rain") 3 dic = { 'k1': "alex", 'k2': ' aric', "k3": "Alex", "k4": "Tony"} 4 for i in li: 5 j = i.strip() 6 if (j.startswith("a") or and j.startswith("A")) j.endswith("c"): 7 print(j) 8 9 for i in tu:10 j = i.strip()11 if (j.startswith("a") or and j.startswith("A")) j.endswith("c"):12 print(j)13 14 for keys in dic:15 j = dic[keys].strip()16 # print(keys,j)17 if j.startswith("a") and j.endswith("c"):18 print(j)
三、输出商品列表,用户输入序号,显示用户选中的商品 商品 li = ["手机", "电脑", '鼠标垫', '游艇']
1 goods_list = ["手机","电脑","鼠标垫","游艇"] 2 3 for k, v in enumerate(goods_list, 1): 4 print(k, v) 5 6 while True: 7 number = input("请输入序号:") 8 if number.isdigit(): 9 number = int(number)10 if number > 0 and number <= len(goods_list):11 print(goods_list[number-1])12 else:13 print("你输入的序号不存在!")14 continue15 else:16 print("你输入的不是数字")17 continue
四、购物车 功能要求: 要求用户输入总资产,例如:2000 显示商品列表,让用户根据序号选择商品,加入购物车 购买,如果商品总额大于总资产,提示账户余额不足,否则,购买成功。 附加:可充值、某商品移除购物车 goods = [
{"name": "电脑", "price": 1999}, {"name": "鼠标", "price": 10}, {"name": "游艇", "price": 20}, {"name": "美女", "price": 998}, ]
1 total = 20000 2 shopping_cart ={} 3 sum_shopping_price = 0 4 goods = [ 5 { "name": "电脑", "price": 1999}, 6 { "name": "鼠标", "price": 10}, 7 { "name": "游艇", "price": 20}, 8 { "name": "美女", "price": 998}, 9 ]10 for i in goods:11 print(i["name"], i["price"])12 13 while True:14 choice_goods = input("请选择商品:\n(结算(j):")15 # 循环所有商品,查找需要的商品16 if choice_goods == "j":17 break18 for item in goods:19 if item["name"] == choice_goods:20 # 选择商品加入购物车21 name = item["name"]22 if name not in shopping_cart.keys():23 shopping_cart[name] = {24 "single_price": item['price'],25 "num": 1,26 }27 print("%s加入购物车" % name)28 else:29 shopping_cart[name]["num"] += 130 print("%s该商品购买%s件" % (name, shopping_cart[name]["num"]))31 # print(shopping_cart)32 for k, v in shopping_cart.items():33 #{ 34 # '电脑': {'single_price': 1999, 'num': 1},35 # '鼠标': {'single_price': 10, 'num': 1},36 # '美女': {'single_price': 998, 'num': 1}37 # }38 x = v['single_price']39 y = v['num']40 single_shopping_price = x * y41 sum_shopping_price += 142 43 if sum_shopping_price < total:44 45 print("以下商品%s购买成功,剩余%s" % (shopping_cart,total-sum_shopping_price))46 else:47 print("余额不足")
五、用户交互,显示省市县三级联动的选择
dic = { "河北": { "石家庄": ["鹿泉", "藁城", "元氏"], "邯郸": ["永年", "涉县", "磁县"], }, "河南": { "郑州": ["鹿泉1", "藁城1", "元氏1"], "洛阳": ["永年1", "涉县1", "磁县1"], }, "山西": { "太远": ["鹿泉2", "藁城2", "元氏2"], "大同": ["永年2", "涉县2", "磁县2"], } }
1 dic = { 2 "河北": { 3 "石家庄": ["鹿泉", "藁城", "元氏"], 4 "邯郸": ["永年", "涉县", "磁县"], 5 }, 6 "河南": { 7 "郑州": ["鹿泉1", "藁城1", "元氏1"], 8 "洛阳": ["永年1", "涉县1", "磁县1"], 9 },10 "山西": {11 "太远": ["鹿泉2", "藁城2", "元氏2"],12 "大同": ["永年2", "涉县2", "磁县2"],13 }14 }15 while True:16 for k in dic:17 print(k)18 i1 = input("请选择省份:")19 if i1 in dic.keys():20 #地级市21 one_city = dic[i1]22 for v in one_city:23 print(v)24 i2 = input("请选择地级市:")25 if i2 in one_city:26 #县城27 two_city = dic[i1][i2]28 for z in two_city:29 print(z)30 break31 else:32 print("你输入省份不存在")33 continue