我遇到的问题是我有一个测验,用户可以从3个班级中选择。然后他们继续完成测验,目前他们的名字和分数被保存到正确课程的文本文件中(3个不同的课程有3个不同的文件)。但是如果相同的用户完成了测验,那么如何才能完成测验,即只有学生获得的最后2个分数保存在文件中而不是所有分数中。
if classChoice ==1:
File=open("A.txt","a+")
File.write(names+","+str(score)+"\n")
File.close()
if classChoice ==2:
File=open("B.txt","a+")
File.write(names+","+str(score)+"\n")
File.close()
if classChoice ==3:
File=open("C.txt","a+")
File.write(names+","+str(score)+"\n")
File.close()
答案 0 :(得分:0)
显然,您希望将数据保存在由您定义的特定数据结构中。在您的情况下,您只想保存特定学生的最后两个分数。
让我们观察你的文件" A.txt"看:
约翰,90
山姆,80
翘,100
萨姆,90
约翰,100
不是每次都附加文本,而是必须先读取整个文件,然后将其转换为可以使用的字体,如字典。
def convert_file_to_dict(path):
d = {}
lines = open(path).splitlines()
for line in lines:
name, grade = line.split(',')
if name in d:
d[name].append(grade)
else:
d[name] = [grade]
return grade
在我们的情况下,如果我打电话给convert_file_to_dict('A.txt')
,我会收到由{ 'John':['90','100'], 'Sam':['80','90'], 'Alice':['100'] }
组成的字典。请注意,成绩列表中的顺序按照" A.txt"中的行顺序保留。
现在有了这本词典,你可以控制只保留最后两个等级:
def insert_new_grade(grades_dict, name, grade):
if name in grades_dict:
if len(grades_dict[name]) == 1:
grades_dict[name].append(str(grade))
else:
grades_dict[name] = grades_dict[name][1:] + [str(grade)]
else:
grades_dict[name] = [str(grade)]
现在您只需编写一个将此dict转换为文件的函数...
*您可能希望使用collections.defaultdict
等有用的对象,但我不想在这里过度使用......