我这里有一些使用" pickle"的python 3代码模块。它应该存储游戏的高分。当我再次打开程序时,它会给我默认的" A:100 ......"高分。
def __init__(self):
self.filename = "highscores.dat"
self.numScores = 5
if not os.path.isfile(self.filename):
self.file = open(self.filename, "wb")
self.scores = [100 for i in range(self.numScores)]
self.names = ["A", "B", "C", "D", "E"]
self.highscores = [(self.names[i], self.scores[i]) for i in range(self.numScores)]
self.updateFile()
else:
file = open(self.filename, "rb")
self.highscores = pickle.load(file)
file.close()
self.file = open(self.filename, "wb")
self.names = [highscore[0] for highscore in self.highscores]
self.scores = [highscore[1] for highscore in self.highscores]
def addScore(self, name, score):
self.scores.append(score) #Add new score
self.scores.sort(reverse = True) #Sort
self.names.insert(self.scores.index(score), name)
self.names = self.names[:self.numScores] # Top 5
self.scores = self.scores[:self.numScores]
self.highscores = [(self.names[i], self.scores[i]) for i in range(self.numScores)]
self.updateFile()
def updateFile(self):
pickle.dump(self.highscores, self.file)
这只是代码中我认为存在问题的部分。如果需要,我会发布更多。我很乐意回答你的问题。谢谢。
答案 0 :(得分:1)
每次都需要重新打开文件进行写入。目前,每次分数在您的文件中一个接一个地更改时,您正在编写新记录。您的文件现在包含多个泡菜,但只有第一个正在阅读。
将您的代码更改为:
def __init__(self):
self.filename = "highscores.dat"
self.numScores = 5
if not os.path.isfile(self.filename):
self.scores = [100 for i in range(self.numScores)]
self.names = ["A", "B", "C", "D", "E"]
self.highscores = [(self.names[i], self.scores[i]) for i in range(self.numScores)]
else:
with open(self.filename, "rb") as f:
self.highscores = pickle.load(f)
self.names = [highscore[0] for highscore in self.highscores]
self.scores = [highscore[1] for highscore in self.highscores]
def updateFile(self):
with open(self.filename, 'wb') as f:
pickle.dump(self.highscores, f)
addScore
未更改。
每次分数变化时,高分文件现在都是从头开始 。