我还在填补空白,我不确定如何回答。
我有一个问题,我需要填写此代码中的空白;空白是[x1]
,[x2]
等部分
grades = {"Sam": [85, 90, 95], "Sue": [82, 96, 91], "Ted": [30, 59, 43], "Pat": [72, 75, 78]}
highest = 0
for [x1]:
exams = grades[student]
average = 0
for [x2]:
average += exam
average = average / [x3]
# Make sure that "highest" holds the highest average score.
if [x4]:
[x5]
print(highest)
到目前为止,我尝试过的解决方案是:
[x1]
= grades in student
[x2]
= grade in range(len(student))
[x3]
= sum(exams)
我不确定这些是否正确,我不知道该为[x4]
和[x5]
尝试什么。
答案 0 :(得分:0)
所以我相信你的任务是打印出平均分最高的学生;
grades = {"Sam": [85, 90, 95], "Sue": [82, 96, 91], "Ted": [30, 59, 43], "Pat": [72, 75, 78]}
highest = 0
for [x1]:
exams = grades[student]
average = 0
for [x2]:
average += exam
average = average / [x3]
# Make sure that "highest" holds the highest average score.
if [x4]:
[x5]
print(highest)
highest
显然必须保持最高分,因为它从零开始,我认为你只能改变空白;
grades
包含所有信息,因此显然需要迭代,您需要知道dict
对象在迭代时的行为方式。
如果你有类似的东西:
myDictionary = {keyObject1: valueObject1, keyObject2: valueObject2, keyObject3: valueObject3}
有几种方法可以迭代这个字典,无论是由默认行为提供,还是通过dict
的类方法;
for thing in myDictionary:...
将对字典中的每个条目进行迭代,并将thing
设置为字典的当前key
。
for thing in myDictionary.keys():...
将执行与上述相同的操作,但更明确一点。它与myDictionary.keys()
一样,返回字典的所有key
列表,然后像普通列表一样迭代。
for thing in myDictionary.values()
,您猜对了,与上面相同,但thing
将是字典的当前value
。
在大多数情况下,另一个选项是最好的,因为它使代码更具可读性和简洁性;对于每个字典条目,for thing in myDictionary.items():...
遍历字典设置thing
到tuple
,(key, value)
。我在每个示例中都使用了thing
,但通常您会看到以下内容:
for key in myDictionary:
pass
for key in myDictionary.keys():
pass
for value in myDictionary.values():
pass
for key, value in myDictionary.items():
pass
最后一个将元组解包为两个值。通常,key
/ value
会被其他更有意义的变量名替换。
因此,对于您的第一个blank
,您正在遍历grades
字典,其中keys
是学生姓名,因此您有[x1]
的几个选项;
for student in grades:....
或
for student in grades.keys():....
这将使student
为每个循环保留学生的名字,然后是下一行; exams = grades[student]
将包含该学生的考试成绩。
下一部分只是计算每个学生的平均分数,总结所有结果,然后除以结果数。
再次,它只是循环遍历考试结果数组。
查看下面的代码;
myNumbers = [1,2,3,4,5,6]
for myNumber in myNumbers:
print myNumber
这将打印1 2 3 4 5 6
(每次都在新行上)。这是因为for ... in ...:
构造遍历您给出的任何内容,将变量设置为等于当前元素。您需要遍历存储在exams
数组中的考试结果,然后除以考试结果总数。
目前,您正在迭代range(len(student))
。 len(myArray)
完全按照您的想法执行,它只是给您myArray
的长度,因此在这种情况下,每个学生都会2
。 range(myNumber)
给出一个数组[0, 1, ... myNumber]
,因此在您的代码中,您将计算平均值为(0 + 1 + 2)/ sum(所有检查结果),它始终为零这里。
您需要总结考试成绩,然后将其除以考试成绩数。
至于最后两个变量,如果当前平均值是最高平均值,则此部分尝试计算出来,因此它应测试当前平均值是否大于highest
,然后如果是,则更新highest
。
希望这应该是完成blanks
的其余部分所需的全部内容。
答案 1 :(得分:0)
def get_highest_average(grades):
return max(sum(scores)/len(scores) for scores in grades.values())
此函数将返回字典grades
中的最高平均值。它使用生成器理解来计算每个分数列表的平均值,然后将它们传递给内置的max()
以查找返回的最高值。