作为一名计算机专业毕业生,你参加了一场面试。面试官提出了要求你现场定位并修复一个业务逻辑中的BUG。是背景和代码片段:
背景:
某电商平台的后台系统存在一个订单处理模块,该模块负责处理用户提交的订单。当用户提交订单后,系统会根据订单中的商品总价和用户选择的优惠活动,计算的订单价格。订单价格低于某个阈值,系统会自动为用户赠送一定数量的积分。
代码片段:
python
def calculate_final_price(total_price, discount):
if discount == 'none':
final_price = total_price
elif discount == '10%':
final_price = total_price * 0.9
elif discount == '20%':
final_price = total_price * 0.8
else:
final_price = total_price
return final_price
def apply_discount_and_points(total_price, discount):
final_price = calculate_final_price(total_price, discount)
if final_price < 100:
points = final_price // 10
final_price += points
return final_price, points
# 示例
order_total_price = 120
user_discount = '20%'
final_price, points = apply_discount_and_points(order_total_price, user_discount)
print(f"Final Price: {final_price}, Points: {points}")
:
面试官指出,当用户选择20%的折扣时,系统计算出的积分应该为12分,但输出为10分。请分析代码,找出并修复这个BUG。
分析
我们需要理解代码的功能。`calculate_final_price` 函数根据用户选择的折扣计算价格,而 `apply_discount_and_points` 函数在计算价格的基础上,价格低于100元,则根据价格自动赠送积分。
根据面试官的提示,我们知道当用户选择20%的折扣时,价格应该是96元,根据积分赠送规则,用户应该获得9.6分,但由于积分以整数形式赠送,应该是10分。
代码中计算积分的行 `points = final_price // 10` 使用了整数除法,这意味着它将向下取整。即使价格是96元,计算出的积分也将是9分,而不是预期的10分。
BUG修复
为了修复这个BUG,我们需要确保当价格低于100元时,即使计算出的积分不是整数,也至少赠送10分。是修复后的代码:
python
def calculate_final_price(total_price, discount):
if discount == 'none':
final_price = total_price
elif discount == '10%':
final_price = total_price * 0.9
elif discount == '20%':
final_price = total_price * 0.8
else:
final_price = total_price
return final_price
def apply_discount_and_points(total_price, discount):
final_price = calculate_final_price(total_price, discount)
if final_price < 100:
points = max(1, int(final_price // 10))
final_price += points
return final_price, points
# 示例
order_total_price = 120
user_discount = '20%'
final_price, points = apply_discount_and_points(order_total_price, user_discount)
print(f"Final Price: {final_price}, Points: {points}")
在这个修复中,我们使用 `max(1, int(final_price // 10))` 来确保即使积分计算结果小于1,也至少赠送1分。这样,当用户选择20%的折扣时,价格是96元,积分将正确计算为10分。
通过分析代码中的逻辑错误,我们成功地定位并修复了BUG。这个过程展示了在处理业务逻辑时,注意细节和精确计算的重要性。对于计算机专业的面试者来说,这类不仅考察了编程技能,还考察了逻辑思维和解决能力。
还没有评论呢,快来抢沙发~