保持代码运行之间的变量数据

问题描述:

对于一个学校项目,我正在用Python编写一个hang子手游戏。现在我的代码从字典中,像这样挑选一个字:保持代码运行之间的变量数据

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在下次代码开始时保留添加的单词。我用来编写python的程序是Jetbrains PyCharm,如果这有所作为。对于任何不理想的代码抱歉,我是新手代码。

+0

'raw_input'已在'Python3'中重命名为'input'。请参阅https://www.python.org/dev/peps/pep-3111/ – chenzhongpu

+0

作为补充,我不确定这个问题的答案有多复杂,我不确定它是否值得自己考虑,但有没有办法使用代码来“编辑自己”?就像,如果我想让添加功能在物理上改变实际的代码,在“WordList =”行,这样,而不是保存变量,它改变了实际代码中的文本。 – Jancl0

简单地腌制你想要保持持久性的数据。由于您的用例不需要非常复杂的数据存储,酸洗是一个非常好的选择。一个小例子:

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()来打开文件。我喜欢使用pickle文件作为二进制文件。这有助于避免在腌制某些复杂对象结构时出现问题。
  2. 我使用了with命令。这确保了一旦我完成了对文件的所有工作,就可以安全地关闭文件。这有助于防止我的泡菜被意外访问或覆盖。
+0

谢谢,这正是我一直在寻找的!你是一个很好的帮助。 – Jancl0

您必须使用持久性存储:将文件中的文字添加到文件中,并在程序启动时从该文件中检索文件。

如果您退出代码,则会停止该过程。出于这个原因,你会失去所有数据。你必须添加保持脚本活着的文字。建议使用处理所有呼叫的服务器(例如:http://flask.pocoo.org/)或使用python命令输入https://en.wikibooks.org/wiki/Python_Programming/Input_and_Output)。

但请记住......如果您停止进程,则会丢失所有数据,这是正常现象。

否则,在停止脚本之前,必须将所有数据保存到文件或数据库中,并在脚本启动时加载它们。