Мне нужно сделать простую программу Python, которая позволяет получить среднее число трех разных студентов и в итоге получить средний класс и распечатать его на экране. Код выглядит следующим образом:Нужна помощь в решении упражнений на Python
john = {
"name": "John",
"homework": [90.0, 97.0, 75.0, 92.0],
"extras": [88.0, 40.0, 94.0],
"tests": [75.0, 90.0]
}
paul = {
"name": "Paul",
"homework": [100.0, 92.0, 98.0, 100.0],
"extras": [82.0, 83.0, 91.0],
"tests": [89.0, 97.0]
}
tyler = {
"name": "Tyler",
"homework": [0.0, 87.0, 75.0, 22.0],
"extras": [0.0, 75.0, 78.0],
"tests": [100.0, 100.0]
}
students = ["john", "paul", "tyler"]
def average(numbers):
total = sum(numbers)
total = float(total)
return total/len(numbers)
def get_average(student):
homework = average(student["homework"])
extras = average(student["extras"])
tests = average(student["tests"])
return homework*0.1 + extras*0.3 + tests*0.6
def qualifications_in_letters(result):
if result >= 90:
return "A"
elif 80 <= result < 90:
return "B"
elif 70 <= result < 80:
return "C"
elif 60 <= result < 70:
return "D"
else:
return "F"
def get_class_average(students):
marks = []
for student in students:
marks.append(get_average(student))
return average(marks)
print get_class_average(students)
print qualifications_in_letters(get_class_average(students))
Каждый студент имеет словарь с четырьмя ключами и значениями (имя, домашнее задание, статистов и тестов). То, что программа должна делать, - это взять метки учеников, получить их среднее значение, а затем получить средний класс. Домашнее задание составляет 10% от среднего числа учащихся; дополнительные 30% и тесты 60%.
Существует список, в котором имена учащихся являются элементами. Проблема заключается в том, что при запуске кода появляется это сообщение об ошибке:
Traceback (most recent call last):
File "<stdin>", line 52, in <module>
File "<stdin>", line 49, in get_class_average
File "<stdin>", line 28, in get_average
TypeError: string indices must be integers, not str
Я не знаю, как это исправить.
Линия 28 является второй в get_average()
; строка 49 - внутри петли for
, а 52 - это точка, где вызывается get_class_average()
.
О, стреляйте, я отметил его как неправильный дубликат. Я думал, что вы зацикливаетесь на словаре внизу в 'get_class_average()' –
Не дублируйте, пожалуйста, заново открыть. (Может быть, слишком локализован?) –
Вы можете использовать стратегически размещенные, печатные заявления для * видеть *, что происходит. Печатайте такие вещи, как аргументы функции, возвращаемые значения функции и * переменные *. Возможно, вы захотите начать с проблемной функции. – wwii