python综合实例购物车

1.问题描述

用所学·python语法实现一个购物车,包括以下要求。

  1. 能够制定商品条目。

  2. 初始启动程序,让用户输入初始金额。

  3. 用户可选择如下操作。
    0:退出。
    1:查看商品列表。
    2:加入购物车。
    3:结算购物车。
    4:查看余额。
    5:清空购物车及购买历史。

  4. 允许用户根据商品编号购买商品。

  5. 用户选择结算·购物车后检测余额是否足够,够就直接·扣款,不够就提醒。

  6. 用户可以一直购买商品,也可以直接退出。

  7. 用文件保存购买历史、购物车历史以及商品列表。

2.程序设计样例如下

import numpy as np
products = {'Iphone8':6888, 'Macpro':14800,'mi6':2499,'Coffee':31,'Book':80,'Nike shoes':799}
shopping_cart = {}
buy = {}
#从文件中读取shopping_cart、buy以及products三个字典,若没有就用默认的初始化情况
def initialize():
    try:
        f = open('shopping_cart.txt','r')
        a = f.read()
        global shopping_cart    #global用于修改全局变量
        shopping_cart = eval(a) #eval()函数用来执行一个字符串表达式,并返回表达式的值。在这里即返回从文件中读取到的字典。
        f.close()
        f = open('buy.txt','r')
        a = f.read()
        global buy
        buy = eval(a)
        f.close()
        f = open('products.txt','r')
        a.f.read()
        global products
        products = eval(a)
        f.close()
    except FileNotFoudError:
        pass

#展示商品,当参数为1时,输出所有商品;当参数为3时,输出购物车中的商品
def show_item(content):
    print("#################################################")
    if content == 1:
        print("序号{:<10s}商品名称{:<10s}价格{:<10s}".format(" "," "," "))
#format控制输出格式,{}部分用后面的空格替代
        k = 0
        for i in products:
            print("{:<14d}{:<18s}{}".format(k,i,products[i]))
            k = k+1
    elif content == 3:
        printf("购物车中有如下商品:")
        print("序号{:<10s}商品名称{:<10s}价格{:<10s}数量{:<10s}".format(" "," "," "," "))
        k = 0
        for i in shopping_cart:
            print("{:<14d}{:<18s}{:<14d}{}".format(k,i,products[i],shopping_cart[i]))
            k = k+1

#展示可进行的操作
def show_operation():
    print("######################################################")
    print("您可进行如下操作(选择对应序号即可)")
    print("0退出")
    print("1查看商品列表")
    print("2加入购物车")
    print("3结算购物车")
    print("4查看余额")
    print("5清空购物车及购买历史")
    choice = input('您选择的操作是:')
    return choice

#将商品加入购物车
def in_cart():
    show_item(1)
    print("您想加入购物车的是?")
    while true:
        choice = input('请输入所选择商品序号:')
        if choice.isdigit():
            choice = int(choice)
            if 0<=choice<len(products):
                break
            else:
                print("无该商品!")
        else:
            print("无该商品!")
    product = list(products)[choice]
    if product in shopping_cart:
        shopping_cart[product] +=1
    else:
        shopping_cart[product] = 1
    print("已帮您加入购物车")

#买家完成付款
def pay(money):
    show_intem(3)
    list_pay = input("您想结算的商品是?")
    xlist = list_pay.split(",")
    xlist = [int(xlist[i]) for i in range(len(xlist)) if 0<= int(xlist[i])<len(shopping_cart)]
    c,s=np.unique(xlist,return_cousts=True)   #np.unique用于对list排序,当可选参数return_counts=True时,返回两个参数:第一个参数是去除数组中的重复数字后,进行排序的结果,第二个参数是第一个返回参数中每个元素在原list中的个数
    total = 0
    pay_item = [list(shopping_cart)[c[i]] for i in range(len(c))]
    for i in range(len(c)):
        total +=products[pay_item[i]]*s[i]
    if total<money:
        for i in range(len(pay_item)):
            if pay_item[i] in buy:
                buy[pay_item[i]] += s[i]
            else:
                buy[pay_item[i]] = 1
            shopping_cart[pay_item[i]] -= 1
            if shopping_cart[pay_item[i]] == 0:
                del shopping_cart[pay_item[i]]
        print("已经结算清!")
        return total
    else:
        print("余额不足!")
        return 0

#清空购物车以及购物车历史,即清空对应的字典即可
def clean_history():
    global buy
    buy.clear()
    global shopping_cart
    shopping_cart.clear()

if __name__=='__main__':
    initialize()
    money = int(input('请输入初始金额:'))
    while True:
        choice = show_operation()
        if choice.isdigit():
            choice = int(choice)
            if choice == 0:
                break
            elif choice == 1:
                show_item(1)
            elif choice == 2:
                in_cart()
            elif choice == 3:
                delta = pay(money)
            elif choice == 4:
                print("当前余额:",money)
            elif choice == 5:
                clean_history()
                print("已清空历史")
            else:
                print("操作不当!")
        else:
            print("操作不当!")

#将购物车和已购买的字典存储
f = open('shopping_cart.txt','w')
f.write(str(shopping_cart))
f.close()
f = open('buy.txt','w')
f.write(str(buy))
f.close()
f = open('products.txt','w')
f.write(str(products))
f.close()
print("购物信息已经储存好,欢迎下次光临!")

由于我的电脑的某些原因它无法运行
在这里插入图片描述
然后如果你们也报错了可以试试
第一步:找到你python文件所在的文件夹,右键属性查看属性状态
第二步:取消勾选只读,然后确定即可
然后再去直接运行你的文件试试
当然还可能是一些更小白的问题,比如你想写入的文件正在打开或者你的代码需要你自己先创建文件,这也可能会返回这个错误。

最后,希望大家能避免这些错误,给自己节省一点宝贵的时间。

  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论
Python中实现一个简单的购物结算功能,通常涉及到以下几个步骤: 1. **创建商品类**:定义一个商品类(例如`Product`),包含属性如名称、价格、数量等。 ```python class Product: def __init__(self, name, price): self.name = name self.price = price self.quantity = 0 def set_quantity(self, quantity): self.quantity = quantity def get_total_cost(self): return self.price * self.quantity ``` 2. **购物类**:创建一个购物类(例如` ShoppingCart`),用于存储商品和处理结算。 ```python class ShoppingCart: def __init__(self): self.items = [] def add_item(self, product, quantity=1): item = product item.set_quantity(quantity) self.items.append(item) def remove_item(self, product_name, quantity=None): for item in self.items: if item.name == product_name: if quantity is not None: item.set_quantity(item.quantity - quantity) else: self.items.remove(item) break def total_cost(self): return sum(item.get_total_cost() for item in self.items) ``` 3. **使用示例**: ```python # 创建商品实例 apple = Product("Apple", 1.5) banana = Product("Banana", 0.5) # 添加商品到购物 cart = ShoppingCart() cart.add_item(apple, 3) cart.add_item(banana, 2) # 结算 print(f"Total cost: {cart.total_cost():.2f}") # 删除商品 cart.remove_item("Apple", 1) print(f"New total cost after removing an apple: {cart.total_cost():.2f}") ``` 这个例子中,购物可以添加商品,查询总成本,以及删除特定商品。你可以根据需求扩展购物的功能,比如计算优惠后的总价、查看购物内容等。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Unicornlyy

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值