Python 从高到低

Python 从高到低,python,Python,我的代码有一个问题,我试图找到一种方法来显示从最高到最低的分数 但每次我这么做的时候,都会有一堆数字出现,或者说是物体 我试图从一个存储分数的文本文件中获取分数。除了这一部分,我的其余代码都很好 我尝试了很多方法,但都没有意识到自己在做什么 with open('class1.txt', 'r') as f: for f in sorted(f): name, *scores = f.split(',') hl = list(reversed(scores

我的代码有一个问题,我试图找到一种方法来显示从最高到最低的分数

但每次我这么做的时候,都会有一堆数字出现,或者说是物体

我试图从一个存储分数的文本文件中获取分数。除了这一部分,我的其余代码都很好

我尝试了很多方法,但都没有意识到自己在做什么

with open('class1.txt', 'r') as f:
    for f in sorted(f):
        name, *scores = f.split(',')
        hl = list(reversed(scores))
        print (hl)
我的文本文件如下所示:

nathan ,2, 0, 10 
adil ,8, 9, 7 
masuda ,7, 4, 6 
zain ,0, 0, 3 
abdur rauf ,2, 0, 0 
danniel ,7, 7, 2
>>> for f in sorted(f.read().splitlines()):
...     re.split('\s*,\s*', f.strip())
...     
... 
['abdur rauf', '2', '0', '0']
['adil', '8', '9', '7']
['danniel', '7', '7', '2']
['masuda', '7', '4', '6']
['nathan', '2', '0', '10']
['zain', '0', '0', '3']
这是我运行代码时得到的结果:

> [' 0\n', ' 0', '2']
[' 7\n', ' 9', '8']
[' 2\n', ' 7', '7']
[' 6\n', ' 4', '7']
[' 10\n', ' 0', '2']
[' 3\n', ' 0', '0']
什么时候真的应该是这样

adil  ,9, 8, 7
abdur rauf  ,2, 0, 0
danniel  ,7, 7, 2
masuda  ,7, 6, 4
nathan  ,10, 2, 0
zain  ,3, 0, 0
  • sorted(f)
    为您提供如下信息:

    ['abdur rauf ,2, 0, 0 \n',
     'adil ,8, 9, 7 \n',
     'danniel ,7, 7, 2\n',
     'masuda ,7, 4, 6 \n',
     'nathan ,2, 0, 10 \n',
     'zain ,0, 0, 3 \n']
    
    注意这里有一些
    \n
    ,这意味着新行

    解决方案:

    简单地使用如下内容:

  • f.split(',')
    为您提供了(在修复
    \n
    问题之后):

    这不起作用,因为
    后面有一些空格。在这行的末尾还有一个空格

    解决方案:

    使用,要删除行末尾的另一个空格,可以如下使用:

    nathan ,2, 0, 10 
    adil ,8, 9, 7 
    masuda ,7, 4, 6 
    zain ,0, 0, 3 
    abdur rauf ,2, 0, 0 
    danniel ,7, 7, 2
    
    >>> for f in sorted(f.read().splitlines()):
    ...     re.split('\s*,\s*', f.strip())
    ...     
    ... 
    ['abdur rauf', '2', '0', '0']
    ['adil', '8', '9', '7']
    ['danniel', '7', '7', '2']
    ['masuda', '7', '4', '6']
    ['nathan', '2', '0', '10']
    ['zain', '0', '0', '3']
    
  • 列表(已反转(分数))
    只能反转
    分数列表。您应该在这里再次使用
    sorted()

    但由于在str对象上使用
    排序
    (如
    '2'
    '3'
    )将给出不正确的输出。例如
    '10'<'2'
    真的
    。将它们转换为int对象使用

    你也需要从最高到最低。然后,您可以通过以下方式启用排序的
    反向
    选项:

    hl = sorted(map(int, scores), reverse=True)
    
    关于
    reversed
    sorted(list,reverse=True)

  • print(hl)
    只能打印出该列表。在这种情况下,我认为您需要加入他们使用:


  • 因此,完整代码如下所示:

    import re
    
    with open('class1.txt', 'r') as f:
        for f in sorted(f.read().splitlines()):
            name, *scores = re.split('\s*,\s*', f.strip())
            hl = sorted(map(int, scores), reverse=True)
            print(' ,'.join([name]+list(map(str, hl))))
    
    产出将是:

    abdur rauf ,2 ,0 ,0
    adil ,9 ,8 ,7
    danniel ,7 ,7 ,2
    masuda ,7 ,6 ,4
    nathan ,10 ,2 ,0
    zain ,3 ,0 ,0
    

    你不应该使用相同的
    clas
    变量作为班级编号和排序选项。当考试相互排斥时,你还应该使用
    else if
    。你的
    hl
    选项根据学生的分数在哪里排序?它使用与字母排序相同的
    排序(f)
    。您能显示示例文件内容吗?看起来每个学生都有一个逗号分隔的分数列表。按分数排序时应该使用哪一个分数?不,欢迎使用堆栈。将来,这些信息属于问题。这就是为什么凯文在评论中提到了这个问题。所以你点击你的问题下面,把格式化的信息放在那里。Thanks@Nahid字体如果你认为答案有帮助,记得接受它。有关更多详细信息,请查看我们的;)抱歉,但我真的很想知道你是如何擅长编码的,这样我就可以很好地理解它了。啊,我不是这里最好的,试着了解更多:)。如果你有其他问题,你可以在这里问他们。但请记住,始终要问一个明确的问题。我建议你在我们的杂志上读点东西,看起来我没找到。然后:多学,多问,多回答
    abdur rauf ,2 ,0 ,0
    adil ,9 ,8 ,7
    danniel ,7 ,7 ,2
    masuda ,7 ,6 ,4
    nathan ,10 ,2 ,0
    zain ,3 ,0 ,0