文章详情

作为一名计算机专业毕业生,你参加了一场面试。面试官提出了要求你现场定位并修复一个业务逻辑中的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。这个过程展示了在处理业务逻辑时,注意细节和精确计算的重要性。对于计算机专业的面试者来说,这类不仅考察了编程技能,还考察了逻辑思维和解决能力。