2

我已经在同一个战舰游戏上工作了很长一段时间,现在已经到了最后阶段。现在我需要让游戏使用函数将前五名的分数保存在一个文本文件中def saveScore。然后我需要它来读取我刚刚创建的文件并将分数加载到 Python 代码中,并使用tryexcept来打开和关闭文件。我不知道如何让 Python 识别我的变量score,因为我相信它只是本地的。这就是我所拥有的。我不知道如何使用泡菜。

def main():
    board=createBoard()
    printBoard(board)
    s = [[21,22,23,24,25],
    [45,55,65,75],
    [1,2,3],
    [85,86,87],
    [5,15],
    [46,56]]
    playBattleship(s,board)
main()
4

3 回答 3

2

使用 pickle 是将 python 对象序列化到文件中的一种较低级别的方法,然后将格式再次读回对象中。如果您想要一些更高级的界面,可能更容易自然使用,请尝试查看shelve模块:http ://docs.python.org/library/shelve.html#example

您可以将其视为字典,只需附加并保存您的分数。它将通过在引擎盖下酸洗保存到文件中。

import shelve

# open a shelve file. writeback=True makes it save
# on the fly
d = shelve.open('temp.file', writeback=True)
if not d.has_key('scores'):
    d['scores'] = []

print d['scores']
# []

# add some score values
d['scores'].append(10)
d['scores'].append(20)
d.close()

# next time, open the file again. It will have
# the 'scores' key. Though you should probably check
# for it each time in case its a first run.
d = shelve.open('temp.file', writeback=True)
print d['scores']
#[10, 20]

# sort the list backwards and take the first 5 top scores
topScores = sorted(d['scores'], reverse=True)[:5]
于 2012-04-26T18:14:11.163 回答
1

可能最简单的方法是使用 Pickle。使用“加载”和“转储”功能,您可以轻松保存/加载乐谱对象。

http://docs.python.org/library/pickle.html

import pickle

def saveScore(score):
    pickle.dump(score, 'topfive2.txt')

def loadScore():
    return pickle.load('topfive2.txt')
于 2012-04-26T18:09:41.670 回答
1

在 Python 中读取和写入文件非常简单

# Opening a file for writing will return the file handle f
f = open('/tmp/workfile', 'w')

# You can then write to the file using the 'write' method
f.write('Hello world!\n')

# To read your data back you can use the 'read' or 'readlines' methods

# Read the entire file
str = f.read()

# Read the file one line at a time
line = f.readline()

# Read the file into a list
list = f.readlines()

如果您想存储更多数据而不仅仅是最后一个分数,您可以考虑创建一个 SQLite3 数据库。Python 对 SQLite3 有很好的内置支持。这是一个跨平台的文件系统数据库。该数据库只是磁盘上的常规文本文件,但它支持您期望从数据库中执行的许多 SQL 操作。

于 2012-04-26T18:15:15.710 回答