Пытаюсь добавить систему сохранения, но я не могу изменить файлы на переменные в python

#python

#python

Вопрос:

честно говоря, я понятия не имею, что я делаю, поэтому, если кто-то может помочь, это было бы очень ценно, я пытаюсь создать игру с сохранением, чтобы вы могли сохранить, а затем использовать load, и он прочитает файл и восстановит прогресс, но он не работает

 bag=[""]
gold=0
weapon=["cool looking stick,1"]
level=1
savefile=input("what is you name")
load=input("would you like to load a previous save")
if load == "yes":
    f = open(savefile "'s save.bag.txt", "r")
    str(bag) == (f.read())
    f.close()
    f = open(savefile "'s save.gold.txt", "r")
    str(gold) == (f.read())
    f.close()
    f = open(savefile "'s save.level.txt", "r")
    level == (f.read())
    f.close()
    f = open(savefile "'s save.weapon.txt", "r")
    str(weapon) == (f.read())
    f.close()
else:
    f = open(savefile "'s save.bag.txt", "w")
    f.write(str(bag))
  

и т. д

Ответ №1:

Помимо того факта, что вы используете оператор сравнения равенства == вместо оператора присваивания = для чтения, ваш код не будет работать ни с чем, кроме строк (поскольку это то, что вы получаете из f.read() текстового файла).

Для сохранения структурированных данных в целом я бы рекомендовал использовать JSON, но для сохранения произвольных классов pickle формат довольно идеален и проще.

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

  • Метод Player.load() classmethod загружает объект из файла. (На самом деле это не подтверждает, что он загружает проигрыватель. Может быть любой объект.)
  • Метод Player.save() экземпляра сохраняет объект в файл с соответствующим именем.
 import pickle


class Player:
    def __init__(self, name):
        self.name = name
        self.bag = []
        self.gold = 0
        self.weapon = ["cool looking stick,1"]
        self.level = 1

    def save(self):
        with open(self.name   ".save", "wb") as f:
            pickle.dump(self, f)

    @classmethod
    def load(cls, name):
        with open(name   ".save", "rb") as f:
            return pickle.load(f)


name = input("what is your name?")

if input("would you like to load a previous save? [y/n]").lower().startswith("y"):
    player = Player.load(name)
else:
    player = Player(name)
    player.save()

# e.g.:
player.level  = 1
player.save()
  

Комментарии:

1. Спасибо, теперь мне просто нужно посмотреть итоговый обзор на pickle, и я должен быть хорошим