Я только начал изучать Python и написал код для игры в кости, я сохранил рекорды в текстовом файле и в конце я хочу вывести 5 лучших рекордов.
я сохранил каждую оценку в текстовом файле со следующей структурой: имя: оценка
Вот код, который я написал:
file = open ("DiceGameScores","r")
for line in file:
file_line = line.split(": ")
value = file_line[-1]
print (value)
scores = value
print (scores)
mylist = []
mylist.extend (scores)
print (mylist)
mylist.sort(reverse = True)
print (mylist[0:5])
file.close()
я вывел баллы и список для проверки, и когда я запускаю его, я получаю это:
62
58
57
44
46
46
['4', '6', '\n']
['6', '4', '\n']
46 - это последний рекорд программа помещает каждую цифру в качестве значения списка и принимает новую строку (\n) часть кода
Как я могу получить 5 лучших рекордов по порядку и в виде целых чисел, пожалуйста?
Нужно ли также выводить имя? в противном случае поместите баллы в список и отсортируйте список.
@Даниэль, да, мне нужно вывести имя с оценкой
@ M-Chen-3 текстовый файл - это просто имя пользователя, пробел, затем двоеточие, еще один пробел, затем оценка
mylist.extend(scores)
должен быть mylist.append(int(scores))
и перемещен внутрь цикла
@Tomerikoo, спасибо, что позволили включить всю оценку в список, но я все еще не знаю, как поместить все оценки в один список.
Что ты имеешь в виду? Как я уже сказал, с помощью append
... Определите пустой список перед циклом и append
каждую оценку внутри цикла.
@Tomerikoo извините, я забыл определить пустой список перед циклом - спасибо за вашу помощь
Используя pandas, вы можете прочитать файл в фрейме данных, а затем отобразить количество баллов, таких как
import pandas as pd
df = pd.read_csv("data.txt",sep=':', header=None)
df.columns = ["name","score"]
df.sort_values("score", inplace=True, ascending=False)
df.iloc[:3]
отображает 3 лучших результата
name score
3 d 78
2 c 67
1 b 56
Что вам нужно, так это объявить список вне цикла. Затем добавьте обновленный score
в свой список. Остальной код как у вас.
file = open("DiceGameScores", "r")
mylist = []
for line in file:
file_line = line.split(": ")
value = file_line[1]
print(alue)
scores = value
print(scores)
mylist.append(scores)
print(mylist)
mylist.sort(reverse=True)
print(mylist[0:5])
Ваши две основные проблемы:
extend
...extend берет итерируемый объект (в данном случае строку из файла) и добавляет все его элементы в список. Вот почему вы получаете ['4', '6']
. Кроме того, вы получаете только одно число, потому что делаете это вне цикла. Вам нужно добавить целое число, используя append
, и сделать это внутри цикла. Вы также должны преобразовать баллы в целые числа для правильной сортировки:
mylist = []
with open("DiceGameScores","r") as file:
for line in file:
file_line = line.split(':')
value = file_line[-1]
print (value)
mylist.append(int(value))
print(mylist)
mylist.sort(reverse=True)
print(mylist[:5])
Обратите внимание на использование с для открытия файла — это идиоматический способ обработки файлов в Python. Намного лучше, чем использовать open/close
. Прими это!
Пожалуйста, приведите пример того, как выглядит ваш текстовый файл.