2017-04-09 122 views
1

我在Python中很新。制作我在python中制作的游戏的高分列表

所以我目前正在使用tkinter和python制作游戏的高分榜。到目前为止,我有代码:

from operator import itemgetter 
import pickle 

playerName = input("what is your name? ") 
playerScore = int(input('Give me a score? ')) 

highscores = [ 
    ('Luke', 0), 
    ('Dalip', 0), 
    ('Andrew', 0), 
] 

highscores.append((playerName, playerScore)) 
highscores = sorted(highscores, key = itemgetter(1), reverse = True)[:10] 

with open('highscore.txt', 'wb') as f: 
    pickle.dump(highscores, f) 

highscores = [] 

with open('highscore.txt', 'rb') as f: 
    highscores = pickle.load(f) 

的问题是,它把这个到文件:

€] Q(X lukeqK†QX LukeqK†QX DalipqK†QX And​​rewqK†QE (和是的,这正是它看起来像)

我不知道什么是错了,任何人都可以帮助,请

+1

为什么这是一个问题吗?通过使用'pickle',您可以将数据序列化并反序列化为二进制格式。您正尝试读取不包含unicode的文件的文件内容,这就是为什么它看起来很奇怪。装载后的“高分”是否包含正确的信息?如果是这样,没有错。 – Ede

+0

这里没有什么错:'pickle'产生一个数据的二进制表示 - 所以它不应该是人类可读的。当你加载你的腌制文件时,你会得到你的数据。如果你想要一个人类可读的文件,你可以使用'json'。请参阅https://docs.python.org/3/library/pickle.html#comparison-with-json –

回答

1

pickle产生数据的二进制表示 - 所以它不应该是人类可读。

当你加载你的腌制文件时,你得到你的数据,所以一切工作正常。

如果你想要一个人类可读的文件,一个常见的解决方案是使用json。请参阅http://docs.python.org/3/library/pickle.html#comparison-with-json进行比较。特别是:

默认情况下,JSON只能表示Python内置的 类型的一个子集,并且没有自定义类; pickle可以代表一个非常大的Python类型数量(其中很多是自动的,通过灵巧地使用 Python的内省设施;复杂的情况可以通过执行特定对象API的 来解决)。

您只需要使用json,而不是pickle在你的代码:

from operator import itemgetter 
import json 

try: 
    with open('highscore.txt', 'r') as f: 
     highscores = json.load(f) 
except FileNotFoundError: 
    # If the file doesn't exist, use your default values 
    highscores = [ 
     ('Luke', 0), 
     ('Dalip', 0), 
     ('Andrew', 0), 
     ] 

playerName = input("what is your name? ") 
playerScore = int(input('Give me a score? ')) 

highscores.append((playerName, playerScore)) 
highscores = sorted(highscores, key = itemgetter(1), reverse = True)[:10] 

with open('highscore.txt', 'w') as f: 
    json.dump(highscores, f) 

highscores = [] 

highscore.txt内容将是这样的:

[["thierry", 100], ["Luke", 0], ["Dalip", 0], ["Andrew", 0]] 
+0

感谢Thierry它的工作!我如何获得它,以便一旦它将名称添加到文件中,它就停留在那里?因为当我重新运行代码之前,它就摆脱了分数。 –

+0

您应该在输入新分数前阅读高分档案。我更新了我的答案。 –