试着从d级词典中找出加权平均数

2024-04-19 20:55:20 发布

您现在位置: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'))

如何从以上等级的字典中得到加权平均数?你知道吗


Tags: getreturn字典定义def数字学生steve
1条回答
网友
1楼 · 发布于 2024-04-19 20:55:20

您的数据的主要来源是什么?短信?不管怎样,看来你脑子里有这样的想法。你知道吗


命令式方法

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方式编程来完成。一个简单的例子

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]

相关问题 更多 >