max()无法识别2位数字吗?

时间:2016-03-23 18:18:40

标签: python-3.x

我有一个代码,它读取目录中的所有文件,并将每个文件中的最高值附加到列表中。问题是它确实识别数字10,但识别所有数字0-9。每个文件包含每个人的最后三个分数,从1-10开始。但是,如果此人得分为10,则程序不会将其作为最高值读取,并从文件中选择第二高,并将其附加到列表中。如果他们的分数都不是10,则代码可以正常工作。然后代码应该根据每个人的最高分数对列表进行排序,这确实有效,但是因为它将错误的分数附加到列表中,因此它也会错误地对其进行排序。

例如:

[3,6,8],最高分为8,没问题

[6,10,9],最高分是9,为什么?

相关的代码部分如下。附:我已经导入了所有模块并在开始时声明了所有变量(这里不可见),所以这不是问题。感谢您的帮助

scores = []
for file in os.listdir(path):
    file = os.path.join(path, file)
    if os.path.isfile(file):
        with open(file, 'r') as txt_file:
            scores.append(max(str(n.strip()) for n in txt_file))

results = list(zip(files, scores))
results.sort(key=operator.itemgetter(1), reverse=True)
student_list = [x + ": " + y for x, y in results]

1 个答案:

答案 0 :(得分:1)

问题特别在于这一行:

scores.append(max(str(n.strip()) for n in txt_file))

你正在抓取最大str值,字符串与所有其他序列的比较方式相同:比较第一个元素,如果它们相同则比较下一个...所以当你这样做时:

max("10","9")

首先比较" 1"反对" 9"并看到" 9"被认为是更大的,因此返回的字符串,您需要将它们转换为int s,以便它们作为int s进行比较:

scores.append(max(int(n.strip()) for n in txt_file))
                #  ^ right here

虽然如果你打开目录中的每个文件,如果任何文件包含其他任何文件,那么每行都有效,这会失败,所以你可能想要一个try / except,虽然我不知道你不知道一个例子如何定义files因为分数和文件的长度必须相同。