陈述
在一家软件开发公司进行面试时,面试官提出了一个业务上的BUG是的详细
背景:
某公司的在线购物平台存在一个业务逻辑上的漏洞,当用户在购物车中添加商品时,系统不会检查该商品是否已存在,从而导致用户能够将同一件商品重复添加到购物车多次,从而影响订单的总计金额和库存管理。
:
编写一个简单的代码片段,用于修复上述漏洞。假设我们有一个商品类`Product`和一个购物车类`ShoppingCart`。`Product`类具有属性`id`和`name`,`ShoppingCart`类具有方法`add_product`,用于添加商品到购物车。请修改`add_product`方法,确保同一件商品只能被添加一次。
python
class Product:
def __init__(self, product_id, name):
self.id = product_id
self.name = name
class ShoppingCart:
def __init__(self):
self.products = []
def add_product(self, product):
# 是需要修改的部分
pass
# 测试代码
cart = ShoppingCart()
product1 = Product(1, "Laptop")
product2 = Product(2, "Smartphone")
product3 = Product(1, "Laptop") # 尝试添加相同ID的商品
cart.add_product(product1)
cart.add_product(product2)
cart.add_product(product3) # 这应该不会影响购物车中的商品列表
解答思路
为了修复这个我们需要确保在`add_product`方法中添加一个检查,以确保添加的商品在购物车中是唯一的。是一些可能的解决方案:
1. 使用集合(Set)来存储购物车中的商品,因为集合会自动去除重复的元素。
2. 在购物车类中维护一个字典,以商品的ID为键,商品的实例为值。
是对应的代码实现:
解决方案一:使用集合
python
class ShoppingCart:
def __init__(self):
self.products = set()
def add_product(self, product):
self.products.add(product)
# 测试代码
cart = ShoppingCart()
product1 = Product(1, "Laptop")
product2 = Product(2, "Smartphone")
product3 = Product(1, "Laptop")
cart.add_product(product1)
cart.add_product(product2)
cart.add_product(product3) # 会影响购物车中的商品列表
# 输出购物车中的商品
for product in cart.products:
print(f"Product ID: {product.id}, Name: {product.name}")
解决方案二:使用字典
python
class ShoppingCart:
def __init__(self):
self.products = {}
def add_product(self, product):
if product.id not in self.products:
self.products[product.id] = product
# 测试代码
cart = ShoppingCart()
product1 = Product(1, "Laptop")
product2 = Product(2, "Smartphone")
product3 = Product(1, "Laptop")
cart.add_product(product1)
cart.add_product(product2)
cart.add_product(product3) # 会影响购物车中的商品列表
# 输出购物车中的商品
for product_id, product in cart.products.items():
print(f"Product ID: {product_id}, Name: {product.name}")
以上两种解决方案都能确保在添加商品到购物车时,不会有重复的商品被添加。根据实际情况和系统的性能要求,可以选择最合适的方法来修复这个BUG。
还没有评论呢,快来抢沙发~