文章详情

背景

在计算机专业的面试中,面试官往往会针对者的专业知识和技术能力提出一些具有挑战性的。业务上BUG一条是一道常见的面试题,它不仅考验者对编程逻辑的理解,还考察其对实际业务场景的应对能力。是一道典型的业务上BUG以及相应的解答思路。

假设你正在参与一个电商平台的开发工作,该平台需要实现一个用户购物车功能。用户可以在购物车中添加商品,修改商品数量,删除商品,以及结算购物车中的商品。是一个简化版的购物车类实现,但存在一个BUG,请找出并修复它。

python

class ShoppingCart:

def __init__(self):

self.items = []

def add_item(self, item):

self.items.append(item)

def remove_item(self, item):

if item in self.items:

self.items.remove(item)

def change_item_quantity(self, item, quantity):

if item in self.items:

self.items[item] = quantity

def get_total_price(self):

total_price = 0

for item, quantity in self.items.items():

total_price += item.price * quantity

return total_price

分析

在上述代码中,有几个潜在的

1. `add_item` 方法仅将商品添加到列表中,但没有存储商品的数量。

2. `remove_item` 方法仅检查商品是否存在于列表中,但没有处理商品数量为1时的情况。

3. `change_item_quantity` 方法尝试在列表中直接修改商品的数量,这是不正确的,因为列表中存储的是商品对象,而不是商品和数量的键值对。

4. `get_total_price` 方法在计算总价时没有考虑商品数量。

解答

为了修复上述BUG,我们需要对购物车类进行修改:

python

class ShoppingCart:

def __init__(self):

self.items = {}

def add_item(self, item):

if item not in self.items:

self.items[item] = 1

else:

self.items[item] += 1

def remove_item(self, item):

if item in self.items and self.items[item] > 0:

self.items[item] -= 1

if self.items[item] == 0:

del self.items[item]

def change_item_quantity(self, item, quantity):

if item in self.items:

if quantity <= 0:

self.remove_item(item)

else:

self.items[item] = quantity

def get_total_price(self):

total_price = 0

for item, quantity in self.items.items():

total_price += item.price * quantity

return total_price

解答说明

1. 我们将购物车中的商品存储在一个字典中,键是商品对象,值是商品的数量。

2. `add_item` 方法检查商品是否已经存在于字典中,不存在,则添加商品并设置数量为1;已存在,则增加数量。

3. `remove_item` 方法检查商品是否存在数量大于0,满足条件,则减少数量;数量变为0,则从字典中删除商品。

4. `change_item_quantity` 方法检查新的数量是否合法(大于0),合法,则更新数量;不合法,则调用`remove_item`方法删除商品。

5. `get_total_price` 方法通过遍历字典来计算总价,考虑了商品的数量。

通过这些修改,购物车类的逻辑变得更加健壮,能够正确处理商品的添加、删除、修改和结算操作。

发表评论
暂无评论

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