2016-07-06 17 views
1

저는 파이썬의 초보자입니다. 여기에 몇 가지 기본적인 질문이 있습니다. 누군가 제발 도와 줄 수 있니?TypeError : 문자열 인덱스는 str이 아닌 정수 여야합니다.

각 학생의 평균을 구한 다음이 평균의 평균을 계산하고 싶습니다. Get TypeError : 문자열 인덱스는 str이 아닌 정수 여야합니다. 그것이 말하는 것과 수정하는 방법을 알 수는 없습니다. 여기 내 코드는 다음과 같습니다.

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) 
    return 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_class_average(students): 
    results = [] 
    for student in students: 
     result = get_average(student) 
     results.append(result) 
    return average(results) 

students = ["lloyd", "alice", "tyler"] 
print get_class_average(students) 
+0

정확히 어떤 라인을 가리키는지를 알려주는 추적 표시를 읽었습니까? – jonrsharpe

+0

예, 읽었습니다. 그러나 여러 행이 나열되어 있습니다. 문제의 원인이되는 행을 항상 확인하지 마십시오. –

+0

완전히 이해하지 못하더라도 최소한 포함 할 수 있습니다. 그리고 그것을 해석하는 것을 돕기 위해 : 원칙적으로 오류가 있기 전에 호출 된 * 마지막 줄과 함께 맨 아래부터 시작하십시오. – jonrsharpe

답변

6

따옴표로 묶은 이름은 변수가 아닌 문자열 리터럴입니다.

>>> x = 3 
>>> x 
3 
>>> 'x' 
'x' 

사용 students = [lloyd, alice, tyler]은 위에서 정의 된 변수를 참조합니다.

+0

이것을 지적 해 주셔서 감사합니다. 나는 학생 목록을 바꿨다. 하지만 이제 경고합니다 : TypeError : 'float'객체가 호출 가능하지 않습니다.이 객체는 "total = float (total)"이라고 생각합니다. 그래서 저는 여전히 그것을 인용합니다. 그리고 모든 학생들의 점수가 정수로 바뀌었고, 어느 쪽도 효과가 없습니다. –

+0

@EmmaZhao - 제 Python 2 인터프리터에서 원래 코드 (지정된 값으로 변경)를 실행하고 '83.8666666667'을 얻었습니다. 새 문제를 재현 할 수 없습니다. – TigerhawkT3

+0

와우 .. 이상한, 어쩌면 그것은 버전 일 이니, 나는 그걸 알아 내려고 노력할 것이다. 고마워요! –

관련 문제