课堂练习:购物车小练习

对几天来学习的循环,list,if,input,字符转换等小功能做个综合练习

购物车的需求:

# 启动程序后,让用户输入工资,然后打印商品列表
#允许用户根据商品编号购买商品
#用户选择商品后,检测用户余额是否够,够就扣款,不够则提醒
#可以随时退出,退出时打印已购买的商品和余额
 1 #Author Mike
 2 #-----------utf-8--------------
 3 # 启动程序后,让用户输入工资,然后打印商品列表
 4 #允许用户根据商品编号购买商品
 5 #用户选择商品后,检测用户余额是否够,够就扣款,不够则提醒
 6 #可以随时退出,退出时打印已购买的商品和余额
 7 #第二版增加了各种容错和部分优化
 8 shopcart = []  # 建立一个空列表,用于存放买成功的商品
 9 commodity = [("commodity1", 10), ("commodity2", 20), ("commodity3", 30), ("commodity4", 40), ("commodity5", 60)]#建立一个商品的列表,列表的要素为元组(只读列表)
10 while True:#循环开始
11     amt=input("please input your amount:")#获取用户工资,amt变量此时是str类型
12     if amt.isdigit():#如果amt是数字字符串
13         amt=int(amt)#把amt转换为数字
14         while True:#开始第二层循环
15             # for i in commodity:
16             #    print(commodity.index(i),i)
17             for index, item in enumerate(commodity):#打印商品列表,通过枚举函数循环打印商品信息
18                 print(index, item)
19             purchasecommodity = input("please input your commdity's number")#获取采购商品的编号
20             if purchasecommodity.isdigit():#如果获取的商品编号是数字
21                 purchasecommodity=int(purchasecommodity)#把商品编号字符串转变成数字
22                 if purchasecommodity > int(len(commodity))-1 or purchasecommodity <0:#如果商品下标超过数组下标,或者为负数
23                     print("product is not exist!")#打印错误信息,重新进入第二层循环
24                 else:#如果商品编号合法
25                     price = commodity[purchasecommodity][-1]#获取商品的价格
26                     if amt >= price:#用户的账户余额如果大于商品价格
27                         amt = amt - commodity[purchasecommodity][-1]#用户的余额等于原余额-商品价格
28                         shopcart.append(commodity[purchasecommodity])#把商品元组添加到购物车数组里,注意这里不能用extend,extend是把嵌套数组的要素添加到数组里,append可以以数组形式添加要素
29                         print( "\033[32;1m%s\033[0m is added to your shop cart,your balance is \033[31;1m%s\033[0m"%(commodity[purchasecommodity][0],amt))#打印购买成功信息,包括新的账户余额(红),商品名(绿)
30                     else:#用户的钱如果不够,则提示错误
31                         print("your balance is not enough")
32             elif purchasecommodity == "q":#如果获取的商品的编号是"q"字符
33                 print("your balance is \033[31;1m%s\033[0m" % (amt))#打印用户的amt金额(红色),
34                 print("your shop cart:")#打印用户的购物车的内容
35                 # for i in shopcart:
36                 #    print(i)
37                 for index, item in enumerate(shopcart):#用枚举函数打印购物车商品
38                     print(index, item)
39                 exit()#最后退出程序
40             else:
41                 print("please input number")#如果用户输入非“q”,也非数字的字符,则提示用户输入数字,并重新进入第二层循环
42     elif amt=="q":#如果amt获取到"q"字符
43         print("bye")#打印错误信息
44         exit()#退出程序
45     else:#如果amt不是数字字符串,也不是q,则重新进入第一层循环
46         print("please input digit")#打印错误信息,循环回输入工资
第二个版本的购物车
 1 #Author Mike
 2 #-----------utf-8--------------
 3 # 启动程序后,让用户输入工资,然后打印商品列表
 4 #允许用户根据商品编号购买商品
 5 #用户选择商品后,检测用户余额是否够,够就扣款,不够则提醒
 6 #可以随时退出,退出时打印已购买的商品和余额
 7 
 8 amt=int(input("please input your amount:"))
 9 shopcart=[]
10 commodity=[["0","commodity1",10],["1","commodity2",20],["2","commodity3",30],["3","commodity4",40],["4","commodity5",60]]
11 stop=True
12 while stop:
13     for i in commodity:
14         print(i)
15     purchasecommodity=int(input("please input your commdity's number"))
16     if purchasecommodity>4:
17         print("out of range")
18     else:
19         price=commodity[purchasecommodity][-1]
20         if amt>=price:
21             amt=amt-commodity[purchasecommodity][-1]
22             shopcart.append(commodity[purchasecommodity])
23             print(commodity[purchasecommodity][1]+"is added to your shop cart")
24         else:
25             print ("balance is not enough")
26     countine_confirm = input("agein?Y|N:")  # 提示用户选择
27     if countine_confirm == "n":  # 用户选择“n”,则退出循环
28         stop = False
29 else:
30     print("your balance is" +str(amt))
31     print("your shop cart")
32     for i in shopcart:
33         print(i)
第一个版本的购物车
 1 #Author Mike
 2 #-----------utf-8--------------
 3 import openpyxl
 4 filename="d:/shoppingcart.xlsx"#定义文件的绝对路径
 5 sheet_commodity="commodity"#定义商品列表表明,存放商品的列表
 6 workbook= openpyxl.load_workbook(filename) #打开excel文件
 7 try:
 8     commoditylist=workbook.get_sheet_by_name(sheet_commodity)#获取商品表
 9 except:
10     print ("no sheet in %s named " % filename)
11 commodity={}
12 i=1
13 while i <= commoditylist.max_row:
14     commodity[commoditylist["A"+str(i)].value]=commoditylist["B"+str(i)].value
15     commoditylist["A" + str(i)].value=""
16     commoditylist["B" + str(i)].value=""
17     i+=1
18 #    print(commodity)
19 #请选择功能
20 choice=input("请输入功能0,维护商品,1,删除商品")
21 if choice=="0":
22     key=input("请输入商品名:")
23     value=input("请输入商品价格")
24     commodity.setdefault(key,value)
25 #    print(commodity)
26 elif choice=="1":
27     key = input("请输入商品名:")
28     commodity.pop(key)
29 else:
30     print("")
31 i=1
32 for p in commodity:
33     commoditylist["A" + str(i)].value=p
34     commoditylist["B" + str(i)].value=commodity[p]
35     print(p,commodity[p])
36     i+=1
37 workbook.save(filename)
第三个版本的购物车商家入口
 1 #Author Mike
 2 #-----------utf-8--------------
 3 #用户入口:
 4 #商品信息存在文件里
 5 #已购商品,余额信息长期留存
 6 import openpyxl
 7 #商家入口:
 8 #可以添加商品,修改商品价格
 9 filename="d:/shoppingcart.xlsx"#定义文件的绝对路径
10 sheet_userinfo="userinfo"#定义用户信息表表名,存放用户的余额
11 sheet_commodity="commodity"#定义商品列表表明,存放商品的列表
12 sheet_shopcart="shopcart"#定义购物车列表,存放用户已购买商品
13 workbook= openpyxl.load_workbook(filename) #打开excel文件
14 try:
15     sheet_user = workbook.get_sheet_by_name(sheet_userinfo)  # 获取用户信息表,余额信息
16 except:
17     print ("no sheet in %s named " % filename)
18 userinfo={       #建立一个字典,包含金额和购物车2个1级key,value初始均为空
19     "Amt":"",   #金额的key
20     "shopcart":[]#购物车的key,对应的value是该够的商品,是个二级字典
21 }
22 amt=sheet_user["B1"].value#从excel获取用户的余额信息
23 #print (amt)
24 #print(type(amt))
25 try:
26     sheet_commodity=workbook.get_sheet_by_name(sheet_commodity)#获取商品表
27 except:
28     print ("no sheet in %s named " % filename)
29 sheet_commodity_num_of_rows = sheet_commodity.max_row#获取商品表最大行数,为循环做准备
30 commodity=[]#建立空列表接收文件读取到的商品信息
31 i=1
32 while i <=sheet_commodity_num_of_rows:
33     onecommodity=(str(sheet_commodity["A"+str(i)].value),sheet_commodity["B"+str(i)].value)#获取表数据放进商品单品的元组
34     commodity.append(onecommodity)#添加元组到商品列表
35     i += 1#循环变量+1
36 try:
37     shopcart = workbook.get_sheet_by_name(sheet_shopcart)  # 获取用户信息表,余额信息
38 except:
39     print("no sheet in %s named " % filename)
40 
41 
42 #print (commodity)
43 #commodity = [("commodity1", 10), ("commodity2", 20), ("commodity3", 30), ("commodity4", 40), ("commodity5", 60)]#建立一个商品的列表,列表的要素为元组(只读列表)
44 while True:#循环开始
45     if amt==None:#首先处理amt,如果amt为空则要求用户输入amt
46         amt=input("please input your amount:")#获取用户工资,amt变量此时是str类型
47         if amt.isdigit():#如果amt是数字字符串
48             print(type(amt))
49             amt=int(amt)#把amt转换为数字
50     elif amt == "q":  # 如果amt获取到"q"字符
51         print("bye")  # 打印错误信息
52         exit()  # 退出程序
53     elif amt>0:
54         p = shopcart.max_row  # 获取购物车的表的最大行数
55         while True:  # 开始第二层循环
56             # for i in commodity:
57             #    print(commodity.index(i),i)
58             for index, item in enumerate(commodity):  # 打印商品列表,通过枚举函数循环打印商品信息
59                 print(index, item)
60             purchasecommodity = input("please input your commdity's number")  # 获取采购商品的编号
61             if purchasecommodity.isdigit():  # 如果获取的商品编号是数字
62                 purchasecommodity = int(purchasecommodity)  # 把商品编号字符串转变成数字
63                 if purchasecommodity > int(len(commodity)) - 1 or purchasecommodity < 0:  # 如果商品下标超过数组下标,或者为负数
64                     print("product is not exist!")  # 打印错误信息,重新进入第二层循环
65                 else:  # 如果商品编号合法
66                     price = commodity[purchasecommodity][-1]  # 获取商品的价格
67                     if amt >= price:  # 用户的账户余额如果大于商品价格
68                         amt = amt - commodity[purchasecommodity][-1]  # 用户的余额等于原余额-商品价格
69                         sheet_user["B1"].value=amt#把用户的最新余额保存到excel
70                         userinfo["shopcart"].append(commodity[purchasecommodity])  # 把商品元组添加到购物车数组里,注意这里不能用extend,extend是把嵌套数组的要素添加到数组里,append可以以数组形式添加要素
71 #                        print (commodity[purchasecommodity][0])
72                         shopcart["A" + str(p)].value = commodity[purchasecommodity][0]  # 把已购商品名称加入购物车
73                         shopcart["B" + str(p)].value = commodity[purchasecommodity][1]  # 把已购商品价格加入购物车
74                         p+=1
75                         print("\033[32;1m%s\033[0m is added to your shop cart,your balance is \033[31;1m%s\033[0m" % (
76                         commodity[purchasecommodity][0], amt))  # 打印购买成功信息,包括新的账户余额(红),商品名(绿)
77                     else:  # 用户的钱如果不够,则提示错误
78                         print("your balance is not enough")
79             elif purchasecommodity == "q":  # 如果获取的商品的编号是"q"字符
80                 print("your balance is \033[31;1m%s\033[0m" % (amt))  # 打印用户的amt金额(红色),
81                 print("your shop cart:")  # 打印用户的购物车的内容
82                 for index, item in enumerate(userinfo["shopcart"]):  # 用枚举函数打印购物车商品
83                     print(index, item)
84 #                wb = load_workbook("d:/shoppingcart.xlsx")
85                 workbook.save(filename)
86                 exit()  # 最后退出程序
87             else:
88                 print("please input number")  # 如果用户输入非“q”,也非数字的字符,则提示用户输入数字,并重新进入第二层循环'''
89     else:  # 如果amt不是数字字符串,也不是q,则重新进入第一层循环
90         print("please input digit")  # 打印错误信息,循环回输入工资
91         exit()
第三个版本的购物车

 

posted on 2017-11-14 13:52  敏少爷  阅读(173)  评论(0编辑  收藏  举报

导航