如何从存储学生姓名与成绩的列表中提取最高分对应条目
问题根源
你现在的mediafinal是一维列表,用extend([nome, mf])添加数据后,结构为[姓名1, 分数1, 姓名2, 分数2...],直接调用max()会将字符串和数字混合比较,既不符合按分数取最大值的需求,Python3环境下还会直接触发类型比较报错。
修复步骤
1. 调整mediafinal的数据结构
把原来的extend方法改成append,将每个学生的姓名和分数作为一个子元素存储,形成嵌套列表:
# 替换原代码里的 mediafinal.extend([nome, mf]) mediafinal.append([nome, mf])
2. 修改max()的取值规则
给max()添加key参数,指定按每个子元素的第二位(分数字段)进行大小比较:
if resposta.upper() == 'Y': melhor_aluno, nota_maxima = max(mediafinal, key=lambda x: x[1]) print(f'O melhor aluno é: {melhor_aluno}, 最终分数为: {nota_maxima}') break
额外优化建议
原代码里用eval()转换输入的数值存在安全风险,建议统一替换为float()做类型转换,示例:
nota1 = float(input(f'Indique a nota do primeiro teste {nome}: '))
内容的提问来源于stack exchange,提问作者Nuno
相关产品推荐
相关产品推荐

