Codewars球队积分计算问题:双层for循环代码错误排查
球队积分计算双层循环实现错误排查
问题场景
给定两个列表sum_x和sum_y,分别记录球队X和Y的10场比赛结果,积分规则为:
- X得分 > Y得分:X得3分
- X得分 < Y得分:X得0分
- X得分 = Y得分:X得1分
要求返回球队X的单场积分列表及总积分。使用zip的实现运行正确,输出为([3, 3, 3, 3, 3, 0, 0, 0, 0, 0], 15);但使用双层for循环的实现出现错误:当sum_x[4]=2、sum_y[4]=1时,本该得3分却得到1分,输出为([3, 3, 3, 3, 1, 0, 0, 0, 0, 0], 13)。
错误原因分析
双层循环写法的核心问题是没有按索引一一对应比较两队的同一场比赛结果,而是错误地将sum_x的每个元素与sum_y的元素进行了不匹配的配对。
典型错误代码示例
def calculate_x_points(sum_x, sum_y): point_list = [] for x in sum_x: # 错误:内层循环遍历sum_y的所有元素,而非取对应索引的y for y in sum_y: if x > y: p = 3 elif x < y: p = 0 else: p = 1 point_list.append(p) break # 仅取sum_y的第一个元素,而非对应位置的元素 total = sum(point_list) return (point_list, total)
这种写法中,处理sum_x[4]=2时,内层循环会取sum_y的第一个元素而非sum_y[4]=1。如果sum_y[0]的值恰好等于2,就会错误判定为平局,添加1分而非正确的3分。
正确的循环实现(单层索引循环)
不需要使用双层循环,只需按索引遍历,确保同一场比赛的结果配对:
def calculate_x_points(sum_x, sum_y): point_list = [] for i in range(len(sum_x)): x = sum_x[i] y = sum_y[i] if x > y: point_list.append(3) elif x < y: point_list.append(0) else: point_list.append(1) total = sum(point_list) return (point_list, total)
总结
双层循环在此场景下完全冗余,因为我们需要的是同一场次(相同索引)的结果对比,而非两队所有比赛结果的两两组合。错误的双层循环会导致元素配对错位,进而计算出错误的积分值。
内容的提问来源于stack exchange,提问作者evg spn
相关产品推荐
相关产品推荐

