2015-08-08 3 views
2

Для школьного проекта я делаю палач-игру в Python. Сейчас мой код выбирает слово из словаря, как так:Сохранение данных переменной между прогонами кода

WordList = ["cat", "hat", "jump", "house", "orange", "brick", "horse", "word"] 
word = WordList[random.randint(0, len(WordList) - 1)] 

прямо сейчас список слов должен быть установлен в коде перед его запуском, но я добавил возможность добавлять слова в список во время работы это:

if command == "add": 
    while True: 
     print("type a word to add to the dictionary") 
     print("type /b to go back to game") 
     add = raw_input("word: ") 

     if add != "/b": 
      WordList = WordList + [add] 

      print add, "added!" 
     else: 
      print("returning to game") 
      break 

однако, как только я выйти из кода, добавленные слова, очевидно, не сохраняются, так что я бы либо вручную добавить все слова в списке, или добавить кучу слов к списку раз код запускается каждый раз. поэтому мне интересно, есть ли простой способ, которым я могу сохранить переменную после завершения кода, чтобы WordList сохранил добавленные слова при следующем запуске кода. программа, которую я использую для написания питона, - это Jetbrains PyCharm, если это имеет значение. Извиняюсь за любой не оптимальный код, я новичок в коде.

+0

'raw_input' был переименован в' input' в 'Python3'. см. https://www.python.org/dev/peps/pep-3111/ – chenzhongpu

+0

В дополнение, я не уверен, насколько сложным этот вопрос отвечает, и я не уверен, что он заслуживает собственного вопроса, но есть ли способ использовать код для «редактирования самого себя»? например, если бы я хотел, чтобы функция добавления физически меняла фактический код в строке «WordList =», поэтому вместо сохранения переменной она меняет текст в фактическом коде. – Jancl0

ответ

5

Просто расчешите данные, которые вы хотите сохранить стойкими. Поскольку ваш прецедент не требует очень сложного хранения данных, травление - очень хороший вариант. Небольшой пример:

import pickle 

WordList = ["cat", "hat", "jump", "house", "orange", "brick", "horse", "word"] 

# do your thing here, like 
Wordlist.append("monty"); 

#open a pickle file 
newfile = 'mypickle.pk' 

with open(newfile, 'wb') as fi: 
    # dump your data into the file 
    pickle.dump(Wordlist, fi) 

Позже, когда вам нужно использовать его снова, просто загрузите его:

#load your data back to memory when you need it 
with open(newfile, 'rb') as fi: 
    WordList = pickle.load(fi) 

Та-да! Теперь вы сохраняете данные. Больше информации here. Несколько важных указателей:

  1. Обратите внимание на 'b', когда я использую open() открыть файл. Мне нравится использовать файлы рассола в качестве двоичных файлов. Это помогает избежать проблем с некоторыми сложными структурами объектов, когда вы их рассоливаете.
  2. Я использовал команду with. Это гарантирует, что файл будет безопасно закрыт после завершения всей моей работы с файлом. Это помогает предотвратить случайный доступ к соленьям или их перезапись.
+0

Спасибо, это именно то, что я искал! вы были большой помощью. – Jancl0

1

Вы должны использовать постоянное хранилище: записывайте слова в файл при их добавлении и извлекайте их из этого файла при запуске программы.

0

Если вы выходите из кода, вы останавливаете процесс. По этой причине вы теряете все данные. Вы должны добавить слова, поддерживающие сценарий. Предполагается использовать сервер, который обрабатывает все ваши вызовы (пример: http://flask.pocoo.org/) или использовать команду python вход (https://en.wikibooks.org/wiki/Python_Programming/Input_and_Output).

Но помните ... если вы остановите процесс, вы потеряете все данные, это нормально.

В противном случае перед остановкой скрипта вам необходимо сохранить все данные в файл или базу данных и загрузить их при запуске скрипта.

Смежные вопросы