需要帮助解决Python练习

时间:2015-03-11 04:19:15

标签: 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))

每个学生都有一个包含四个键和值的字典(姓名,家庭作业,演员和考试)。该计划应该做的是取得学生的分数,获得他们的个人平均分,然后获得课程&#39;平均。作业代表每个学生平均成绩的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()的pne。

2 个答案:

答案 0 :(得分:3)

你的问题是这行代码:

students = ["john", "paul", "tyler"]

您要将students列表设置为字符串的列表,而不是字典列表。删除引号。

students = [john, paul, tyler]

现在您有一个学生词典列表,程序运行时输出如下:

83.8666666667
B

答案 1 :(得分:0)

你的students数组是一个字符串数组(文字字符串“john”,“paul”,“tyler”)。

您应该使用变量名称(无引号)创建数组。

students = [john, paul, tyler]