【问题标题】:Keeping the data of a variable between runs of code在代码运行之间保留变量的数据
【发布时间】:2023-03-12 02:22:01
【问题描述】:

对于一个学校项目,我正在用 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 将在下次代码启动时保留添加的单词。我用来编写 python 的程序是 Jetbrains PyCharm,如果这有所作为的话。对任何不理想的代码表示歉意,我是代码新手。

【问题讨论】:

  • raw_inputPython3 中已重命名为input。见python.org/dev/peps/pep-3111
  • 另外,我不确定这个问题的答案有多复杂,我不确定它是否值得自己的问题,但是有没有办法使用代码来“编辑自己“?比如,如果我想让 add 函数物理地改变实际代码,在“WordList =”行中,这样它就不会保存变量,而是改变实际代码中的文本。

标签: python list save


【解决方案1】:

只需腌制您想要持久保存的数据。由于您的用例不需要非常复杂的数据存储,pickling 是一个非常好的选择。一个小例子:

import pickle

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

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

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

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

以后需要再次使用时,直接加载即可:

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

哒哒!您现在拥有数据持久性。更多阅读here。几个重要的提示:

  1. 当我使用open() 打开文件时,请注意'b'。泡菜通常以二进制格式存储,因此您必须以二进制模式打开文件。
  2. 我使用了with 上下文管理器。这可确保在我对文件的所有工作完成后安全关闭文件。

【讨论】:

  • 谢谢,这正是我想要的!你帮了大忙。
  • 可以去掉append语句后面的分号吗?另外,避免在 python 中使用大写的名称。
【解决方案2】:

您必须使用持久存储:添加时将单词写入文件,并在程序启动时从该文件中检索它们。

【讨论】:

    【解决方案3】:

    如果您退出代码,您将停止该过程。因此,您会丢失所有数据。您必须添加使脚本保持活力的单词。建议使用处理所有调用的服务器(例如:http://flask.pocoo.org/)或使用 python 命令 input (https://en.wikibooks.org/wiki/Python_Programming/Input_and_Output)。

    但请记住...如果您停止该过程会丢失所有数据,这是正常的。

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

    【讨论】:

      猜你喜欢
      • 2023-03-29
      • 2022-10-19
      • 2012-03-03
      • 1970-01-01
      • 1970-01-01
      • 2023-02-01
      • 2012-11-09
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多