1 #第二天作业:编辑一个购物车 2 #xxx 2016/4/19 3 #模块一:选择商品,添加购物车 4 #模块二:查看购物车 5 #模块三:购买模块,钱够不够 6 #模块四:返回模块,返回上一级 7 #模块五:退出模块 8 #描述:本次作业运用了上次作业没运用到的字典,和列表与字典的嵌套;运用了while - flag 来 9 #做循环返回,另外 虽说是2级目录,不过只拿了一类商品做练习,这里没做库存计算 10 11 name = "wellcome,let's go" 12 name_left = "*" 13 name_right = "*" 14 print(50*"*") 15 print(name_left.ljust(0),name.center(50),name_right.rjust(0)) 16 print(50*"*") 17 18 kind_list = [ 19 {"kid": "1", "kname": "图书音像"}, 20 {"kid": "2", "kname": "电子产品"}, 21 {"kid": "3", "kname": "家电家具"}, 22 ] 23 24 book_list = [ 25 {"bid": "1", "book":"Java入门", "bprice": "899"}, 26 {"bid": "2", "book":"Python入门", "bprice": "234"}, 27 {"bid": "3", "book":"C入门", "bprice": "145"}, 28 ] 29 30 technology_list = [ 31 {"tid": "1", "technology":"笔记本", "tprice": "4980"}, 32 {"tid": "2", "technology":"手机", "tprice": "3782"}, 33 {"tid": "3", "technology":"硬盘", "tprice": "1234"}, 34 ] 35 36 house_list = [ 37 {"hid": "1", "house":"电饭煲", "hprice": "567"}, 38 {"hid": "2", "house":"电磁炉", "hprice": "243"}, 39 {"hid": "3", "house":"沙发", "hprice": "1486"}, 40 ] 41 user_asset = 10000 #用户资产 42 gouwuche = [] #购物车表示一个空列表 43 44 kind_flag = False 45 while not kind_flag: #外循环 46 for k in kind_list: #打印商品种类列表 47 print(k.get("kid"), " ", k.get("kname")) #字典获取输出编号,以及商品种类 48 print("你的账号存款余额:", user_asset, ) #显示余额 49 kind_num = int(input("请输入你需要购买商品类别id:")) #引导用户输入 50 print("*" * 50) 51 52 if (kind_num == 1): 53 book_flag = False 54 while not book_flag: #内循环 55 for b in book_list: 56 print(b.get("bid"), " ", b.get("book"), " ", b.get("bprice")) 57 book_choice = input("[quit(按q退出),check(按c检查购物车),pay(按p付款),back(按b返回上级)] 请输入你需要购买的书本id:") 58 print("*"*50) 59 if book_choice.isdigit(): #模块一,加入购物车 60 book_choice = int(book_choice) 61 if book_choice <= len(book_list) and book_choice > 0: #如果选择物品编号在有效范围内,则添加到购物车 62 gouwuche.append(book_list[book_choice-1]) #将选中物品加入列表,由于列表下标是从0开始的,而这里选择编号是从1开始,所以减1 63 print("你已选中了如下商品: ",gouwuche) #这里以列表方式显示了,可以优化 64 else: 65 print("输入不合法,请重新输入") #如果输入编号不在有效范围,重新输入 66 print("*"*50) 67 68 elif book_choice == "c": #模块二:检查购物车 69 total = 0 70 print("你已选中了如下商品: ","*"*50) 71 for b in gouwuche: 72 print(b.get("book"),) #检查结果,只显示物品名字(当然可以优化+价格) 73 total += int(b.get("bprice")) #计算购买总额 74 print("*"*50) 75 76 elif book_choice == "p": #模块三:购买 77 total = 0 78 print("你已选中了如下商品: ", "*" * 50) 79 for b in gouwuche: 80 print(b.get("book")," ",b.get("bprice") ) #显示购物车清单,物品名+价格 81 total += int(b.get("bprice")) 82 print("*" * 50) 83 print("你当前花费总额为:",total) 84 pay = input("你确定付款吗?y/n") 85 if pay == "y": 86 left = user_asset - total #计算余额 87 if left >= 0: 88 pay_list = gouwuche 89 gouwuche = [] #清空购物车 90 user_asset = left #变化后的资产,用于下次购买使用 91 print("付款成功") 92 else : 93 for p in gouwuche: #如果钱不够,在购物车上删除部分商品 94 print(p.get("bid"),p.get("book"),p.get("bprice")) #列出购物清单 95 dele_pay = input("请删除部分商品id:") #选择删除商品编号 96 gouwuche.pop(dele_pay -1) 97 98 print("*" * 50) 99 100 elif book_choice == "b": #如果输入b,退出循环,返回上级 101 book_flag = True #模块四:返回上级 102 103 elif book_choice == "q": #如果输入q,退出系统 104 if gouwuche : #模块五:退出系统 105 print("购物车里还有东西,请问要退出吗(y/n)") 106 quit_xitong = input("请选择:") 107 if quit_xitong == "y": 108 break #直接退出 109 else: 110 continue #退出当前循环 111 112 113 elif (kind_num == 2): 114 for t in technology_list: 115 print(t.get("tid"), " ", t.get("technology"), " ", t.get("tprice")) 116 technology = input("请输入你需要购买的电子产品名:") 117 118 elif (kind_num == 3): 119 for h in house_list: 120 print(h.get("hid"), " ", h.get("house"), " ", h.get("hprice")) 121 house = input("请输入你需要购买的家电家具:") 122 123 else: 124 print("输入不合法,是否重新输入(y/n)") 125 acc = input("请选择:") 126 if acc == "y": 127 continue 128 else: 129 kind_flag = True
执行结果:
**************************************************
* wellcome,let's go *
**************************************************
1 图书音像
2 电子产品
3 家电家具
你的账号存款余额: 10000
请输入你需要购买商品类别id:1
**************************************************
1 Java入门 899
2 Python入门 234
3 C入门 145
[quit(按q退出),check(按c检查购物车),pay(按p付款),back(按b返回上级)]
请输入你需要购买的书本id:1
**************************************************
你已选中了如下商品:
[{'book': 'Java入门', 'bid': '1', 'bprice': '899'}]
**************************************************
1 Java入门 899
2 Python入门 234
3 C入门 145
[quit(按q退出),check(按c检查购物车),pay(按p付款),back(按b返回上级)]
请输入你需要购买的书本id:c
**************************************************
你已选中了如下商品:
**************************************************
Java入门
**************************************************
1 Java入门 899
2 Python入门 234
3 C入门 145
[quit(按q退出),check(按c检查购物车),pay(按p付款),back(按b返回上级)]
请输入你需要购买的书本id:p
**************************************************
你已选中了如下商品:
**************************************************
Java入门 899
**************************************************
你当前花费总额为: 899
你确定付款吗?y/ny
付款成功
**************************************************
1 Java入门 899
2 Python入门 234
3 C入门 145
[quit(按q退出),check(按c检查购物车),pay(按p付款),back(按b返回上级)]
请输入你需要购买的书本id:q
**************************************************
1 Java入门 899
2 Python入门 234
3 C入门 145
[quit(按q退出),check(按c检查购物车),pay(按p付款),back(按b返回上级)]
请输入你需要购买的书本id:1
**************************************************
你已选中了如下商品:
[{'book': 'Java入门', 'bid': '1', 'bprice': '899'}]
**************************************************
1 Java入门 899
2 Python入门 234
3 C入门 145
[quit(按q退出),check(按c检查购物车),pay(按p付款),back(按b返回上级)]
请输入你需要购买的书本id:q
**************************************************
购物车里还有东西,请问要退出吗(y/n)
请选择:n
1 Java入门 899
2 Python入门 234
3 C入门 145
[quit(按q退出),check(按c检查购物车),pay(按p付款),back(按b返回上级)]
请输入你需要购买的书本id:b
**************************************************
1 图书音像
2 电子产品
3 家电家具
你的账号存款余额: 9101
请输入你需要购买商品类别id: