项目分享:模拟购物车

项目一:模拟购物车

声明:

项目代码纯粹本人自己编写,无任何抄袭、转载等情况,所以写的很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("输入金额有误,请重新输入!")

转载于:https://www.cnblogs.com/tianlangdada/p/11568095.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
资源包主要包含以下内容: ASP项目源码:每个资源包中都包含完整的ASP项目源码,这些源码采用了经典的ASP技术开发,结构清晰、注释详细,帮助用户轻松理解整个项目的逻辑和实现方式。通过这些源码,用户可以学习到ASP的基本语法、服务器端脚本编写方法、数据库操作、用户权限管理等关键技术。 数据库设计文件:为了方便用户更好地理解系统的后台逻辑,每个项目中都附带了完整的数据库设计文件。这些文件通常包括数据库结构图、数据表设计文档,以及示例数据SQL脚本。用户可以通过这些文件快速搭建项目所需的数据库环境,并了解各个数据表之间的关系和作用。 详细的开发文档:每个资源包都附有详细的开发文档,文档内容包括项目背景介绍、功能模块说明、系统流程图、用户界面设计以及关键代码解析等。这些文档为用户提供了深入的学习材料,使得即便是从零开始的开发者也能逐步掌握项目开发的全过程。 项目演示与使用指南:为帮助用户更好地理解和使用这些ASP项目,每个资源包中都包含项目的演示文件和使用指南。演示文件通常以视频或图文形式展示项目的主要功能和操作流程,使用指南则详细说明了如何配置开发环境、部署项目以及常见问题的解决方法。 毕业设计参考:对于正在准备毕业设计的学生来说,这些资源包是绝佳的参考材料。每个项目不仅功能完善、结构清晰,还符合常见的毕业设计要求和标准。通过这些项目,学生可以学习到如何从零开始构建一个完整的Web系统,并积累丰富的项目经验。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值