Работал на Python 2.7, но не на 3.4 - Словари. Индексы списка должны быть целыми числами, а не str

У меня такая проблема: когда я пытаюсь распечатать среднюю оценку моего класса, она выдает ошибку «индексы должны быть целыми числами, а не str».

def average работает нормально, но второй average_class...

Я добавляю, что этот код отлично работает в версии codecademy 2.7 (не совсем тот же код)

Как я могу запустить это на моей версии Python 3.4 ?? :)

przemyslaw = {
   "name": "Przemyslaw",
   "homework": [4, 5, 3, 2, 1, 5, 4],
   "shorttests": [2, 4, 2],
   "tests": [4, 4, 3, 5]
   }

magdalena = {
   "name": "Magdalena",
   "homework": [5, 5, 5, 5, 4, 4, 4],
   "shorttests": [4, 5, 5],
   "tests": [5, 5, 4, 5]
   }

def average(student):
   homework = average_sub(student["homework"])
   shorttests = average_sub(student["shorttests"])
   tests = average_sub(student["tests"])
   average = tests * 0.6 + shorttests * 0.3 + homework * 0.1
   return float(average)

def average_class(students):
   total = []
   for loop in students:
       total.append(average(loop))
   return average(total)

print(average_class([magdalena, przemyslaw]))

person DanteW    schedule 26.11.2015    source источник
comment
ваша проблема return average(total), так как total - это список, а не словарь, как вы ожидаете от функции average (в частности, словарь с ключами "homework" и "shorttests".   -  person R Nar    schedule 26.11.2015


Ответы (1)


Изменять:

def average_class(students):
    total = []
    for loop in students:
        total.append(average(loop))
    return average(total)

в:

def average_class(students):
    total = []
    for loop in students:
        total.append(average(loop))
    return average_sub(total)

Отличие только в последней строке. Это должно работать с Python 2 и 3.

person Mike Müller    schedule 27.11.2015