创建更灵活的功能

时间:2018-10-06 20:36:38

标签: python

我正在以新学生的身份与Python合作。我制作的函数的参数不是特别可靠,希望有人可以帮助我使其更加灵活。

它与词典列表一起使用,每个词典包含有关学生及其作业成绩的信息。它所要做的只是浏览列表,对学生的成绩进行平均,然后打印平均值。我可以做到这一点,但是我似乎无法弄清楚的是如何使其在分配数量上更加灵活。我希望它能够运行代码并给出平均值,而不管有多少分配。现在,我看到它只限于现有的三个任务。

这是我到目前为止所拥有的:

student_list = [{'id': 12341, 'first_name': 'Alice', 'last_name': 'Anderson',
         'assignments': [('assignment_1', 0), ('assignment_2', 2), ('assignment_3', 4)]},

 {'id': 12342, 'first_name': 'Boris', 'last_name': 'Bank',
   'assignments': [('assignment_1', 1), ('assignment_2', 3), ('assignment_3', 0)]},

 {'id': 12343, 'first_name': 'Carl', 'last_name': 'Cape',
   'assignments': [('assignment_1', 2), ('assignment_2', 4), ('assignment_3', 1)]},

 {'id': 12344, 'first_name': 'Didi', 'last_name': 'Dawson',
   'assignments': [('assignment_1', 3), ('assignment_2', 0), ('assignment_3', 2)]},

 {'id': 12345, 'first_name': 'Ed', 'last_name': 'Enders',
   'assignments': [('assignment_1', 4), ('assignment_2', 1), ('assignment_3', 3)]}]

def average_grade(students): students = 'students'

for i in range(len(student_list)): grade = student_list[i]['assignments'][0][1]+student_list[i]['assignments'][1][1]+\ student_list[i]['assignments'][2][1] average = grade/3 print('The average grade of ' + student_list[i]['first_name'] + str(' ') + student_list[i]['last_name'] + str(' is ') + str(average)) average_grade('students')

这给出了输出:

  

爱丽丝·安德森(Alice Anderson)的平均成绩是2.0
  鲍里斯银行的平均成绩是1.3333333333333333
  卡尔·开普的平均成绩是2.3333333333333335
  Didi Dawson的平均成绩是1.6666666666666667
  Ed Enders的平均成绩是2.6666666666666665

谢谢您的帮助

3 个答案:

答案 0 :(得分:1)

数据结构不是很好,但是您始终可以使用列表理解:

grade = sum([assignment[1] for assignment in student_list[i]['assignments']])

答案 1 :(得分:0)

您可以使用嵌套的for循环,例如:

 for student in student_list:
    assignments = student.get('assignments')
    grade = 0
    for assignment in assignments:
        grade += assignment[1]
    avg_grade = grade / len(assignments)
    print(avg_grade)

答案 2 :(得分:0)

您的数据结构很好,只是不用将其除以设置的数字即可获得平均使用量len(i['assignments']),这将使您无论分数多少,都可以生成适当的平均值。

for i in student_list:
    grade = sum([j[1] for j in i['assignments']])
    average = grade/len(i['assignments'])
    print('The average grade of {} {} is {}'.format(i['first_name'], i['last_name'], round(average, 2)))
The average grade of Alice Anderson is 2.0
The average grade of Boris Bank is 1.33
The average grade of Carl Cape is 2.33
The average grade of Didi Dawson is 1.67
The average grade of Ed Enders is 2.67