Уведомления

Группа в Telegram: @pythonsu

#1 Авг. 21, 2013 02:11:20

kozlo22
От: Беларусь, Минск
Зарегистрирован: 2012-11-01
Сообщения: 115
Репутация: +  0  -
Профиль   Отправить e-mail  

Непонятная ошибка в коде

Итак, на codecademy наткнулся на задчку:

Now let's write a get_letter_grade function that takes score as input and returns a string with the letter grade that that student should receive.

These are the grade cutoffs:

Scores 90 or above: return "A"
If 80 <= score < 90: return "B"
If 70 <= score < 80: return "C"
If 60 <= score < 70: return "D"
If score < 60: return "F"

Finally, pass your function the result of running get_average on lloyd and print the resulting letter grade.
Мой код:
#Заполнение словарей опущено
def average(lst):
    s = 0.0
    for num in lst:
        s += num
    av = s / len(lst)
    return(av)
def get_average(dict):
    for key in dict:
        if key == 'tests':
            tests_average = average(dict['tests'])
        elif key == 'homework':
            homework_average = average(dict['homework'])
        elif key == 'quizzes':
            quizzes_average = average(dict['quizzes']) 
    general_average = homework_average*0.1 + quizzes_average*0.3 + tests_average*0.6
    return general_average
def get_letter_grade(score):
    if score >= 90:
        mark = 'A'
    elif (score <= 80) and (score < 90):
        mark = 'B'
    elif (score <= 70) and (score < 80):
        mark = 'C'
    elif (score <= 60) and (score < 70):
        mark = 'D'
    elif score < 60:
        mark = 'F'
    return mark
x = get_average(lloyd)
result = get_letter_grade(x)
print(result)
При запуске ругается на то, что обращение к mark осуществляется до ее определения.
UnboundLocalError: local variable 'mark' referenced before assignment

Отредактировано kozlo22 (Авг. 21, 2013 02:11:47)

Офлайн

#2 Авг. 21, 2013 02:43:28

pyuser
От:
Зарегистрирован: 2007-05-13
Сообщения: 658
Репутация: +  36  -
Профиль   Отправить e-mail  

Непонятная ошибка в коде

У вас условия не правильно прописаны. При score = 81? например, переменной mark не будет присвоено ни какого значения - вот и ошибка.
Попробуйте так:

average = lambda x: sum(x) / len(x)
def get_average(dict):
    ...
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'
    return 'F'



Офлайн

#3 Авг. 21, 2013 13:02:21

kozlo22
От: Беларусь, Минск
Зарегистрирован: 2012-11-01
Сообщения: 115
Репутация: +  0  -
Профиль   Отправить e-mail  

Непонятная ошибка в коде

pyuser
Помогло, спасибо.

Офлайн

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version