我已经实现了字典/散列算法,以便为每个播放的队伍添加分数(t1,t2代表队伍,p1,p2代表每场比赛各自的分数)。如果一支客场球队获胜,则会增加3500分,如果主队获胜,则增加3000分,如果他们获胜则增加1000分,如果他们输了则增加50分我的代码确实如此,但是当两个团队在最终排行榜上排在第一位或最后一位时,我会遇到错误。我的导师建议使用元组保持一个"计数器"但是,由于元组不可变,我不知道如何在不增加程序运行时间的情况下处理这个问题。有任何想法吗?
import sys
def firstLast(q):
games = {}
for i in range(q):
t1, t2, p1, p2 = input().strip().split(' ')
t1, t2, p1, p2 = [t1, t2, int(p1), int(p2)]
if t1 not in games:
games[t1] = p1
else:
games[t1] += p1
if t2 not in games:
games[t2] = p2
else:
games[t2] += p2
if p1>p2:
games[t1]+=3000
games[t2]+=50
elif p1==p2:
games[t1]+=1000
games[t2]+=1000
elif p1<p2:
games[t1]+=50
games[t2]+=3500
#first = max(games.values())
#last = min(games.values())
first = max(games, key=games.get)
last = min(games, key=games.get)
print (first,last,sep='\n')
if __name__ == "__main__":
q = int(input())
result = firstLast(q)
答案 0 :(得分:0)
这是一个返工,打印所有并列第一个或最后一个而不是随机显示一个的球队:
from collections import defaultdict
def firstLast(q):
games = defaultdict(int)
for _ in range(q):
t1, t2, p1, p2 = input().strip().split(' ')
p1, p2 = int(p1), int(p2)
games[t1] += p1
games[t2] += p2
if p1 > p2:
games[t1] += 3000
games[t2] += 50
elif p1 < p2:
games[t1] += 50
games[t2] += 3500
else:
games[t1] += 1000
games[t2] += 1000
maximum = max(games.values())
minimum = min(games.values())
first = [key for key, value in games.items() if value == maximum]
last = [key for key, value in games.items() if value == minimum]
print(' '.join(first), ' '.join(last), sep='\n')
if __name__ == "__main__":
q = int(input())
firstLast(q)
但是,这并不是你想要的。我的问题是我无法理解“最后排在最后一位的球队”的概念。也许如果您提供了一些示例,它可能会帮助我和/或其他人回答您的问题。