【问题标题】:Is there a method for switching several lines with each other in a text file?有没有一种方法可以在文本文件中相互切换几行?
【发布时间】:2020-02-23 20:02:32
【问题描述】:

我需要一种方法/技术来根据玩家的得分高低对玩家的文本文件文档进行排序。因此,如果玩家 2 的得分高于玩家 1,则玩家 2 需要在文本文件中向上移动到玩家 1 的位置,反之亦然。这可能吗?

因此,当文档在每一行列出不同的类别时,我找到了方法,因此它显示为:

播放器 1、3、2、1
播放器 2、1、2、3

但我的问题是每个玩家都有 4 行代码需要切换。我的文本文件如下所示:

播放器1
3(*这是最重要的
2
1

播放器2
1 *
2
3

  • 因此,假设玩家 2 玩了很多游戏并获得比玩家 1 更高的分数,文本文档应该看起来像

播放器2
4 (*)
3
2

播放器1
3(*这是最重要的一行
2
1

  • 所以澄清一下;我需要对文本文件中首先写入得分最高的播放器的文档进行排序。这样我就可以打印有问题的结果排行榜

  • 请注意:我要求的不是代码,而是可用于解决此类问题的方法/一般示例(或在哪里可以找到)。公元前我真的很茫然,看着我的书和这里。因此,如果您对此有答案或知道有相同问题的已回答主题,请发表评论,这将对我有很大帮助!

我知道我没有任何代码可以提供,但那是因为没有。我真的只需要一些帮助来帮助我从哪里开始/指导我找到一个方法或例子

提前致谢:D

【问题讨论】:

  • 注意,如果你有一个文本文件,不需要额外的工具,你需要将它全部读入内存并修改内存中的字符串。然后将修改后的字符串写回替换原始文件。
  • 首先,您应该将所有玩家解析成一个字典,以便每个玩家都有一个分数列表。那么简单的就是在所有列表中取最高分并返回字典键值对

标签: python python-3.x text ranking leaderboard


【解决方案1】:

首先,你不能轻易地直接修改这种文件。方法是:读取数据,修改数据,写回数据。

我假设您可以将数据读入数据结构。例如,在您的情况下,数据可以自然地存储为 4 元组列表。每个 4 元组看起来像这样:

    ("player1", 3, 2, 1)

(您应该确保存储了分数的数字,而不是字符串,因为它们需要稍后进行比较。)

假设您已将它们存储在名为 player_list 的列表中

接下来,您需要对列表进行排序。您需要的排序键是每个元组中的第二个条目,在 Python 术语中它的索引为 1(因为编号从 0 开始)

def sort_key ( tup ): return tup[1]

然后您可以使用此排序键传递给排序函数(请参阅此https://docs.python.org/3/library/stdtypes.html#list.sort)这将对您的列表进行就地排序:

player_list . sort ( key = sort_key, reverse = True )

(我们需要“反转”来确保顺序是递减的,而不是递增的。)

最后,您需要以新的顺序再次写出 player_list 来覆盖文件:

for (player, s1, s2, s3) in player_list:
    write_entry_to_file ( player, s1, s2, s3 ) # use whatever format you need here.

元组注意事项:

元组很像列表,只是一旦你创建了一个元组,它就无法更改(“不可变”)。要创建一个元组,请使用括号 () 而不是方括号 []。

mylist = [2, 4, 6, 8]
mytuple = (2, 4, 6, 8)

你可以用同样的方式索引它们

mylist[0] # returns 2
mytuple[0] # returns 2 too
mylist[1:3] # returns the list [4, 6]
mytuple[1:3] # returns the tuple (4, 6)

并以相同的方式附加它们

[2,4] + [6,8] # returns [2,4,6,8]
(2,4) + (6,8) # returns (2,4,6,8)

空元组为(),单元素x的元组为(x,)

两者之间的转换很容易:

list(mytuple) # returns [2,4,6,8]
tuple(mylist) # returns (2,4,6,8)

【讨论】:

  • 谢谢安德鲁!我对使用元组以及元组和列表之间的转换并不完全有信心,但无论如何我会尽力而为。不过,这对我开始很有帮助,非常感谢。
  • 不客气。我添加了一些关于元组与列表的注释。如果这有帮助,请投票/接受答案。
猜你喜欢
  • 2011-07-20
  • 1970-01-01
  • 2010-09-19
  • 2022-01-02
  • 2011-12-03
  • 1970-01-01
  • 1970-01-01
  • 2012-04-30
  • 1970-01-01
相关资源
最近更新 更多