首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >max()不识别2位数字吗?

max()不识别2位数字吗?
EN

Stack Overflow用户
提问于 2016-03-23 18:18:40
回答 1查看 379关注 0票数 0

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

例如:

3,6,8,最高分是8,没问题

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

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

代码语言:javascript
复制
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]
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-03-23 18:32:52

具体的问题是这一行:

代码语言:javascript
复制
scores.append(max(str(n.strip()) for n in txt_file))

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

代码语言:javascript
复制
max("10","9")

它首先将"1“与"9”进行比较,并看到"9“被认为更大,因此返回的字符串需要将它们转换为ints,以便将它们作为ints进行比较:

代码语言:javascript
复制
scores.append(max(int(n.strip()) for n in txt_file))
                #  ^ right here

尽管由于您正在打开目录中的每个文件(如果其中任何文件包含任何其他内容),那么每个行上的有效数字都会失败,因此您可能希望尝试/除,但如果不知道files是如何定义的,就不能给出一个示例,因为分数和文件需要相同的长度。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/36185815

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档