背景
在计算机专业的面试中,面试官往往会针对者的专业知识和技术能力提出一些具有挑战性的。业务上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` 方法通过遍历字典来计算总价,考虑了商品的数量。
通过这些修改,购物车类的逻辑变得更加健壮,能够正确处理商品的添加、删除、修改和结算操作。
还没有评论呢,快来抢沙发~