Есть ли способ переключения нескольких строк друг с другом в текстовом файле? - PullRequest
0 голосов
/ 28 октября 2019

Мне нужен МЕТОД / техника для сортировки текстовых файлов документов игроков по тому, насколько хорошо их результат. Поэтому, если игрок 2 набирает больше очков, чем игрок 1, игроку 2 необходимо перейти на позицию игрока 1 в текстовом файле и наоборот. Возможно ли это?

Итак, я нашел способы, когда документ перечисляет разные категории в каждой строке, чтобы он читал:игрок1, 3, 2, 1игрок2, 1, 2, 3но моя проблема в том, что у каждого игрока есть 4 строки кода, которые нужно переключить. Мой текстовый файл выглядит так:

player13 (* это тот, который имеет значение )21

player21 *23

  • Допустим, игрок 2 много играет и получает больше очков, чем игрок 1, текстовый документ должен выглядеть так:

player24 (*)32

player13 (* это строка, которая имеет значение )21

  • Итак, чтобы уточнить;Мне нужно отсортировать документ, в котором игрок с наибольшим количеством очков записывается первым в текстовом файле. Это сделано для того, чтобы я мог распечатать получившуюся таблицу лидеров в вопросе

  • Обратите внимание: я прошу не код, а пример метода / общего примера (или где его найти), который можетбыть использованы для решения этого типа проблемы. Я действительно в растерянности, заглянул в мою книгу и сюда. Поэтому, если у вас есть ответ на этот вопрос или вы знаете об ответе в теме с той же проблемой, пожалуйста, прокомментируйте ее, это мне очень поможет!

Я знаю, что у меня нет кода для предоставления, но это до н.э. нет ни одного. Мне просто нужна помощь в том, с чего начать / направить меня к методу или примеру

Заранее спасибо: D

1 Ответ

0 голосов
/ 28 октября 2019

Во-первых, вы не можете легко изменить этот тип файла напрямую. Метод такой: чтение данных, изменение данных, запись данных обратно.

Я предполагаю, что вы можете читать свои данные в структуру данных. Например, в вашем случае данные могут быть естественно сохранены в виде списка из 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)

Пустой кортеж is (), икортеж с одним элементом x - это (x,)

, преобразование между ними легко:

list(mytuple) # returns [2,4,6,8]
tuple(mylist) # returns (2,4,6,8)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...