Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/324.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/webpack/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 我做错了什么我得到了错误:HiScoresList.sort(key=(BestScore))TypeError:BestScore()缺少1个必需的位置参数:“b”_Python - Fatal编程技术网

Python 我做错了什么我得到了错误:HiScoresList.sort(key=(BestScore))TypeError:BestScore()缺少1个必需的位置参数:“b”

Python 我做错了什么我得到了错误:HiScoresList.sort(key=(BestScore))TypeError:BestScore()缺少1个必需的位置参数:“b”,python,Python,我正在尝试对这个外部文件进行排序,但我一直收到这个错误,不知道如何修复它。我的代码是: 打开'leadboard.txt',r作为fin: HiScores=fin.read.splitlines 他的核心列表=[] 他的分数: namescore=score.split',' 分数=strscore.strip 他的核心名单 看两个分数条目,比较哪个分数较大 A、b: 返回cmpb[1],a[1] HiScoresList.sortkey=BestScore 对于其CoreSList中的Cor

我正在尝试对这个外部文件进行排序,但我一直收到这个错误,不知道如何修复它。我的代码是:

打开'leadboard.txt',r作为fin: HiScores=fin.read.splitlines 他的核心列表=[] 他的分数: namescore=score.split',' 分数=strscore.strip 他的核心名单 看两个分数条目,比较哪个分数较大 A、b: 返回cmpb[1],a[1] HiScoresList.sortkey=BestScore 对于其CoreSList中的Core: 打印核心 这就是错误所在

  HiScoresList.sort(key=(BestScore))
TypeError:BestScore缺少1个必需的位置参数:“b”

我对python非常陌生,所以如果您能在回复中解释如何解决这个问题,我将不胜感激。它将CoreSList中的每个元素输入到该键函数中,并使用输出。即使他的coresList的每个元素都是一个元组,该元素仍然只作为一个参数传递

消除错误的简单方法是将BestScore更改为将一个2元组作为参数,而不是两个完整的参数:

def BestScore(tup):
    a, b = tup
    return cmp(b[1], a[1])
如前所述,list.sort的关键参数不是两个元素的比较函数,而是取一个元素并返回用于对该元素进行排序的值的函数

在您的情况下,假设您的HiScoreList是一个名称、分数元组列表,并且您希望对分数进行排序,则键函数将接收一个名称、分数元组,并应返回分数部分,即:

def BestScore(namescore):
    return namescore[1]
现在,由于您将分数保留为字符串,这仍然不会像预期的那样起作用,它将在2之前排序12-这些是字符串,因此它们按字典顺序排序。您可以更改BestScore以解决此问题:

def BestScore(namescore):
    return int(namescore[1])
或者从一开始就将分数转化为分数,这就是我要做的:

hiscores = []

with open('Leaderboard.txt', "r") as fin:
    for line in fin:
        line = line.strip()
        if not line:
            continue

        name, score = line.split(",", 1)
        hiscores.append((name.strip(), int(score)))

hiscores.sort(key=lambda namescore: namescore[1])
print(hiscores)

请不要大声喊叫。如果你需要在你的问题中强调一些东西,你可以。你的标题将自动设置为一个标题。此外,你的标题应该简洁地概括你的问题。我做错了什么,即使不是在所有的帽子,是一个糟糕的标题。请使用并读取。key参数指定一个参数的函数,该参数用于从每个元素提取比较键OP混淆了key函数和比较函数,但至少它的实现对比较函数有效。你的答案仍然混淆了这两个概念,但你的简易解决方案无论是作为比较函数还是作为关键函数都是完全无效的。非常感谢你真的帮了我的忙,但我正在尝试按从高分到低分的顺序打印列表,现在它按从低到高的顺序打印,只需要打印5个高分,因此如果你知道我会非常感激的it@Deadguy318关于第一点,请阅读list.sort的选项。对于第二个,查找用于列表切片的文档。