如何用Python3制作自动分级机

如何用Python3制作自动分级机,python,list,python-3.x,Python,List,Python 3.x,我是一个编程新手。 我正在努力制作一个学生评分器,每个学生的名字将对应于每个年级的平均分,并显示学生的总平均分。 这是我的代码: Ken = [5,8,9] Hiro = [10,11,20] Nick = [20,20,20] list1 = [Ken,Hiro,Nick] total_average = 0 for j in list1: x = 0 count = 0 for i in j: x += i count += 1 av

我是一个编程新手。 我正在努力制作一个学生评分器,每个学生的名字将对应于每个年级的平均分,并显示学生的总平均分。 这是我的代码:

Ken = [5,8,9]
Hiro = [10,11,20]
Nick = [20,20,20]

list1 = [Ken,Hiro,Nick]

total_average = 0
for j in list1:
   x = 0
   count = 0
   for i in j:
       x += i
       count += 1

   average = x / count
   print (round(average,2))
   total_average += average

final_average = total_average / len(list1)
print (round(final_average,2))
结果是:

7.33
13.67
20.0
13.67
但是,我实际上想要生成返回如下结果的代码:

13.67, {'Ken': 13.67, 'Hiro': 20.0, 'Nick': 13.67}
我怎么能这样表达呢


如果您能解释一下细节,我们将不胜感激

尝试使用字典而不是列表。 初始化字典: 学生={'Hiro':0,'Ken':0,'Nick':0}

然后根据计算的平均值分配值: 学生={'Hiro':20.0,'Ken':13.67,'Nick':13.67}


打印(学生)

我建议用
{name,scores,average_score}
将学生表示为字典。你所有的学生都会有一个字典列表:

students = [
    {'name': 'Ken', 'scores': [5, 8, 9], 'average_score': 0.0},
    {'name': 'Hiro', ...},
    ...
]
现在您可以像这样迭代它们:

for student in students:
    # Access the attributes like this:
    print(student['name'], student['scores'])

    # calculate your average value ...

    student['average_value'] = x/count
print(students) # you can print the whole dictionary and look at the results

所有学生都在一个列表中,很容易按照您的要求进行格式化——只需在所有学生中循环并按您想要的顺序打印他们的姓名和平均分数。

我建议另一种方法。首先,将您的姓名和成绩存储在字典中:

grades = {'Ken': [5,8,9], 'Hiro': [10,11,20], 'Nick': [20,20,20]}
然后,在字典上循环,计算每个学生的平均值,并准备计算全局平均值:

averages = {}
sum_of_grades, number_of_grades = 0, 0
for name, marks in grades.items():
    averages[name] = sum(marks) / len(marks) # simple arithmetic average
    sum_of_grades += sum(marks)
    number_of_grades += len(marks)
final_average = sum_of_grades / number_of_grades
最后,计算全球平均值:

averages = {}
sum_of_grades, number_of_grades = 0, 0
for name, marks in grades.items():
    averages[name] = sum(marks) / len(marks) # simple arithmetic average
    sum_of_grades += sum(marks)
    number_of_grades += len(marks)
final_average = sum_of_grades / number_of_grades
以下是完整的代码,其中计算封装在函数中:

grades = {'Ken': [5,8,9], 'Hiro': [10,11,20], 'Nick': [20,20,20]}

def compute_averages(grades):
    averages = {}
    sum_of_grades, number_of_grades = 0, 0
    for name, marks in grades.items():
        averages[name] = sum(marks) / len(marks)
        sum_of_grades += sum(marks)
        number_of_grades += len(marks)
    final_average = sum_of_grades / number_of_grades

    return averages, final_average

averages, final_average = compute_averages(grades)
for name, avg in averages.items():
    print(name, round(avg, 2))
print('Final average', round(final_average, 2))

我懂了。非常感谢。这对我很有帮助。非常感谢你!!我能做到。非常感谢你!!