如何使用 python 打印学生成绩的最高分和姓名?

How could I print the highest score and name of student grades using python?

使用 python 我正在创建一个代码,它接收一个列表列表作为参数。此列表列表包含学生的姓名和成绩。该函数还必须打印成绩最好的学生的姓名及其最好的成绩。当我创建代码并尝试 运行 时,没有任何反应有没有办法改进我的代码?我想要的输出是“最好的学生是:Caroline 9.6”

students=[["steve", 9.0], ["ben", 9.5], ["Caroline",9.6],["Tim", 9.1]]
highest_grade=[]
lowest_grade=[]
def best():
    i = 1
    max = min = students[0]
    # first, calculate the max and min.
    while i < len(students):  # (possible improvement: replace this with a for loop)
        if students[i] > max:
          max = students[i]    # replace max with the new max
        if students[i] < min:
            min = students[i]    # replace min with the new min
     i += 1
highest_grade.append(max)
lowest_grade.append(min)
print("The best student is:",best())

这段代码可能会有很多改进。首先,如果 students 数组是一个 dict 会好得多,但如果它绝对必须是一个数组数组也是可以理解的。

其次,你说得对,你应该用 for 循环来做:

def best_student_grade():
    highest_grade = 0 # "max" is a terrible name for a variable
    for student, grade in student:
        if grade > highest_grade:
             grade = highest_grade
             best_student = student
    return highest_grade, best_student

bstudent, bgrade = best_student_grade()

print(f"The best student is: {bstudent} with a {bgrade}")

你甚至可以通过列表理解来做到这一点,但我会把它作为练习留给 reader。

老实说,我认为阅读一些介绍性 python 或编程书籍会让您在很多方面受益。

max(students,key=lambda x:x[1])

我认为可行

您可以做一些事情来改进它。你找到了最低分数但没有使用它,所以我不确定你是否需要它。如果确实需要,可以将其添加到 return 语句中。这是一个应该很容易遵循的建议方法:

students = [["steve", 9.0], ["ben", 9.5], ["Caroline", 9.6], ["Tim", 9.1]]


def best(students):
    highest_grade_name = None
    lowest_grade_name = None
    my_max_score = -float("inf")
    my_min_score = float("inf")
    for name, score in students:
        if score > my_max_score:
            my_max_score = score
            highest_grade_name = name
        if score < my_min_score:
            my_min_score = score
            lowest_grade_name = name
    return my_max_score, highest_grade_name


best_name, best_score = best(students)
print(f"The best student is {best_name} with a score of {best_score}")