2016-05-14 2 views
1

Я в CodeAcademy на уроке 9 («Как это все делают») Мое сообщение об ошибке следующее:Академия кодов: Как дела?

Traceback (most recent call last): 
    File "python", line 60, in <module> 
    File "python", line 52, in get_class_average 
    File "python", line 28, in get_average 
TypeError: string indices must be integers, not str 

Я не знаю, что делать, я искал решения уже, они предложили мне использовать переменную q, которую я вложил в свой код, но проблема, похоже, в моем уже существующем коде из предыдущих уроков.

# creating students 
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] 
} 

# Add your function below! 
def average(numbers): 
    total = sum(numbers) 
    total = float(total) 
    return float(total)/ len(numbers) 

def get_average(student): 
    homework = average(student["homework"]) 
    quizzes = average(student["quizzes"]) 
    tests = average(student["tests"]) 
    return 0.1 * homework + 0.3 * quizzes + 0.6 * tests 

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" 

#summarising students to classlist 
students = ["lloyd", "alice", "tyler"] 

# calculating class average   
def get_class_average(students): 
    results = [] 
    for student in students: 
     results.append(get_average(student)) 
    return average(results) 

#printing grades  
print get_letter_grade(get_average(lloyd)) 
print get_letter_grade(get_average(alice)) 
print get_letter_grade(get_average(tyler)) 

q = get_class_average(students) 
#printing class average 
print get_letter_grade 
print q 

ответ

3

В get_class_average вызове get_average с объектами в students списке. Однако эти объекты являются строками. Вместо этого вам, вероятно, нужны ранее заданные переменные. Так замените строку

students = ["lloyd", "alice", "tyler"] 

с

students = [lloyd, alice, tyler] 
+0

Спасибо Верри много для быстрой и четкой помощи. Я, очевидно, смотрел на все остальное, кроме списка учеников. Большое спасибо! –

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

# Add your function below! 
def average(numbers): 
    total = sum(numbers) 
    total = float(sum(numbers)) 
    return total/len(numbers) 
def get_average(student): 
    homework = average(student["homework"]) 
    quizzes = average(student["quizzes"]) 
    tests = average (student["tests"]) 
    return homework*.10 + quizzes*.30 + tests*.60 
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 student in students: 
     results.append(get_average(student)) 
    return average(results) 

print get_class_average(students) 
print get_letter_grade(getclassaverage(students)) 
+0

Постарайтесь дать небольшое объяснение вместо прямого кода. – JoshKopen

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