簡體   English   中英

如何從列表中選擇最大的元素?

[英]How to pick largest element from list?

我編寫了一個程序來計算成績和學生的姓名,我想實現一個顯示最高成績和相應學生的功能。 除了這一部分,整個程序都可以工作,因為我不確定如何選擇具有最高值的元素,因為它帶有一個附加的字符串。

我將保留整個程序,但我所指的部分是:

mediafinal = []


    elif resposta.upper() == 'N':
        resposta = input('Check best student and grade? (Y/N):')
        if resposta.upper() == 'Y':
            print('Best student and grade is: ', max(mediafinal))
            break

rest的代碼

media1 = []
media2 = []
media3 = []
mediafinal = []
nomes = []

while True:
    resposta = input('Pretende introduzir um aluno? (Y/N): ')
    if resposta.upper() == 'Y':
        nome = (input('Indique o nome do aluno: '))
        nomes.append(nome)
        nota1 = eval((input(f'Indique a nota do primeiro teste {nome}: ')))
        nota2 = eval((input(f'Indique a nota do segundo teste {nome}: ')))
        m1 = ((nota1 + nota2)/2)
        infoaluno1 = []
        infoaluno1.extend([nome, m1])
        media1.append(infoaluno1)
        print(f'O nome e média do primeiro período do aluno é: {nome} {m1}')

        nota3 = eval((input(f'Indique a nota do terceiro teste {nome}: ')))
        nota4 = eval((input(f'Indique a nota do quarto teste {nome}: ')))
        m2 = ((nota3 + nota4) / 2)
        infoaluno2 = []
        infoaluno2.extend([nome, m2])
        media2.append(infoaluno2)
        print(f'O nome e média do segundo período do aluno é: {nome} {m2}')

        nota5 = eval((input(f'Indique a nota do quinto teste {nome}: ')))
        nota6 = eval((input(f'Indique a nota do sexto teste {nome}: ')))
        m3 = ((nota5 + nota6) / 2)
        infoaluno3 = []
        infoaluno3.extend([nome, m3])
        media3.append(infoaluno3)
        print(f'O nome e média do terceiro período do aluno é: {nome} {m3}')

        mf = ((m1 + m2 + m3)/3)
        mediafinal.extend([nome, mf])
        print(f'Classificação final do aluno: {nome} {mf}')

    elif resposta.upper() == 'N':
        resposta = input('Pretende verificar o melhor aluno e nota? (Y/N):')
        if resposta.upper() == 'Y':
            print('O melhor aluno é:', max(mediafinal))
            break

        elif resposta.upper() == 'N':
            print('Ok!')
            break

如果你有一個元組列表而不是交替的字符串和數字,問題就會簡單得多:

mediafinal.extend([nome, mf])

應該:

mediafinal.append((mf, nome))

然后你的max調用就像這樣開箱即用:

mf, nome = max(mediafinal)
print('Best student and grade is: ', nome, mf)

請注意,將分數( mf )放在元組的首位意味着max將基於該值進行選擇。 您可以更改順序,但是您需要告訴max根據第二個元素進行選擇:

mediafinal.append((nome, mf))
...
nome, mf = max(mediafinal, key=lambda m: m[1])

因此,無需更改任何代碼邏輯,只需修復 max() 行,我將其設置為:

max(a, key=lambda el: el[1])

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM