2013-11-16 4 views
-2
from math import sqrt 
grades = [100, 100, 90, 40, 80, 100, 85, 70, 90, 65, 90, 85, 50.5] 

def print_grades(grades): 
    for grade in grades: 
     print grade 

def grades_sum(grades): 
    total = 0 
    for grade in grades: 
     total += grade 
    return total 

def grades_average(grades): 
    sum_of_grades = grades_sum(grades) 
    average = sum_of_grades/len(grades) 
    return average 

def grades_variance(scores, average): 
    variance = 0 
    for i in range(len(scores)): 
     variance += (average - scores[i])**2 
    return float(variance)/len(scores) 

def grades_std_deviation(variance): 
    grades_variance(grades,grades_average(grades)) 
    return sqrt(variance) 

print grades 
print grades_sum(grades) 
print grades_average(grades) 
print grades_variance(grades, grades_average(grades)) 
print grades_std_deviation(grades_variance(grades, grades_average(grades))) 

Для последнего раздела печати есть ли способ не вызвать функцию внутри каждой функции? Например, в «print grade_std_deviation» мне нужно встроить дисперсию и среднюю функцию внутри. Есть ли способ, чтобы функции grades_variance и grades_average возвращали переменную, доступную за пределами области действия соответствующей функции?Доступ к переменной в функциях

+1

Они, um .. * do * возвращают переменную .. – roippi

+0

Почему бы не сохранить возвращенные переменные вместо вызова дважды ?! –

ответ

4

Почему не просто хранить результаты в переменных, как этот

avg = grades_average(grades) 
var = grades_variance(grades, avg) 
dev = grades_std_deviation(var) 

print avg, var, dev 
1

функции действительно возвращают переменные, вам только нужно хранить их.

print grades 

g_sum = grades_sum(grades) 
g_avg = grades_average(grades) 
g_var = grades_variance(grades, g_avg) 
g_dev = grades_std_deviation(g_var) 

print g_sum 
print g_avg 
print g_var 
print g_dev 
Смежные вопросы