我的课程是数学测验。用户完成10个问题,然后获得分数。然后需要将该分数附加到文本文件中。
if classs == "1":
text_file = open("Class1.txt", "r")
data = text_file.read()
text_file.close()
if name in data:
searchName(name, score)
else:
text_file = open("newFileName.txt","a")
text_file.write(str(name) +","+ str(score)+ "\n")
text_file.close()
questions = 0
score = 0
break
此代码块附加用户对文本文件进行评分和命名。
但是我需要这样做,如果用户已经参加了测验,则会将分数附加到该名称而不是创建新值。应该追加分数,直到一个名称有三个分数,然后如果再次进行测验,它将删除第一个分数并追加最新分数。
def searchName(name, score):
with open("Class1.txt", 'r') as f:
data = f.read().split('\n')
print(data)
with open("newFileName.txt", 'w') as newFile:
for line in data:
if name in line:
line+=(',') + str(score) + (',')
newFile.write(line + '\n')
但它只能保存1分,并在再次进行测验后将其删除。
Dion,0
Jarrod,1
Jake Bing,6
Charlie,2,5
还原为
Dion,0
Jarrod,1
Jake Bing,6,5
Charlie,2,
如果其他用户使用测验(Jake Bing)
答案 0 :(得分:0)
def main():
data_file = open("C:\Users\sama0714\Test\\test.txt");
data = dict()
new_score = ("Jake Bing", 4)
for line in data_file.readlines():
record = line.split(':')
data[record[0]] = list(record[1].split(','))
try:
data[new_score[0]].append(new_score[1])
except KeyError:
data[new_score[0]] = list(str(new_score[1]))
data_file.close()
data_file = open("C:\Users\sama0714\Test\\test.txt","w");
for name, scores in data.items():
data_file.write(name + ":" + ",".join(str(i) for i in scores))
data_file.close()
如评论中所述,读取整个文件并更改数据并将其写回。
我在这里使用字典访问特定播放器的信息以快速访问数据,使用可以使用任何数据处理程序list
或'set`等。
我已将文件中的数据结构更改为如下,以便轻松创建字典。 (:
将名称与分数分开)
查理:2,5
翁:0
贾罗德:
杰克冰:4
我试图消除KeyError失败,以防这是第一次尝试
答案 1 :(得分:0)
处理此问题的最简单方法可能是为每个类创建一个字典(尽管如果类中有重复的名称,这将很容易出现问题)。对于每个名称(字典键),您可以创建列表并将分数附加到列表中。处理完输入后,您可以立即写下所有分数。这比重复读取和写入文件更有效。它可能看起来像这样(在student_dict
语句后创建if classs...
):
def search_name(name, score, student_dict):
if name not in student_dict.keys():
student_dict[name]=[]
student_dict[name].append(score)
return student_dict #{"student_name":[score_1,score2], ... }
完成乐谱处理后,您可以一步将名称和乐谱列表直接写入文件。理想情况下,我会完全取消search_name
,只需一步将所有名称和分数直接导入字典,然后在第二步中将字典写入文件。有关如何编写词典的更多信息,请查看this。要了解如何将列表转换为字符串,请查看this page。如果您还有其他问题,请与我们联系。