2015-10-11 3 views
-5

Когда введено get_class_average(["Alice","Lloyd"]), ответ должен быть 85.85, но вместо этого он возвращает 91.15.Почему это возвращает неправильное значение?

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] 
} 

def average(numbers): 
    total = sum(numbers) 
    total = float(total)  
    tot = total/len(numbers)  
    return tot  
def get_average(student):  
    homework = average(student["homework"])  
    quizzes = average(student["quizzes"])  
    tests = average(student["tests"]) 
    homework = homework * 0.1 
    quizzes = quizzes * 0.3 
    tests = tests * 0.6 
    return tests+quizzes+homework  
def get_letter_grade(score): 
    if score >= 90: 
     return "A" 
    elif score >= 80: 
     return "B" 
    elif score >= 70: 
     return "C" 
    elif score >= 60: 
     return "D" 
    else: 
     return "F" 

print get_letter_grade(get_average(lloyd)) 

def get_class_average(students): 
    results = [] 
    for x in students: 
     savg = get_average(x) 
     results.append(savg) 
     return average(results) 
+0

Вы должны отступом своего кода, если вам нужна наша помощь , – Xoul

+0

Извините ... Я отредактирую сейчас –

+1

Будет ли удивляться, если этот код выполняется даже после отступа – e4c5

ответ

0

get_average должен быть принят dict, а не имя студента. Поэтому я поражен тем, что это работает вообще:

Обратите внимание на то, что вы звоните get_class_average(["Alice","Lloyd"]) - передаете список строк. Каждый элемент передается без изменений в get_average()

Вероятно, вы должны сказать get_class_average([alice, lloyd])

+0

Я не могу это сделать, поскольку он вводится codecademy. Я считаю, что он должен соответствовать ключу на dict в верхней части –

+0

Это не будет работать в Python. – haavee

+0

Я не знаю ... Мой учитель заставляет меня делать это на codecademy, что на py 2.7. Обычно я использую py 3.4, но мой учитель говорит, что я должен использовать 2,7 в классе. Исправленные различия синтаксиса –

0

Ваш код возвращает 85.85 для меня - когда правильный отступ используется и get_class_average() передается список словарей вместо списка строк.

get_class_average(["Alice","Lloyd"]) должно фактически вызывать исключение, потому что вы передаете учащегося как строку, а не словарь. Изменение кода:

print get_class_average([alice, lloyd]) 

и вы должны увидеть 85.85 печататься - как только вы исправить отступы окончательного return заявления в get_class_average() так:

def get_class_average(students): 
    results = [] 
    for x in students: 
     savg = get_average(x) 
     results.append(savg) 
    return average(results) 

Ваш код имеет return заявление с отступом в пределах тело цикла for. В результате вычисляется только один (для alice), прежде чем функция возвращается, и, следовательно, результат 91.15.

Я предлагаю вам исправить эту одну строку, чтобы исправить заявление return и повторно отправить код в академическую академию.

+0

Изменено, но codecademy все еще не принимает его. Я предполагаю, что это ошибка кодеки, а не проблема с python. Поэтому я должен удалить этот вопрос. Спасибо, что помогли мне исправить ошибку! –

+0

Нет, это не ошибка в академии. Ошибка в вашем коде, где выражение 'return' слишком сильно отступы. Из-за этого цикл for выполняется только один раз, прежде чем функция вернется, и среднее значение не будет правильно рассчитано. Если ваш код работал в академии кода, но просто порождал неправильное значение, просто измените одну строку на _deindent_ оператор 'return' в' get_class_average() 'и он будет работать. – mhawke

+0

Просто уточнить, код академии _is_ вызывает ваш 'get_class_average()' со списком словарей. Это должно быть правдой, потому что вы получаете (хотя и неверный) результат 91.15. Просто вы написали, что его вызывали со списком строк, который сбивает всех с толку. – mhawke

0

Это сработало.

Защиту get_class_average (студенты): результатов = [] для студента в студентах: results.append (get_average (студент)) возвращение средних (результаты)

Смежные вопросы