Как отсортировать мой файл (рекорды) с python? - PullRequest
0 голосов
/ 14 февраля 2020

В настоящее время я работаю над игрой в кости для моей курсовой работы по информатике. Я на последней части, которая требует, чтобы я отсортировал свои результаты в текстовый файл. Это то, что у меня есть до сих пор

player1=input("input") ##Temporary inputs (these values are got from the actual code)
player1score=int(input("input"))


highscore = open("Scores.txt", "r")
whowon=("{0}".format(player1score,player1))
highscores = highscore.readlines()
highscore.close()
highscore = open("Scores.txt", "a")
highscore.write(whowon)
highscore.write("\n")
highscore.close()
highscore = open("Scores.txt", "r")
highscores = highscore.readlines()
highscores.sort()
highscores.reverse()


top1=highscores[0]
top2=highscores[1]
top3=highscores[2]
top4=highscores[3]
top5=highscores[4]

top=("{0}{1}{2}{3}{4}".format(top1, top2, top3, top4, top5))

highscore.close()

highscore=open("Scores.txt", "w")
highscore.write(top)
highscore.close()


По сути, в документе они сортируются по порядку, но не учитывается количество заполнителей. Например:

8
7
6943734
5

Это будет отсортировано только в зависимости от первого места. И я не знаю, как это исправить. Очевидно, 6943734 должно быть наверху.

Спасибо.

1 Ответ

0 голосов
/ 14 февраля 2020

Заменить:

highscores.sort()
highscores.reverse()

на

highscores = [ x.rstrip() for x in highscores ]
highscores.sort(reverse=True, key=int)

Первая строка удаляет символы новой строки из ваших строк, поэтому они могут быть преобразованы в целые числа с помощью функции int(), вторая - сортирует по убыванию в соответствии со значением int. Кстати, эта часть:

top1=highscores[0]
top2=highscores[1]
top3=highscores[2]
top4=highscores[3]
top5=highscores[4]
top=("{0}{1}{2}{3}{4}".format(top1, top2, top3, top4, top5))

может быть сокращена до:

top = '\n'.join(highscores[0:5])

(здесь вам необходимо добавить новые строки перед записью ваших рекордов в файл).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...