购物车
# ### 购物车 import json import time money = 0 good_lst = [] #商品列表 # 定义一个购物车字典 car = {} ''' car = { 1:{电脑... } 2:{鼠标...} } ''' with open("shopping_data.json", mode="r+", encoding="utf-8") as fp: for i in fp: # 文件对象是迭代器,一次迭代一行 dic = json.loads(i) # 用loads一行一行序列化 good_lst.append(dic) print(good_lst) """ 13 [ 0:{'name': '电脑', 'price': 1999}, 1 1:{'name': '鼠标', 'price': 10,"account":2}, 2 2:{'name': '游艇', 'price': 20}, 3 3:{'name': '美女', 'price': 998}, 4 4:{'name': '风油精', 'price': 30} 5 ] """ def progress(percent): # 用来接收传过来的百分比 if percent > 1: percent = 1 strvar = int(50 * percent) * '#' # 设置每多少百分比显示的* # 用\r操作每次传过来转换后的百分比拿到前面并替换到原来的内容,%%让后面显示多少百分比% print("\r[%-50s] %d%%" % (strvar, int(100 * percent)), end='') def exe_progress(): recv_size = 0 # 定义一个接收文件大小的变量 # 假设文件总大小是1028000 total_size = 1028000 while recv_size < total_size: # 当接收文件大小小于总文件大小时 time.sleep(0.01) # 程序等待0.01秒 # 一次接收的字节数是1024 recv_size += 6000 percent = recv_size / total_size # 计算百分比 progress(percent) # 充值 def recharge(): global money # 声明money是全局变量,用于下面在函数内部修改这个全局变量 while True: num = input("请充值吧,大哥") if num.isdecimal(): # 判断充值的金额是否是纯数字 money = int(num) print("恭喜你~ 充值成功{}元人民币".format(money)) break else: print("充值失败,非数字") # 加载 def loading(): print("加载商品中...") exe_progress() # 调用进度条函数 print() # 换行 # 展示 def show_goods(): strvar = "{}".format("商品名称").center(18) # 字符串格式化让参数并让参数,其它补空格 print("序号" + strvar + "价格") # 打印对应的商品 for k, v in enumerate(goods_lst, start=1): print(k, v) # 展示效果 k对应1 v对应{'name': '电脑', 'price': 1999} v['num'] = k # 在v字典里面添加键值对 num = 1 ... strvar = "{v[num]:<10}{v[name]:<12}{v[price]}".format(v=v) # 容器类型传参,并且填充空格,原字符串居左 print(strvar) # 错误提示 def error(): strvar = """ ************************************************** * 您输入的选项不存在 , 请重新输入 * ************************************************** """ print(strvar) time.sleep(1) # 打印完错误提示后 让程序停一秒 # 加入购物车 def add_car(num): # 把序号传入进来 if num not in car: # 如果商品序号不在购物车中 car[num] = { # 购物车里面的序号是从1开始的 "name": goods_lst[num - 1]["name"], # 商品列表中索引是从0开始的 "price": goods_lst[num - 1]["price"], "account": 1 } else: car[num]["account"] += 1 # 如果在的话 就让数量加1 print(car) """ { 序号: 商品描述(字典形式展现) 2: {'name': '鼠标', 'price': 10, 'account': 1}, 3: {'name': '游艇', 'price': 20, 'account': 1} } """ # 展示购物车清单 def show_car(num): # 把选择的商品序号传入 print("*" * 50) print("您选择的商品具体信息:") print("*-商品名称:{}".format(car[num]["name"])) # 购物车序号从1开始 print("*-商品单价:{}".format(car[num]["price"])) print("*-商品数量:{}".format(car[num]["account"])) print("已成功添加到购物车~ 请继续shopping ~") print("*" * 50) # 结算 def balance(): total = 0 print("[-------------------您购物车的具体商品如下:-------------------]") for k, v in car.items(): # 取购物车中的k和v print(k, v) v['num'] = k # 在v字典里面添加键值对num:1 ....等 # 计算当前商品总价格 v['total'] = v['price'] * v['account'] # 添加键值对 total += v['total'] # 把字典中的总价加到变量total中 strvar = "序号{v[num]}: 商品名称:{v[name]} 商品单价:{v[price]} 商品数量:{v[account]} 此商品总价:{v[total]}".format(v=v) # 容器类型传参 print(strvar) return total # 把总价格返回 # 成功结算函数 def success(total, money): print("正在结算数据中...") exe_progress() # 调用进度条 print("\n请稍后...") time.sleep(1) print("[一共:{}元]".format(total)) print("[您已经成功购买以上所有商品 , 余额还剩{}元,感谢您下次光临~]".format(money - total)) # 充值金额小于商品结算金额,需删除调用此函数 def del_goods(total, money): print("余额不足,还差{}元,请忍痛割爱,删除某些商品".format(total - money)) num = input("[-------------------请输入要删除的商品序号:-------------------]") # 判断是不是纯数字 if num.isdecimal(): # 变成数字类型 num = int(num) # 判断该商品在不在购物车当中 if num in car: # 数量-1 car[num]["account"] -= 1 #对应序号的数量-1 #如果数量变成0了,意味着要从购物车中删除商品 if not car[num]["account"]: #car[num]["account"] = 0,if not 0=>if not False =>if True car.pop(num) else: error() #商品序号不在购物车内就报错 else: error() #不是数字也报错 #退出程序 def myexit(): print("[============== 欢迎下次光临: ==============]") time.sleep(1) #主文件调用 def main(): #1.充值 recharge() #2.加载中 loading() #3.展示商品 show_goods() #4.开始购物 sign = True while sign: num = input("请输入您要购买的商品:") #购物 if num.isdecimal(): num = int(num) if num <= len(good_lst): #限制只能输入在商品列表中的序号 #添加购物车 add_car(num) #展示购物车 show_car(num) else: error() #不在商品列表中就报错 #结算 elif num.upper() == 'N': while True: #结算总价格 total = balance() #print(total,money) #判断总价格超过实际充值,提示用户删除商品 if total>money: del_goods(total,money) #调用删除商品的函数 else: success(total,money) #调用成功结算的函数 sign = False break elif num.upper() == 'Q': myexit() #调退出程序函数 sign = False else: #报错 error() main() #调主文件启动程序
-------------------------------------------
个性签名:代码过万,键盘敲烂!!!
如果觉得这篇文章对你有小小的帮助的话,记得在右下角点个“推荐”哦,博主在此感谢!