在游戏的python文本文件中组织/重新排列最高分或最低分

时间:2017-01-19 03:45:37

标签: python algorithm file text

相关背景资料

我正在用Python开发游戏& Pygame为我的高中计算机科学决赛。我完成了所有这些。它是一个僵尸射击游戏,玩家以某个分数和他们的名字结束。我将分数保存到文本文件中。每增加一个新分数,它应该在新行中看起来像这样:

罗纳德3680

Ronald是名字,3680是得分,在名称和得分之间是一个奇异的空间。

我想做的事

如何组织和重新排列文本文件中从最高(最高)到最低(最低)的所有分数。

我不需要帮助

这样我就可以获得高分状态,玩家可以在其中查看本地保存文件中的最高分数。

加成

我尝试将答案应用于其他类似的问题但是我不知道的很多东西,我甚至不理解它是如何工作的。所以我正在诉诸一个问题。

抱歉,我忘记了。使用Python 2.7

2 个答案:

答案 0 :(得分:1)

首先阅读文件:

with open('filename', 'r') as file:
    highscore = [line.strip().rsplit(' ', 1) for line in file if line.strip()]

这将打开文件,然后创建一个包含所有非空(if line)行的列表,然后删除每行开头和结尾的空格并将其拆分到最右边的空白处(只有这样的播放器名称)空格不分裂。)

然后你需要(反向)按第二个元素(得分)排序高分:

from operator import itemgetter
sorted_highscore = sorted(highscore, reverse=True, key=lambda x: int(x[1]))

最后再将该文件写入文件:

with open('outfilename', 'w') as file:
    file.write('\n'.join(['{} {}'.format(name, score) for name, score in sorted_highscore]))

答案 1 :(得分:0)

最简单的方法是将现有文件加载到数据结构中:

scores = []
if os.path.exists(filename):
    with open(filename) as scorefile:
        for line in scorefile:
            scores.append(line.rsplit(maxsplit=1))

现在你有一个(名称,分数)元组列表。添加新的:

scores.append(("Your Name", 9923))

然后对整个事情进行排序:

scores.sort(reverse=True, key=lambda name, score: score)

现在将其写回文件。