Если бы мне было позволено играть рок-н-ролл на вашем коде, я бы сделал что-то вроде:
import operator
score = 10 # for instance
print(f'Score: {score}')
name = input('Enter your name: ')
scoresData = f'{score}-{name}'
print(scoresData)
with open('scores.txt', 'a') as database: # yea i know
database.write(scoresData + '\n')
# ---
scoresList = {}
with open('scores.txt', 'r') as database:
for row in database:
score, player = row.split('-', 1)
scoresList[player.strip('\n')] = int(score) # Remove \n from the player name and convert the score to a integer (so you can work on it as an actual number)
for row in sorted(scoresList.items(), key=operator.itemgetter(1)): # Sort by the value (item 1) of the dictionary
print('Player: {} got a score of {}'.format(*row))
Сортировка предоставлена [A] Каксортировать словарь по значению?
И если вы хотите по-настоящему придумать, вы можете сделать:
import pickle
...
with open('scores.db', 'wb') as database:
pickle.dump(scoreList, database)
или снова загрузить значения:
with open('scores.db', 'rb') as database:
scoreList = pickle.load(database)
Что исключает необходимость разбора текстового файла.Вам не нужно беспокоиться о выполнении player.strip('\n')
, потому что не будет никаких новых строк и т. Д.Недостатком создания дампа памяти с помощью pickle является то, что я являюсь «дампом памяти», то есть редактирование значений на месте не совсем возможно / прямолинейно.
Другим хорошим решением будет использование sqlite3, однако - это довольно сложно, если вы не привыкли работать с базами данных.Если вы готовы, это ваш самый лучший маршрут в долгосрочной перспективе.