В разделе игры, которую я создаю, пользователь вводит имя пользователя. Имя пользователя и оценка пользователя сохраняются в объекте, который маринован во внешний файл, в котором есть другие маринованные объекты оценки.Итерирование через список объектов, загружаемых pickle
У меня тогда есть кнопка в пользовательском интерфейсе, которая при нажатии должна отображать самые высокие оценки всех игроков в порядке убывания.
Загрузите файл в список с кодом, который я нашел here.
Highscores = []
Highscores = pickle.load(open("Highscores.txt", "rb"))
Затем я использую сортировку пузырьков для сортировки списка объектов, показанных ниже.
def bubbleSort():
swapOccured = True
while swapOccured == True:
swapOccured = False
for i in Highscores:
if Highscores[i].score > Highscores[i + 1].score:
hold = Highscores[i + 1]
Highscore[i + 1] = Highscores[i]
Highscores[i] = Highscores[i + 1]
swapOccured = True
Ошибка, которая становится Возвращается
for index in Highscores:
TypeError: iteration over non-sequence
Я посмотрел на другие вопросы, как это, например here но ошибка в том, что программа была перекручивание через объект не обхвата по списку объекты. Я почти уверен, что это не такая же ошибка, как в примере, я думаю, что это может быть с загрузкой в список объектов с рассолом, но я застрял.
Любая помощь была бы принята с благодарностью.
Определение рекордов как списка, прежде чем вы загружаете рассол, не изменяет того, что объект находится при его загрузке; он просто перезаписывает предыдущее значение. Ясно, что все, что было спасено в рассоле, не список. –
@ DanielRoseman да. Я думаю, что я добавляю объекты в рассол, как будто это список, но это не так. Это код, который я использую, чтобы свалить его. 'currScore = calculateScore()' ' currUser = tkSimpleDialog.askstring ("", "Пожалуйста, введите имя пользователя:")' ' newHighscore = scoreEntry (currScore, currUser)' ' с открытыми (" Рекорды. txt "," ab ") как f: pickle.dump (newHighscore, f)' –