足球联赛积分榜排序代码调试:队名与积分匹配问题及解决方案
解决足球联赛积分榜排序的队名与数据匹配问题
我最近在编写一段处理足球联赛积分榜排序的代码时,碰到了个头疼的问题:球队的积分和净胜球能正常完成排序,但队名就是没法和对应的积分、净胜球正确匹配。折腾了一阵后终于解决了,把完整的需求和最终可运行的代码分享给有需要的朋友。
需求说明
- 需要接收联赛规模、球队名称以及赛事赛况数据
- 赛况数据格式:前两个数字对应参赛球队的列表索引(比如输入
3 1 3 3,就表示列表里的第3支球队对阵第1支球队,比赛结果是3:3)
最终解决代码
diff = [] teams = [] summary = [] teampoints = [] # 输入联赛规模 leaguesize = int(input("number of teams")) for i in range(leaguesize): teams.append(input("enter team names:\n ")) teampoints += [0] diff += [0] # 输入赛事数量及赛况 numberofgames = int(input("how many games:")) for i in range(numberofgames): summary.append(list(map(int, input().strip().split(" ")))) # 计算每支球队的积分和净胜球 for i in range(len(summary)): # 更新净胜球 diff[summary[i][0] - 1] += summary[i][2] - summary[i][3] diff[summary[i][1] - 1] += summary[i][3] - summary[i][2] # 更新积分 if summary[i][2] > summary[i][3]: teampoints[summary[i][0] - 1] += 3 elif summary[i][2] < summary[i][3]: teampoints[summary[i][1] - 1] += 3 else: teampoints[summary[i][0] - 1] += 1 teampoints[summary[i][1] - 1] += 1 # 构建球队与(积分、净胜球)的字典并排序 leaguedictionary = dict(zip(teams, zip(teampoints, diff))) # 按积分降序、净胜球降序排序(Python3.7+字典默认保留插入顺序) sorted_by_val = {k: v for k, v in sorted(leaguedictionary.items(), key=lambda element: element[1], reverse=True)} print(sorted_by_val)
关键说明
排序时通过lambda element: element[1]指定按字典的值(也就是包含积分和净胜球的元组)进行降序排序,元组比较会先对比第一个元素(积分),积分相同时再对比第二个元素(净胜球),完全贴合足球联赛的积分榜排序规则。同时借助Python3.7及以上版本字典的有序特性,确保排序后的字典能准确保留队名与对应数据的匹配关系。
内容的提问来源于stack exchange,提问作者user4516038
相关产品推荐
相关产品推荐

