如何解决如何从pickle文件加载对象而不从外部范围隐藏名称?
对编码很陌生,抱歉。
我正在编写一个小文本冒险,并尝试添加保存/加载功能。我已经包含了我为上下文放在一起的所有测试代码。希望不要太多。
我有一系列嵌套函数来访问保存和加载函数。 (在代码中:游戏>菜单>选择 3,4)。保存和加载给我带来了问题。
错误信息: 为了保存,我收到一个错误:在赋值之前引用了局部变量 'cubicles'。 对于加载,我收到一个错误:从外部作用域阴影名称“隔间”。
我怀疑问题是我在嵌套函数中创建了一个局部变量,即使我真正想做的是改变一个全局变量。解决这个问题的正确方法是在我加载的对象之前简单地编写“全局”吗?
很高兴在我编写代码的方式上接受任何其他有用的批评顺便说一句。谢谢。
(为简洁起见,编辑了代码 - 抱歉我不能把它缩短。)
import pickle
class Room:
def __init__(self,state,name,desc):
self.state = state
self.name = name
self.desc = desc
def enter(self):
print("\n{}".format(self.name).upper())
print(self.desc)
print("Current room state: {}".format(self.state))
cubicles = Room(0,"your cubicle","It's a room full of cubicles. You can go to Marcia's Office or your Boss's Office.")
marciaOffice = Room(0,"Marcia's office","It's a small office where Marcia works. You can go to the cubicles or your Boss's Office.")
bossOffice = Room(0,"your Boss's office","This is where your boss works. You can go to the cubicles or Marcia's Office.")
currentRoom = cubicles
print("You are in your cubicle")
def game():
global currentRoom
def decisionTree():
print("What do you do?")
response = input(">").lower()
if ("advance" and "all") in response:
advanceAll(response)
elif ("menu" or "pause") in response:
menu()
else:
print("Invalid response. Try going to another room or advancing the room state.")
def advanceAll(response):
if ("advance" and "all") in response:
cubicles.state = 3
marciaOffice.state = 7
bossOffice.state = 9
print("All rooms advanced to 3,9,and 7.")
game()
def menu():
print("MENU:")
print("1. Return to Game")
print("2. Quit")
print("3. Save")
print("4. Load")
response = input(">")
if "1" in response:
game()
elif "2" in response:
quit()
elif "3" in response:
with open('save_game.pkl','wb') as save_game:
pickle.dump(cubicles,save_game)
pickle.dump(marciaOffice,save_game)
pickle.dump(bossOffice,save_game)
menu()
elif "4" in response:
with open('save_game.pkl','rb') as load_game:
cubicles = pickle.load(load_game)
marciaOffice = pickle.load(load_game)
bossOffice = pickle.load(load_game)
print("States are as follows:")
print("Cubicles:{}".format(cubicles.state))
print("Marcia's Office:{}".format(marciaOffice.state))
print("Boss's Office:{}".format(bossOffice.state))
menu()
else:
print("Unknown command")
decisionTree()
game()
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。