文章详情

陈述

在一家软件开发公司进行面试时,面试官提出了一个业务上的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。

发表评论
暂无评论

还没有评论呢,快来抢沙发~