项目分享:模拟购物车
程序员文章站
2022-04-14 23:00:19
项目一:模拟购物车 声明: 项目代码纯粹本人自己编写,无任何抄袭、转载等情况,所以写的很low,仅供大家参考 项目要求: 1. 用户先给自己的账户充钱:比如先充3000元。 2. 有如下的一个格式: 3. 页面显示序号 + 商品名称 + 商品价格,如:1 电脑 1999 4. 用户输入选择的商品序号 ......
项目一:模拟购物车
声明:
项目代码纯粹本人自己编写,无任何抄袭、转载等情况,所以写的很low,仅供大家参考
项目要求:
用户先给自己的账户充钱:比如先充3000元。
-
有如下的一个格式:
goods = [ {"name": "电脑", "price": 1999}, {"name": "鼠标", "price": 10}, {"name": "游艇", "price": 20}, {"name": "美女", "price": 998}, ]
页面显示序号 + 商品名称 + 商品价格,如:1 电脑 1999
用户输入选择的商品序号,然后打印商品名称及商品价格, 并将此商品,添加到购物车(自己定义购物车),用户还可继续添加商品。
如果用户输入的商品序号有误,则提示输入有误,并重新输入。
用户输入n为购物车结算,依次显示用户购物车里面的商品,数量及单价,若充值的钱数不足,则让用户删除某商品,直至可以购买,若充值的钱数充足,则可以直接购买。
用户输入q或者q退出程序。
退出程序之后,依次显示用户购买的商品,数量,单价,以及此次共消费多少钱,账户余额多少,并将购买信息显示。
源码:
goods = [{"name": "电脑", "price": 1999}, {"name": "鼠标", "price": 10}, {"name": "游艇", "price": 20}, {"name": "美女", "price": 998}, ] shopping_trolley = [] # 购物车 bill = [] # 结算账单 print("欢迎来到商城".center(18, "*")) while true: money = input("请充值金额:") if money.isdigit() and int(money) > 0: # 必须是大于0的整数 print(f"本次您充值的金额为:{money}元") print("商品信息".center(18, "*")) for i, el in enumerate(goods, 1): # 枚举解包出序号 value_lst = list(el.values()) print(f"序号:{i} 商品:{value_lst[0]} 价格:{value_lst[1]}") while true: number = input("请输入你想购买的商品序号(按n结算,按q退出):") if number.upper() != "q": if number.isdigit() and 0 < int(number) < len(goods) + 1: number = int(number) commodity = (number, goods[number - 1]["name"], goods[number - 1]["price"]) # 选中的物品打包 shopping_trolley.append(commodity) # 加到购物车中 print(f"商品:{goods[number - 1]['name']} 价格:{goods[number - 1]['price']}") # 格式化输出购买的商品 elif number.upper() == "n": # 结算 if shopping_trolley == []: print("购物车中无商品,请重新选择商品!") else: print("\n"+"您已选择以下商品".center(18, "*")) price_sum = 0 # 总价格初始化 remove_repeat = set(shopping_trolley) # 去重购物车 for el in remove_repeat: time = shopping_trolley.count(el) # 计算重复商品出现的次数 num, name, price = el # 解包元组 print(f"商品:{name} 价格:{price} 数量:{time}") price_sum = price_sum + price * time # 计算价格 while true: if price_sum > int(money): print("\n您充值的金额不足,请选择删除购物车中的商品!") print("\n"+"购物车".center(18, "*")) choose_num = [] remove_repeat = set(shopping_trolley) # 重复代码,目的再次展示一边购物车的东西 for el in remove_repeat: time = shopping_trolley.count(el) num, name, price = el choose_num.append(num) # 将购物车中的商品序号都加进去,一会删除时判断用 print(f"序号:{num} 商品:{name} 价格:{price} 数量:{time}") # 再次展示一边购物车的东西 number = input("请输入你想删除的商品序号:") if number.isdigit() and int(number) in choose_num: # 判断输入的序号在不在购物车中 if len(shopping_trolley) > 1: for i in range(len(shopping_trolley)): if shopping_trolley[i][0] == int(number): price_sum = price_sum - shopping_trolley[i][2] shopping_trolley.pop(i) # 删除 break # 每次只删一个,所以不存在循环列表删不干净的问题 else: # 此时购物车中只剩一件商品 shopping_trolley.clear() # 直接清空就好了 print("购物车中无商品!") price_sum = 0 # 商品总价清零 break else: print("您输入的序号有误,请重新输入!") else: choose = input("您的金额充足,确认是否购买(是/否)?") if choose == "是": print("购买成功!") for el in shopping_trolley: bill.append(el) # 将结算的商品加到账单里去 shopping_trolley.clear() # 清空购物车 price_sum = 0 # 商品总价归零 break elif choose == "否": shopping_trolley.clear() print("已清空购物车!") break else: print("您的输入有误,请重新输入!") else: print("您输入的序号有误,请重新输入!") else: print("结算清单".center(18, "*")) print("本次您购买的商品如下:") shopping_trolley.clear() price_sum = 0 remove_repeat = set(bill) # 账单去重 for el in remove_repeat: time = bill.count(el) # 计算账单中重复商品的数量 num, name, price = el print(f"商品:{name} 数量:{time} 价格:{price}") price_sum = price_sum + price * time money = int(money) - price_sum # 剩余金额 print(f"本次共消费:{price_sum}元\n账户余额为:{money}元\n已清空您的购物车,欢迎您下次光临!") break break else: print("输入金额有误,请重新输入!")