我有一个代码,它读取目录中的所有文件,并将每个文件的最高值附加到列表中。问题是它确实识别了数字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]发布于 2016-03-23 18:32:52
具体的问题是这一行:
scores.append(max(str(n.strip()) for n in txt_file))您正在获取最大str值,字符串比较的方式与所有其他序列相同:比较第一个元素,如果它们是相同的,那么下一步比较.所以当你这么做的时候
max("10","9")它首先将"1“与"9”进行比较,并看到"9“被认为更大,因此返回的字符串需要将它们转换为ints,以便将它们作为ints进行比较:
scores.append(max(int(n.strip()) for n in txt_file))
# ^ right here尽管由于您正在打开目录中的每个文件(如果其中任何文件包含任何其他内容),那么每个行上的有效数字都会失败,因此您可能希望尝试/除,但如果不知道files是如何定义的,就不能给出一个示例,因为分数和文件需要相同的长度。
https://stackoverflow.com/questions/36185815
复制相似问题