Python基于列表输入实现计分板:玩家积分累加问题求助
解决回合制比赛计分板的积分累加问题
问题说明
你已经完成了计分板的基础数据处理,但卡在了积分累加环节——需要为每场比赛的白方、黑方玩家分别累加对应得分。
示例输入:
[ ['Erik', 'Daniel', 'Charlotte', 'Anna', 'Bob', 'Femke'], ['Anna Femke 1 0', 'Bob Erik 0 1', 'Charlotte Daniel 0.5 0.5'], ['Erik Anna 1 0', 'Femke Charlotte 0.5 0.5', 'Daniel Bob 1 0'], ['Daniel Erik 0.5 0.5', 'Charlotte Anna 1 0', 'Bob Femke 1 0'] ]
期望输出:
Erik: 2.5 Daniel: 2 Charlotte: 2 Anna: 1 Bob: 1 Femke: 0.5
完整解决方案
修改后的代码
class player_result: def __init__(self, name: str): self.name = name self.points = 0.0 # 新增积分属性,初始化为0 def determine_output(input_data): # 提取玩家名单和所有回合的比赛数据 playernames = input_data[0] rounds_data = input_data[1:] # 用字典存储玩家实例,通过名字快速定位 players = {name: player_result(name) for name in playernames} # 遍历每一轮的所有比赛 for round_matches in rounds_data: for match in round_matches: # 拆分单场比赛的信息 white_player, black_player, white_score, black_score = match.split() # 转换为浮点数类型 w_points = float(white_score) b_points = float(black_score) # 累加积分 players[white_player].points += w_points players[black_player].points += b_points # 按要求格式输出最终得分 for name in playernames: print(f"{name}: {players[name].points}") # 测试示例输入 sample_input = [ ['Erik', 'Daniel', 'Charlotte', 'Anna', 'Bob', 'Femke'], ['Anna Femke 1 0', 'Bob Erik 0 1', 'Charlotte Daniel 0.5 0.5'], ['Erik Anna 1 0', 'Femke Charlotte 0.5 0.5', 'Daniel Bob 1 0'], ['Daniel Erik 0.5 0.5', 'Charlotte Anna 1 0', 'Bob Femke 1 0'] ] determine_output(sample_input)
关键修正点
- 给
player_result类添加points属性:初始化时设置为0.0,用于累计玩家得分 - 使用字典存储玩家实例:避免遍历列表查找玩家,通过名字直接定位,提升效率
- 正确处理比赛数据:拆分每场比赛的字符串,转换得分类型后,分别加到对应玩家的积分上
- 修正输入处理逻辑:直接从输入列表中提取玩家名单和回合数据,替代原代码中错误的字符串拆分逻辑
内容的提问来源于stack exchange,提问作者AndrewRed
相关产品推荐
相关产品推荐

