背景介绍
在计算机专业面试中,面试官往往会通过一些实际的来考察者的技术能力和解决的能力。是一个业务上BUG的面试旨在考察你对业务逻辑的理解和代码调试技巧。
陈述
在一家电商平台的后端系统中,负责处理用户订单的模块出现了一个BUG。当用户提交订单时,系统会自动计算订单的总价,根据用户选择的支付来决定是否收取额外的手续费。具体逻辑如下:
1. 订单总价 = 商品单价 * 商品数量
2. 支付为“在线支付”,则不收取手续费。
3. 支付为“”,则收取订单总价的5%作为手续费。
4. 支付为“分期付款”,则收取订单总价的10%作为手续费。
在上述逻辑中,假设有一个订单的商品单价为100元,商品数量为2件,用户选择了“分期付款”的支付。根据上述逻辑,系统应该收取多少手续费?请找出代码中的BUG,并说明原因。
代码示例
是一个简化的代码示例,用于处理上述业务逻辑:
python
def calculate_order_total(price, quantity):
return price * quantity
def calculate_handling_fee(payment_method, total):
if payment_method == "在线支付":
return 0
elif payment_method == "":
return total * 0.05
elif payment_method == "分期付款":
return total * 0.10
else:
return "无效的支付"
def process_order(price, quantity, payment_method):
total = calculate_order_total(price, quantity)
handling_fee = calculate_handling_fee(payment_method, total)
return total, handling_fee
# 测试代码
order_price = 100
order_quantity = 2
payment_method = "分期付款"
total, handling_fee = process_order(order_price, order_quantity, payment_method)
print(f"订单总价: {total}, 手续费: {handling_fee}")
解答
根据上述代码示例,当订单的商品单价为100元,商品数量为2件,用户选择了“分期付款”的支付时,系统应该收取的手续费为20元。
这段代码中存在一个BUG。在于`calculate_handling_fee`函数中对于“分期付款”的手续费计算逻辑。按照题目手续费应该是订单总价的10%,在代码中,手续费的计算逻辑是错误的。正确的手续费计算应该是:
python
def calculate_handling_fee(payment_method, total):
if payment_method == "在线支付":
return 0
elif payment_method == "":
return total * 0.05
elif payment_method == "分期付款":
return total * 0.10
else:
return "无效的支付"
在上述代码中,`calculate_handling_fee`函数中对于“分期付款”的手续费计算使用了`total * 0.10`,这是正确的。订单的商品数量不是1件,而是多件,手续费的计算逻辑也会随之改变。按照题目手续费应该是基于订单总价的百分比,而不是基于每件商品的单价。
正确的处理是在计算订单总价时就考虑商品数量的影响,在计算手续费时使用这个总价。是修正后的代码:
python
def calculate_order_total(price, quantity):
return price * quantity
def calculate_handling_fee(payment_method, total):
if payment_method == "在线支付":
return 0
elif payment_method == "":
return total * 0.05
elif payment_method == "分期付款":
return total * 0.10
else:
return "无效的支付"
def process_order(price, quantity, payment_method):
total = calculate_order_total(price, quantity)
handling_fee = calculate_handling_fee(payment_method, total)
return total, handling_fee
# 测试代码
order_price = 100
order_quantity = 2
payment_method = "分期付款"
total, handling_fee = process_order(order_price, order_quantity, payment_method)
print(f"订单总价: {total}, 手续费: {handling_fee}")
通过上述修正,代码能够正确计算不同支付下的手续费,包括商品数量多于一件的情况。
还没有评论呢,快来抢沙发~