Python酸洗问题
这里有一些使用“pickle”模块的python 3代码。它应该存储游戏的高分。当我再次打开程序时,它会给我默认的“A:100…”高分Python酸洗问题,python,python-3.x,pygame,pickle,Python,Python 3.x,Pygame,Pickle,这里有一些使用“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.
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)
这只是代码中我认为问题所在的部分。如果需要,我会发布更多。我很乐意回答你的问题。谢谢。每次写入时都需要重新打开文件。目前,每次分数更改时,您都会在文件中逐个写入新记录。您的文件现在包含几个pickle,但只读取第一个pickle 将代码更改为:
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
不变
每次分数发生变化时,highscore文件都会从头开始写入。如果要使用完整的绝对路径名,那么它是否有效?如“C:\Users\Bobby\Dropbox\LD25\highscores.dat”中所示?我刚刚测试了它,但它也有同样的问题。您可能需要在
\uuu init\uuuu
中插入一个print语句,以查看.isfile()测试在那里发生了什么。文件是否已经创建?已经想到了。就我所知,它可以正常工作。下一个测试是在updateFile()
中添加一个print语句,打印self.highscores
。我可以问一些完全不同的问题吗?你有多少年的python经验?我不得不承认我有点嫉妒:事实上,阅读你的职业简介让我更加嫉妒:P我想感谢你在这里与我们分享你的知识!这对像我这样最近开悟的人来说意义重大!谢谢我不能直接复制这段代码,因为我参加了一个禁止这类事情的竞赛,但我能够根据您的解释编写我自己的解决方案。