创建带变量的排行榜[python]

时间:2017-03-15 07:41:23

标签: python variables

我被要求从文件中读取(firesideResults.txt) 必须从firesideResults.txt文件计算每个玩家的总分数 并将它们显示在排行榜中。 •每场胜利必须获得3分。 •必须只包括赢得至少一场比赛的排行榜中的球员。 •必须以以下格式显示详细信息:

这是我目前的代码:

def option_C():

print("-Fixtures Leaderboard-")

print('\nPlayer Nickname\t\tMatches Played\t\tMatches Won\t\tMatches Lost\t\tPoints')

print('-' * 65)

for line in open('firesideResults.txt'):

    line = line.strip()

    nickname,played,won,lost = line.split(",")

    if int (won) >0:

        points = int(won)*3

        print(nickname+'\t'+played+'\t\t'+won+'\t\t'+lost+'\t\t'+str(points)

但我似乎无法将其显示在从最高到最低的排行榜中。

TXT FILE

Leeroy,19,7,12

詹金斯,19,8,11

泰勒,19,0,19

拿破仑威尔逊,19,7,12

Big Boss,19,7,12

Game Dude,19,5,14

Macho Man,19,3,16

太空海盗,19,6,13

Billy Casper,19,7,12O

TACON,19,7,12

大哥,19,7,12

英社,19,5,14

里普利,19,5,14

M'lady,19,4,15

Einstein100,19,8,11

丹尼斯,19,5,14

电子竞技,19,8,11

RNGesus,19,7,12

凯斯,19,9,10

幅度,19,6,13

2 个答案:

答案 0 :(得分:1)

而不是在一个循环中读取和打印所有内容,

首先将其读入列表

然后使用Python的sorted函数,阅读此处排序here

print("-Fixtures Leaderboard-")

print('\nPlayer Nickname\t\tMatches Played\t\tMatches Won\t\tMatches Lost\t\tPoints')

print('-' * 65)

scores = []
for line in open('firesideResults.txt'):
    line = line.strip()
    nickname,played,won,lost = line.split(",")
    if int (won) >0:
        points = int(won)*3
    else: 
        points = 0
    scores.append((nickname, played, won, lost, points))

sorted_scores = sorted(scores, key= lambda x: x[4], reverse=True)
for score in sorted_scores:
    print('%s\t%s\t%s\t%s\t%s' % score)

Lambda是一种没有名字的函数,请在此处阅读Python Sorted

请注意sorted_scores行中的lambda x: x[4],这表示根据第4列对列表进行排序。您可以通过更改4

对其他列进行排序

一切顺利

答案 1 :(得分:0)

不要立即打印结果,而是考虑将每一行存储在Player类中,然后将其添加到播放器列表中。迭代文件后,您可以使用sorted()中的key参数轻松按分数对列表进行排序。例如,如果您的玩家列表被调用" player_list"并且玩家类具有属性" points,"您的排序代码可能类似于

player_list = sorted(player_list, key = lambda player: player.points)

此时您可以轻松浏览列表并打印每个玩家的统计数据。