我必须制作一个简单的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。
答案 0 :(得分:3)
你的问题是这行代码:
students = ["john", "paul", "tyler"]
您要将students
列表设置为字符串的列表,而不是字典列表。删除引号。
students = [john, paul, tyler]
现在您有一个学生词典列表,程序运行时输出如下:
83.8666666667
B
答案 1 :(得分:0)
你的students
数组是一个字符串数组(文字字符串“john”,“paul”,“tyler”)。
您应该使用变量名称(无引号)创建数组。
students = [john, paul, tyler]