Сортировка смеси однозначных и двузначных чисел - PullRequest
0 голосов
/ 16 октября 2018

Я создаю игру, в которой вы угадываете песню от ее исполнителя и предоставили несколько букв.Я хочу создать список рекордов, но мне трудно, когда у меня такие оценки, как 9 и 12, сортировка по питону 9 выше, чем 12, потому что 1 <9. Я хотел бы помочь с этим, если все в порядке.</p>

print('Score: ' + str(score))
name = input('Enter your name: ')

scoreAppender.append(str(score))
scoreAppender.append(name)
scoresData = '-'.join(scoreAppender)
print(scoresData)

scoresfile = open('scores.txt', 'a')
scoresfile.write(scoresData + '\n')
scoresfile.close()

scoresfile = open('scores.txt', 'r')

scoresList = []

for score in scoresfile:
    scoresList.append(score)

scoresList.sort(key = lambda x: x.split('-')[0])

for score in scoresList:
    print(score)

scoresfile.close()

Ответы [ 2 ]

0 голосов
/ 16 октября 2018

Если бы мне было позволено играть рок-н-ролл на вашем коде, я бы сделал что-то вроде:

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

0 голосов
/ 16 октября 2018

Просто конвертируйте в int в вашем ключе сортировки лямбда:

scoresList.sort(key = lambda x: int(x.split('-')[0]))
...