之前我曾经问了类似这样的问题,所以我道歉,但我读回了这个任务,误读了原来的要求。
所以,根据我在这里收到的反馈,这是我使用的代码:
def task3():
classList = {}
classSearch = input("Which class would you like to interrogate? ")
try:
with open("answers " + classSearch + ".txt", 'rb') as handle:
classList = pickle.loads(handle.read())
except IOError as error:
print ("Sorry, this file does not exist")
sortOption = int(input("Would you like sort the students in alphabetical order? Enter 1\n Would you like to sort the students by highest score? Enter 2 \nWould you like to sort students by their average score?Enter 3\n"))
if sortOption == 1:
x = sorted(classList.items())
for key, value in x:
value.sort()
value.reverse()
print (x)
所以我真正需要做的是输出每个学生的最高分,按姓名按字母顺序排序。在classList词典中是学生姓名,然后是包含他们在测验中收到的最后3个分数的列表。这显然是针对多个学生重复的。任何帮助都将受到大力赞赏。
答案 0 :(得分:0)
这样的事情应该有效,假设输入完全未分类:
for name,highscore in [(student,max(classList[student])) for student in sorted(classList.keys())]:
print name,highscore
<强> ETA 强>:
根据要求,提供解释。
classList是dict
,每个成员由一个键(学生的名字)和一个值(该学生的分数列表)组成。
我建议的代码遍历对元组的预排序列表理解,其中包含该学生的学生姓名和最高分,并依次打印每个。
列表理解完成了所有工作。
classList.keys()
会生成一个包含学生姓名的列表。在这种情况下,内置sorted
函数返回按字母顺序排序的相同内容。
列表推导就像一个for循环,遍历键列表,并构建一个元组列表。
你也可以说
sortedNames = sorted(classList.keys())
for student in sortedNames:
high_score = max(classList[student])
print student, high_score