#python
#python
Вопрос:
Я пытаюсь записать результаты во внешний файл, а затем просмотреть 5 лучших результатов, отсортированных по результатам. Это мой код:
def winner_1(total_score_1):
print(player_1 " is the WINNER!")
Winner_1 = (str(total_score_1) " points. Scored by " player_1)
f = open("leaderboard.txt", "a")
f.write(''.join(Winner_1))
f.write('n')
f.close()
# Subroutine if player 2 wins and to write the score and winners name to external file
def winner_2(total_score_2):
print(player_2 " is the WINNER!")
Winner_2 = (str(total_score_2) " points. Scored by " player_2)
f = open("leaderboard.txt", "a")
f.write(''.join(Winner_2))
f.write('n')
f.close()
if total_score_1 > total_score_2:
winner_1(total_score_1) #call in the subroutine that player 1 won
elif total_score_2 > total_score_1:
winner_2(total_score_2) #call in the subroutine that player 2 won
else:
tie(total_score_1, total_score_2)
scores = list()
with open('leaderboard.txt', 'r') as f:
for line in f: #reads in the scores from the file and add them to the list
scores.append(line.strip())
f.close()
#sorts the scores in reverese so the highest scores are at the top
scores.sort(reverse = True)
scores_top_5 = scores[0:5] #store the top 5 as a variable
#print the top 5 using a for loop so it shows as a list
i = 1
for x in scores_top_5:
print(i, ".", x) #it shows the position of the player in the leaderboard
i = 1
Я пытаюсь отсортировать его так, чтобы на первом месте были самые высокие оценки, поэтому, если кто-нибудь может помочь, я был бы очень признателен.
Комментарии:
1. Пожалуйста, постарайтесь быть более конкретным в своем вопросе — StackOverflow — это не сервис для написания кода / решения домашних заданий. В чем именно ваша проблема?
Ответ №1:
Вероятно, вы хотите преобразовать свои оценки в int следующим образом:
for line in f: #reads in the scores from the file and add them to the list
scores.append(int(line.strip()))
Обратите внимание, что это приведет к сбою, если существуют оценки, которые не состоят полностью из целых чисел. Вы также можете использовать float
вместо этого, если ваши оценки включают десятичную точку.
Если тип данных int
равен, оценки будут сортироваться по значению, а не лексикографически.
Кроме того, вы можете использовать ключ в сортировке:
scores.sort(key=int, reverse=True)
Это не изменит ваш массив, а отсортирует их, как ожидалось. Это снова приведет к сбою, если какие-либо числа не являются допустимыми целыми числами. Опять же, вы можете заменить int на float для десятичных знаков.
Ответ №2:
когда вы читаете строки из файла, ваши числа преобразуются в строки, и это портит вашу числовую сортировку (вам не нужна лексическая сортировка). вам нужно преобразовать их обратно в числа:
scores.append(int(line.strip()))