我做了简单的提交分数选项。用户输入名称和分数,并将其保存到列表中。列表仅保存前10个分数。比,列表打印到.txt文件。但它只在程序运行时才有效。当我再次启动时,.txt文件中只有默认分数。用户分数未保存。我正在使用pickle模块。
这是我的代码。它是Python 3.4和Tkinter。 请记住,我正在学习python。
# This is inside class
# ...
# ...
self.printto = tk.Button(self, text="Submit",
command=self.highscore
)
self.printto.pack(side="left")
self.high_scores = [
('Liz', 1800)
]
def highscore(self):
name = self.name_ent.get()
score = int(self.score_ent.get())
self.high_scores.append((name, score))
high_scores = sorted(self.high_scores, key=itemgetter(1), reverse=True)[:10]
with open('D:\Desktop/mytext.txt', 'wb') as f:
pickle.dump(high_scores, f)
答案 0 :(得分:3)
您只是将数据保存到文件,但您没有阅读它。您必须在程序开头打开文件并从中读取分数。
with open('D:\Desktop/mytext.txt', 'rb') as f:
high_scores = pickle.load(f)
答案 1 :(得分:-1)
很少有事情 第一件事:你的问题就在这里
with open('D:\Desktop/mytext.txt', 'wb') as f:
你打开一个文件,而不是追加模式,但是在创建中,所以每次你想要写一些东西到文件中时,你只需要覆盖现有文件。您可能希望先阅读它并与您要写的日期进行比较,以获得前10个分数。
第二件事:
使用pickle
保存包含strings/ints
的列表有点矫枉过正。请改用json.dumps/loads
答案 2 :(得分:-1)
user_score = {}
with open('D:\Desktop/mytext.txt') as f:
for line in f:
#add user and score to user_score here