Python 使用类模拟一个在线购物车,支持添加商品、删除商品等操作(长文讲解)

Python 使用类模拟一个在线购物车,支持添加商品、删除商品等操作

快速解决

直接使用 Python 类模拟一个在线购物车,可以实现添加商品、删除商品、查看购物车、计算总价等常见功能。下面是一个完整的示例代码:

class ShoppingCart:
    def __init__(self):
        self.items = {}  # 使用字典存储商品,键是商品名,值是数量

    def add_item(self, item, quantity):
        if item in self.items:
            self.items[item] += quantity  # 如果商品已存在,增加数量
        else:
            self.items[item] = quantity  # 如果商品不存在,添加新条目

    def remove_item(self, item, quantity):
        if item in self.items:
            if self.items[item] > quantity:
                self.items[item] -= quantity  # 如果商品数量大于要移除的数量
            else:
                del self.items[item]  # 否则直接删除该商品
        else:
            print("该商品不在购物车中")

    def view_cart(self):
        return self.items

    def total_price(self, prices):
        return sum(prices[item] * quantity for item, quantity in self.items.items())

常用方法

方法名 功能说明 使用频率
add_item() 向购物车中添加商品和数量
remove_item() 从购物车中移除商品和数量
view_cart() 查看当前购物车中的所有商品
total_price() 计算购物车中商品的总价格
clear_cart() 清空购物车
item_count() 获取某个商品的当前数量

详细说明

添加商品

add_item(item, quantity) 方法允许用户将商品及其数量添加到购物车中。如果商品已经存在,就增加数量;如果不存在,则添加新条目。以下是一个使用示例:

cart = ShoppingCart()
cart.add_item("苹果", 2)  # 添加苹果,数量为 2
cart.add_item("香蕉", 3)  # 添加香蕉,数量为 3
cart.add_item("苹果", 1)  # 再添加 1 个苹果,总数变为 3

print(cart.view_cart())  # 输出 {'苹果': 3, '香蕉': 3}

删除商品

remove_item(item, quantity) 方法允许用户从购物车中删除指定数量的商品。如果删除数量超过当前库存,则会将该商品从购物车中移除。以下是示例代码:

cart = ShoppingCart()
cart.add_item("苹果", 3)
cart.add_item("香蕉", 3)

cart.remove_item("苹果", 1)  # 移除 1 个苹果
cart.remove_item("香蕉", 3)  # 移除全部 3 个香蕉

print(cart.view_cart())  # 输出 {'苹果': 2}

计算总价

total_price(prices) 方法接收一个商品价格字典,用于计算当前购物车中所有商品的总价。这是一个典型的业务逻辑方法,用于模拟结账前的价格预览:

cart = ShoppingCart()
cart.add_item("苹果", 2)
cart.add_item("香蕉", 1)

prices = {"苹果": 5, "香蕉": 3}  # 商品价格字典
print(cart.total_price(prices))  # 输出 13,2个苹果 × 5 + 1个香蕉 × 3

高级技巧

自动库存检查

在实际场景中,商品库存有限。我们可以扩展 ShoppingCart 类,使其支持库存检查:

class ShoppingCart:
    def __init__(self, inventory):
        self.items = {}
        self.inventory = inventory  # 存储商品库存

    def add_item(self, item, quantity):
        if item in self.inventory and self.inventory[item] >= quantity:
            if item in self.items:
                self.items[item] += quantity
            else:
                self.items[item] = quantity
            self.inventory[item] -= quantity  # 库存减少
        else:
            print("库存不足,无法添加该商品")

    def remove_item(self, item, quantity):
        if item in self.items and self.items[item] >= quantity:
            self.items[item] -= quantity
            self.inventory[item] += quantity  # 库存增加
            if self.items[item] == 0:
                del self.items[item]
        else:
            print("购物车中商品数量不足,无法移除")

    def view_cart(self):
        return self.items

    def view_inventory(self):
        return self.inventory

支持商品单价变化

在动态定价系统中,商品价格可能会变化。我们可以在 ShoppingCart 中加入商品单价的更新功能:

class ShoppingCart:
    def __init__(self):
        self.items = {}
        self.prices = {}  # 存储商品单价

    def add_item(self, item, quantity, price):
        if item in self.items:
            self.items[item] += quantity
        else:
            self.items[item] = quantity
        self.prices[item] = price  # 设置或更新商品价格

    def remove_item(self, item, quantity):
        if item in self.items:
            if self.items[item] > quantity:
                self.items[item] -= quantity
            else:
                del self.items[item]
        else:
            print("该商品不在购物车中")

    def total_price(self):
        return sum(self.prices[item] * quantity for item, quantity in self.items.items())

    def update_price(self, item, new_price):
        if item in self.prices:
            self.prices[item] = new_price
        else:
            print("该商品未添加到购物车")

常见问题

问题 1:如何处理购物车中商品数量为零的情况?

答:在 remove_item() 方法中,可以检测商品数量是否减少至零,如果是,则从购物车中移除该商品。

问题 2:如何处理用户尝试添加购物车中没有的商品?

答:add_item() 方法会检查商品是否存在于库存中,若不存在则拒绝添加并提示用户。

问题 3:如何获取购物车中某个商品的总金额?

答:可以使用 total_price() 方法结合 prices 字典,计算指定商品的总价,例如:

def get_item_total(self, item, prices):
    if item in self.items and item in prices:
        return prices[item] * self.items[item]
    else:
        return 0

问题 4:如何清空整个购物车?

答:可以添加一个 clear_cart() 方法,将 items 字典清空:

def clear_cart(self):
    self.items.clear()
    print("购物车已清空")

总结

通过 Python 类可以方便地模拟一个支持添加商品、删除商品等操作的在线购物车,代码结构清晰、易于扩展,是实现购物车逻辑的有效方式。