这个问题问题来自代码学院。我想出了一个解决方案,虽然不是很满意,因为我认为我在以编程方式作弊以使代码工作。有没有其他方法可以解决这个问题。我见过更难的代码。这是相当直截了当的。
三个有四个键的学生词典。其中三个键是列表。计算平均值的函数 计算字母等级的函数 计算每个孩子的平均值的函数
好吧,调用每个孩子函数的平均值来计算平均值就像所有函数一样工作正常。
但是,如果创建一个新列表以包含所有 3 个学生 --- 即生成学生列表,其中包含 3 个列表项。每个项目都有一个字典,有四个键。四个键中的三个是列表。呸!!!
我在 getClassAverage 函数中使用了一个带有计数器和增量的 for 循环来计算平均值。
问题:
是否有另一种方法来计算平均值而无需 for 循环,即仅在函数内,因为仅使用“谁”传递的参数使其具有学生(数据)并且不能很好地引用列表。给出字符串索引,而不是整数”错误?
列表内键,列表内。如何从 getClassAverage 函数打印学生姓名?
谢谢!
Lloyd = {
"name":"Lloyd",
"homework": [90,97,75,92],
"quizzes": [ 88,40,94],
"tests": [ 75,90]
}
Alice = {
"name":"Alice",
"homework": [100,92,98,100],
"quizzes": [82,83,91],
"tests": [89,97]
}
Tyler = {
"name":"Tyler",
"homework": [0,87,75,22],
"quizzes": [0,75,78],
"tests": [100,100]
}
def average(stuff):
return sum(stuff)/len(stuff)
def getLetterGrade(score):
score = round(score)
if score >= 90: return "A"
elif 90 > score >= 80: return "B"
elif 80 > score >= 70: return "C"
elif 70 > score >= 60: return "D"
elif 60 > score: return "F"
def getAverage(kid):
bar = average
return bar(kid["homework"])*.1 + bar(kid["quizzes"])*.3 + bar(kid["tests"])*.6
students = [Lloyd,Alice,Tyler]
def getClassAverage(who):
class_ave = 0
class_avetot = 0
count = 0
for x in who:
class_avetot = class_avetot + getAverage(who[count])
#print who[count]
stu_score = getAverage(who[count])
print stu_score
print getLetterGrade(stu_score)
count = count + 1
class_ave = class_avetot / len(who)
return class_ave
print str(getClassAverage(students))