2017-03-01 74 views
0

所以这里是我的python代码到目前为止。我想使用这些字典并将它们制作成学生名单。我无言以对,如何把它们运行到getAverage()功能,产生这种结果函数如何取字典参数

Name: Alice 
Homework: [100.0, 92.0, 98.0, 100.0] 
Quizzes: [82.0, 83.0, 91.0] 
Tests: [89.0, 97.0] 
For Alice the average is:91.14999999999999 

Name: Lloyd 
Homework: [90.0, 97.0, 75.0, 92.0] 
Quizzes: [88.0, 40.0, 94.0] 
Tests: [75.0, 90.0] 
For Lloyd the average is:80.55 

Name: Tyler 
Homework: [0.0, 87.0, 75.0, 22.0] 
Quizzes: [0.0, 75.0, 78.0] 
Tests: [100.0, 100.0] 
For Tyler the average is:79.9 

这是代码我迄今所做的:

lloyd = { 
"name": "Lloyd", 
"homework": [90.0, 97.0, 75.0, 92.0], 
"quizzes": [88.0, 40.0, 94.0], 
"tests": [75.0, 90.0]} 

rich = { 
"name": "Rich", 
"homework": [95.0, 93.0, 81.0, 94.0], 
"quizzes": [88.0, 55.0, 77.0], 
"tests": [80.0, 95.0]} 

josh = { 
"name": "Josh", 
"homework": [93.0, 94.0, 74.0, 99.0], 
"quizzes": [87.0, 47.0, 92.0], 
"tests": [70.0, 88.0]} 

def average(n): 
    count = float(len(n)) 
    total = float(sum(n)) 

    return total/count 

def getAverage(**names): 
    homework = average(names[homework]) 
    quizzes = average(names[quizzes]) 
    tests = average[names[tests]] 
    return float((.1*homework +.3*quizzes + .6*tests)/3) 

students = [rich, josh, lloyd] 

回答

0

修改您getAverage功能,这(删除在**)

def get_average(names): 
    homework = average(names['homework']) 
    quizzes = average(names['quizzes']) 
    tests = average(names['tests']) 
    return (0.1*homework + 0.3*quizzes + 0.6*tests)/3 

for student in [rich, josh, lloyd]: 
    print student['name'], get_average(student) 

其他一些要点:

  • 你有一个缩进问题与average功能
  • 喜欢使用PEP8惯例(特别是LOWER_CASE变量)
0

您是接近,但你需要做一些事情。首先从getAverage删除**。接下来删除返回上的/3。在这一行average[names[tests]]上也将外部[]更改为()。然后修复缩进。

lloyd = { 
"name": "Lloyd", 
"homework": [90.0, 97.0, 75.0, 92.0], 
"quizzes": [88.0, 40.0, 94.0], 
"tests": [75.0, 90.0]} 

rich = { 
"name": "Rich", 
"homework": [95.0, 93.0, 81.0, 94.0], 
"quizzes": [88.0, 55.0, 77.0], 
"tests": [80.0, 95.0]} 

josh = { 
"name": "Josh", 
"homework": [93.0, 94.0, 74.0, 99.0], 
"quizzes": [87.0, 47.0, 92.0], 
"tests": [70.0, 88.0]} 

alice = { 
"name": "Alice", 
"homework": [100.0, 92.0, 98.0, 100.0], 
"quizzes": [82.0, 83.0, 91.0], 
"tests": [89.0, 97.0]} 

taylor = { 
"name": "Taylor", 
"homework": [0.0, 87.0, 75.0, 22.0], 
"quizzes": [0.0, 75.0, 78.0], 
"tests": [100.0, 100.0]} 

def average(n): 
    count = float(len(n)) 
    total = float(sum(n)) 
    return total/count 

def getAverage(names): 
    homework = average(names['homework']) 
    quizzes = average(names['quizzes']) 
    tests = average(names['tests']) 
    return float((.1*homework +.3*quizzes + .6*tests)) 

students = [rich, josh, lloyd, alice, taylor] 
for student in students: 
    avg=getAverage(student) 
    print('Name: '+student['name']) 
    print('Homework: '+str(student['homework'])) 
    print('Quizzes: '+str(student['quizzes'])) 
    print('Tests: '+str(student['tests'])) 
    print('For '+student['name']+' the average is: '+str(avg)+'\n')