显示与该分数关联的列表中的最高分数和名称

Show highest score and name from list associated with that score

当我的程序通过 for 循环时,我需要最后的提示来包含迄今为止平均分最高的学生的姓名并显示该平均分。就像我现在的代码一样,它显示了迄今为止最高的平均水平,但是学生的名字一直在变化。如何获得最高平均值以与列表中的适当名称保持关联?

students = ["Kenny", "Irvin", "Ezra", "Joe"] 

highest = []
for student in students: 
    print(student, ", input your 3 grades:")
    D = int(input("Discussion: "))
    Q = int(input("Quiz: "))
    A = int(input("Assignment: "))
    wg1 = D * (.20) 
    wg2 = Q * (.30) 
    wg3 = A * (.50) 
    WeightGrade = wg1 + wg2 + wg3 
    highest.append(WeightGrade)
    print("The average grade for " ,student, " is:", WeightGrade)
    print('\n')
    
    max_highest = max(highest)
    if highest is None:
        print("nothing")
    else:
        print("The student with the highest grade is:" ,student, "with a"\
          ,max_highest, "average.")
        print('\n')

将您列表的名称从 highest 更改为 grades -- 它具有 所有 等级,而不仅仅是最高等级!然后更改:

highest.append(WeightGrade)

至:

grades.append((WeightGrade, student))

现在 grades(grade, student) 元组的列表。这意味着您可以:

highest_grade, best_student = max(grades)
print(f"The student with the highest grade is: {best_student} with a {highest_grade} average.\n")

请注意,在这种情况下 max 到 return None 是不可能的,因此像 if highest is None: 这样的检查没有任何意义。

首先,您的变量名应该反映变量代表什么。在这种情况下,highest 是一个错误的名称,因为该列表包含 所有 等级,因此只需将其命名为 grades.

接下来,求N个数的最大值,不要每次给一个新数都计算最大值!相反,您希望在计算最大值之前拥有所有这些,所以这样做 - 在循环中,只需将 WeightGrade 附加到 grades

students = ["Kenny", "Irvin", "Ezra", "Joe"] 

grades = []
for student in students: 
    print(student, ", input your 3 grades:")
    D = int(input("Discussion: "))
    Q = int(input("Quiz: "))
    A = int(input("Assignment: "))
    wg1 = D * (.20) 
    wg2 = Q * (.30) 
    wg3 = A * (.50) 
    WeightGrade = wg1 + wg2 + wg3 
    grades.append(WeightGrade)
    print("The average grade for " ,student, " is:", WeightGrade)
    print('\n')

然后, 循环之外,找到 max() 以及哪些学生的成绩为:

highest = max(grades)
print("The maximum grade is ", highest)
print("The following students achieved this grade: ")
for student, grade in zip(students, grades):
    if highest == grade:
        print(student)

通过单独的循环检查学生的成绩是否等于 highest,您可以涵盖多个学生获得最高成绩的情况。

你只需要创建一个字典来存储平均分最高的学生的名字。

我使用了一个带有两个参数的 max 函数,平均值字典,它检查键的最大值(这是学生的平均值)。

students = ["Kenny", "Irvin", "Ezra", "Joe"] 

averages = {}
for student in students: 
    print(student, ", input your 3 grades:")
    D = int(input("Discussion: "))
    Q = int(input("Quiz: "))
    A = int(input("Assignment: "))
    wg1 = D * (.20) 
    wg2 = Q * (.30) 
    wg3 = A * (.50) 
    WeightGrade = wg1 + wg2 + wg3

    averages[student] = WeightGrade
    
    print("The average grade for " ,student, " is:", WeightGrade)
    print('\n')

    best_student = max(averages, key=averages.get)

    if averages is None:
        print("nothing")
    else:
        print("The student with the averages grade is:" ,best_student, "with a"\
          ,averages[best_student], "average.")
        print('\n')