如何用Python3制作自动分级机

2024-09-29 23:20:02 发布

您现在位置:Python中文网/ 问答频道 /正文

我是个初学者。 我正在努力使每个学生的名字将对应于每个年级的平均成绩,并显示学生之间的总平均分的学生等级。 这是我的密码:

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}

我怎么能这样表达呢?你知道吗

如果您能解释一下细节,我们将不胜感激!!你知道吗


Tags: inforcount名字学生nickfinaltotal
3条回答

试着用字典代替列表。 初始化字典: 学生={'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

以下是完整的代码,其中计算被封装在一个函数中:

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))

相关问题 更多 >

    热门问题