更正python中的代码

时间:2013-07-16 11:52:03

标签: python

我是python编程的初学者。在this question in codeacademy中,我需要:

  

写一个函数平均值,返回仅用数字填充的列表的平均值。

以下是清单:

lloyd = {
"name": "Lloyd", 
"homework": [90.0, 97.0, 75.0, 92.0], 
"quizzes": [88.0, 40.0, 94.0], 
"tests": [75.0, 90.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]
} 

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

以下是我的尝试:

 students = [lloyd, alice, tyler]
 def average(k):
     k = a(students)
     for x[k] in k:
         if x[k] == int:
        return average(k) = sum(x[k]) / len(x[k])

我知道为什么x[k]不起作用,但我也想不出解决办法。

1 个答案:

答案 0 :(得分:1)

如果参数不是仅包含数字的列表,则问题未指定应返回的内容。 我假设您需要一些宽松版本,如果它不符合该标准,将返回参数传递。

<强>微调

import numbers, operator
def average( what ):
    if not isinstance( what, list ):
        return what
    if not all( isinstance(item, numbers.Number) for item in what ):
        return what
    if len(what) == 0:
        return None
    else:
        return operator.truediv( sum( what ), len( what ) )

旧的:

def average( what ):
    if not isinstance( what, list ):
        return what
    if len(what) == 0:
        return None
    if not all( isinstance(item, (int, long, float, complex)) for item in what ):
        return what
    else:
        return sum( what ) / len( what )

ideone working sample

另请参阅E先生写的有关整数的内容(我的版本可能会让您对整数列表感到惊讶)。