如何编写接收二维序列参数、返回获胜队伍序号的函数?
实现who_won函数判断获胜队伍
需求:编写一个接受二维序列参数的函数who_won,返回获胜次数最多的队伍序号;若多个队伍获胜次数相同,返回最先出现的队伍序号。
示例
示例1:
who_won([['W', 'W', 'W'], ['L', 'L', 'L'], ['W', 'W', 'L'], ['L', 'L', 'W']]) # 输出:1
示例2:
who_won([['L', 'W', 'L'], ['W', 'W', 'L'], ['L', 'W', 'W'], ['L', 'W', 'L']]) # 输出:2
现有代码问题
你当前的代码存在几个明显问题:
def who_won(matrix): w_counter = 0 for x in matrix: for y in x: if 'W' in x: W_counter += 1
- 变量名大小写不一致:
w_counter和W_counter是两个不同变量,运行会触发未定义错误 - 冗余嵌套循环:内层循环遍历
x的每个元素,但逻辑只判断x是否含'W',完全不需要内层循环 - 逻辑错误:代码仅统计了包含'W'的子列表数量,而非每个队伍实际的获胜次数(每个子列表中'W'的总数才是该队伍的获胜次数)
正确实现方案
def who_won(matrix): max_wins = -1 winner = 0 # 遍历每个队伍,序号从1开始计数 for idx, team_results in enumerate(matrix, start=1): current_wins = team_results.count('W') # 仅当当前获胜次数超过已记录的最大值时,才更新结果 if current_wins > max_wins: max_wins = current_wins winner = idx return winner
代码说明
- 初始化
max_wins为-1(确保第一个队伍的获胜次数必然能触发更新),winner存储最终获胜队伍序号 - 用
enumerate(matrix, start=1)遍历每个队伍的结果,同时获取从1开始的队伍序号 - 通过
count('W')快速统计当前队伍的获胜次数 - 仅当当前次数大于之前的最大值时才更新结果——这保证了次数相同时,保留最先出现的队伍
- 遍历结束后返回获胜队伍序号
内容的提问来源于stack exchange,提问作者maria
相关产品推荐
相关产品推荐

