【发布时间】:2014-08-18 03:26:28
【问题描述】:
我已经坚持尝试让它工作好几个小时了。我对编程非常缺乏经验,所以如果我想做的事情完全荒谬,我很抱歉。如果可能的话,为了简单起见,我想避免创建 .txt、.config 或 .JSON(或任何其他不是 .py 的文件)文件来保留变量。
我希望我的程序有一个“经验”变量。在我的整个游戏中,我希望能够在游戏中的任何给定实例的多个不同文件中添加此变量。 (我还希望程序能够在多个模块中使用大约 10 个其他变量)。如果你今天看到我问了一个非常相似的问题,我很抱歉。但我觉得我离解决这个错误越来越近了,但它最终无法正常工作。我很近!
#File1.py
experience = 0
from File2 import givexp
class game:
def give_xp(self,given_xp):
global experience
experience += given_xp
print('Experience: ',experience)
player = game()
def main():
print('1) give xp')
print('2) give 500 xp')
donow = input()
if donow == '1':
givexp() #this is in File2.py
if donow == '2':
player.give_xp(500)
while 1:
main()
#File2.py
def givexp():
from main import player
player.give_xp(200)
现在这给我的唯一问题是,当我第一次按 1 时,程序问我要做什么,什么也没发生,它又问我要做什么。我认为这是因为 File2 中的 import 语句。所以当我添加
if __name__ == '__main__':
while 1:
main()
这完全弄乱了程序,现在这两个文件将有自己的经验变量,我无法理解。 我知道我可以将我的类更改为常规函数并返回经验,但在我的实际游戏中,将有更多变量需要跟踪,我想以其他方式进行比拥有“var1, var2, var3, etc = part_one_of_game()
现在,这段代码的一切都完全按照我想要的方式运行,除了那个讨厌的错误,即游戏在第一次运行时两次询问玩家他或她想要做什么。有没有简单的解决方法?
【问题讨论】:
-
我不明白
if __name__ == '__main__':有什么问题 -
我对此感到困惑。当它在那里时,程序不会经过两次“你想做什么”阶段,但 File1 和 File2 会有两个完全独立的变量来体验。如果没有“if name....”条件,我可以继续添加经验(不转到 File2),但第二次按“1”(转到 File2),我的经验重置为 0 . 但是,File1 和 File2 的体验变量是相同的,这是我想要得到的。
-
@KyleMe 如果您要跨会话存储值,请检查阴影解决方案。如果您根本不关心该检查 Olegs 解决方案。但是据我了解,您正在研究如何在“重新启动”(会话)之间保存 10 个变量,如果是这样,pickle.load() 是您的毒药,无论是那个还是 SQLite 数据库(甚至是适当的数据库)。 注意: pickle 在较新的版本中也可以
.dump()类对象,因此将所有 10 个值存储在一个类中,然后转储类就完成了。 -
@Torxed 太棒了。我会记住这一点。当我(最终开始制作)游戏的保存文件时,我很可能会使用保存每个单独变量然后使用不同模块加载它的方法。这听起来简单多了。但是,我只需要在保存文件之前获得游戏的功能。
标签: python class python-3.x scope