尝试从成绩数据字典中获取加权平均值

时间:2019-02-18 23:01:05

标签: python

我正在尝试根据最后的定义返回学生成绩的加权平均值。我已经定义了词典,但是认为我尝试将数字取出是不正确的。

def Average(lst): 
    return sum(lst) / len(lst) 

# Driver Code 
lst = [1,2,3,4,5] 
average = Average(lst) 

print("Average of the list =", average)  


def get_weighted_average(student):
    return average('homework')*0.10 + average('quizzes')*0.30 + average('tests')*.60 

#driver code
students = [steve, alice, tyler] 
print(get_weighted_average('steve'))

如何从以上成绩字典中获得加权平均值?

1 个答案:

答案 0 :(得分:0)

您的数据的主要来源是什么?文本吗?无论如何,看来您脑子里有这样的想法。


势在必行

1-您的“数据库”

students_marks = {
    'steve':{
        'homework':[1,2,3,4,5],
        'quizzes' :[5,4,3,2,1],
        'tests'   :[0,0,0,0,0],
    },
    'alice':{
        'homework':[5,4,3,2,1],
        'quizzes' :[0,0,0,0,0],
        'tests'   :[1,2,3,4,5],
    },
}

用例

>>> students_marks['steve']
{'homework': [1, 2, 3, 4, 5], 'quizzes': [5, 4, 3, 2, 1], 'tests': [0, 0, 0, 0, 0]}
>>> students_marks['steve']['homework']
[1, 2, 3, 4, 5]


2-averageget_weighted_average

的定义
def average(lst): 
    return sum(lst)/len(lst) # Python3
   #return sum(lst)/float(len(lst)) # Python2

def get_weighted_average(student_name):
    student_marks = students_marks[student_name]
    return round(
        average(student_marks['homework'])*.1
        + average(student_marks['quizzes'])*.3
        + average(student_marks['tests'])*.6
    , 2)

用例

>>> get_weighted_average('steve')
1.2
>>> get_weighted_average('alice')
2.1

或使用list

>>> students_names = ['steve', 'alice'] 
>>> [get_weighted_average(name) for name in students_names]
[1.2, 2.1]

或使用dict

>>> {name:get_weighted_average(name) for name in students_names}
{'steve': 1.2, 'alice': 2.1}

面向对象(OO)方法

所有这些显示出来的,您想要做的可能最好以OO的方式进行编程。一个简单的例子

class Student(object):

    homeworks_weight = .1
    quizzes_weight   = .3
    tests_weight     = .6

    def __init__(self, name, homeworks_marks, quizzes_marks, tests_marks):

        self.name = name
        self.homeworks_marks = homeworks_marks
        self.quizzes_marks = quizzes_marks
        self.tests_marks = tests_marks

    @staticmethod
    def average(marks):
        return sum(marks)/len(marks)        

    def get_gpa(self, rd=2):
        return round(
            self.average(self.homeworks_marks)*self.homeworks_weight
            + average(self.quizzes_marks)*self.quizzes_weight
            + average(self.tests_marks)*self.tests_weight
        , rd)

用例

>>> steve = Student(
        name            = 'Steve',
        homeworks_marks = [1,2,3,4,5],
        quizzes_marks   = [5,4,3,2,1],
        tests_marks     = [0,0,0,0,0]
    )
>>> steve.get_gpa()
1.2
>>> steve.homeworks_marks
[1, 2, 3, 4, 5]