【问题标题】:Rankings are incorrect排名不正确
【发布时间】:2019-11-23 02:56:59
【问题描述】:

我根据得分、上场时间、罚球和效率对 NBA 排名前十的篮球运动员进行排名。但是,当我打印排名时,排名不正确。似乎是根据数字中每个字符的值对它们进行排名,但我希望它们按照前面提到的值的最高数量到最低数量进行排名。

我的代码:

def readData(filename):

    inputFile = open(filename, 'r')

    inputFile.readline()

    master_data_list = []

    for line in inputFile:
        master_data_list.append(line.split(","))

    return master_data_list

def points(master_data_list):

    pointList = []

    for player in master_data_list[:-3]:
        index = (player[1], player[2], player[6])
        pointList.append(index)

    return pointList

def minutes(master_data_list):

    minutesList = []

    for player in master_data_list[:-3]:
        index = (player[1], player[2], player[5])
        minutesList.append(index)

    return minutesList

def freethrows(master_data_list):

    freethrowsList = []

    for player in master_data_list[:-3]:
        index = (player[1], player[2], player[18])
        freethrowsList.append(index)

    return freethrowsList

def efficiency(master_data_list):

    effList = []

    for player in master_data_list:
        formula = int(((player[6] + player[9] + player[10] + player[11] + player[12])-((player[15] - player[16]) + (player[17] - player[18]) + player[13]))/(player[4]))
        index = (player[1], player[2], formula)
        effList.append(formula)

    return effList

def main():

    master_data_list = readData("player_career.csv")

    pointList = points(master_data_list)
    minutesList = minutes(master_data_list)
    freethrowsList = freethrows(master_data_list)
    #effList = efficiency(master_data_list)

    #got this code from 
    pointList = sorted(pointList, key = lambda x: x[2], reverse = True)
    minutesList = sorted(minutesList, key = lambda x: x[2], reverse = True)
    freethrowsList = sorted(freethrowsList, key = lambda x: x[2], reverse = True)
    #effList = sorted(effList, key = lambda x: x[2], reverse = True)

    print("Top 10 players based on total points scored.")
    for line in pointList[:10]:
        print(line[0], line[1]+"-"+line[2])
    print()

    print("Top 10 players based on total minutes.")
    for line in minutesList[:10]:
        print(line[0], line[1]+"-"+line[2])
    print()

    print("Top 10 players based on total free throws.")
    for line in freethrowsList[:10]:
        print(line[0], line[1]+"-"+line[2])
    print()

    """
    print("Top 10 players based on total efficiency.")
    for line in effList[:10]:
        print(line[0], line[1]+"-"+line[2])
    print()
    """

代码的输出:

基于总得分的前 10 名球员。
Terrell Brandon-9994
Rony Seikaly-9991
大卫·沃恩-998
巴迪珍妮特-997
Irv Torgoff-997
格雷格·巴拉德-9953
拉尔夫·辛普森-9953
约翰·卢卡斯-9951
唐·科吉斯-9948
菲尔·切尼尔-9931

基于总分钟数的前 10 名球员。
Fred Hoiberg-9976
查理·约翰逊-9972
斯图尔特·格兰杰-996
加里·格雷戈-996
基思·博根斯-9957
Al Wood-9939
肯尼·加蒂森-9930
威利斯·贝内特-993
杰克·莫利纳斯-993
科里布朗特-9925

根据总罚球数排名前 10 位的球员。
库尔特·兰比斯-999
查理·斯科特-998
沃尔特卫斯理-998
阿尔伯特·金-996
卢修斯·哈里斯-994
约翰尼·诺伊曼-991
弗兰克·约翰逊-990
玛迪·柯林斯-99
Calvin Garrett-99
鲍勃·拉基-99

我还没有做效率,所以不包括在内。

这是输入文件的示例:

player stats

如果有人有想法让他们正确排名,谢谢。

【问题讨论】:

  • 您的积分是否存储为字符串整数?在我看来它们是字符串,所以按字母顺序排序。
  • 您可以发布输入文件内容的示例吗?

标签: python


【解决方案1】:

请将此key = lambda x: x[2] 更改为key = lambda x: int(x[2]) 以比较整数,而不是字符串。

【讨论】:

    【解决方案2】:

    您需要将输入中的字符串更改为整数,例如:

    def points(master_data_list):
    
        pointList = []
    
        for player in master_data_list[:-3]:
            index = (player[1], player[2], int(player[6]))
            pointList.append(index)
    
        return pointList
    

    【讨论】:

    • 这样我得到一个错误: print(line[0], line[1]+"-"+line[2]) TypeError: can only concatenate str (not "int") to str
    • 现在将line[2] 更改为str(line[2])
    • @lenik 的答案更好。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-12-07
    • 2015-01-13
    • 1970-01-01
    相关资源
    最近更新 更多