欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

项目分享:模拟购物车

程序员文章站 2022-06-22 10:38:10
项目一:模拟购物车 声明: 项目代码纯粹本人自己编写,无任何抄袭、转载等情况,所以写的很low,仅供大家参考 项目要求: 1. 用户先给自己的账户充钱:比如先充3000元。 2. 有如下的一个格式: 3. 页面显示序号 + 商品名称 + 商品价格,如:1 电脑 1999 4. 用户输入选择的商品序号 ......

项目一:模拟购物车

声明:

项目代码纯粹本人自己编写,无任何抄袭、转载等情况,所以写的很low,仅供大家参考

项目要求:

  1. 用户先给自己的账户充钱:比如先充3000元。

  2. 有如下的一个格式:

    goods = [
     {"name": "电脑", "price": 1999},
        {"name": "鼠标", "price": 10}, 
        {"name": "游艇", "price": 20},
        {"name": "美女", "price": 998}, 
        ]
  3. 页面显示序号 + 商品名称 + 商品价格,如:1 电脑 1999

  4. 用户输入选择的商品序号,然后打印商品名称及商品价格, 并将此商品,添加到购物车(自己定义购物车),用户还可继续添加商品。

  5. 如果用户输入的商品序号有误,则提示输入有误,并重新输入。

  6. 用户输入n为购物车结算,依次显示用户购物车里面的商品,数量及单价,若充值的钱数不足,则让用户删除某商品,直至可以购买,若充值的钱数充足,则可以直接购买。

  7. 用户输入q或者q退出程序。

  8. 退出程序之后,依次显示用户购买的商品,数量,单价,以及此次共消费多少钱,账户余额多少,并将购买信息显示。

源码:

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("输入金额有误,请重新输入!")