【问题标题】:Save File Function保存文件功能
【发布时间】:2025-12-26 14:20:15
【问题描述】:

因此,对于我的入门编程课程,我们必须创建一个具有保存/加载功能的游戏,并且我正在尝试测试一些代码以确保它可以正常工作。

由于某种原因,我无法使以下功能正常工作。我已经尝试在 Idle 中逐行浏览它,它在那里工作得很好,但是一旦我尝试在一个函数中使用相同的系统,它就无法工作。请帮忙?

def save(name,inventory,mapGrid,x,y,enemy):`

    choice = 0

    file = shelve.open("save_files")       
    save = {'save1':file['save1'],'save2':file['save2'],'save3':file['save3']}

    print("Where would you like to save?")
    print("Save 1 -", save['save1']['name'])
    print("Save 2 -", save['save2']['name'])
    print("Save 3 -", save['save3']['name'])
    choice = input("Enter Number:\t")

    if choice == 1:
        save['save1']['name'] = name
        save['save1']['inventory'] = inventory
        save['save1']['mapGrid'] = mapGrid
        save['save1']['x'] = x
        save['save1']['y'] = y
        save['save1']['enemy'] = enemy
        file['save1'] = save['save1']
        file.sync()
    if choice == 2:
        save['save2']['name'] = name
        save['save2']['inventory'] = inventory
        save['save2']['mapGrid'] = mapGrid
        save['save2']['x'] = x
        save['save2']['y'] = y
        save['save2']['enemy'] = enemy
        file['save2'] = save['save2']
        file.sync()
    if choice == 3:
        save['save3']['name'] = name
        save['save3']['inventory'] = inventory
        save['save3']['mapGrid'] = mapGrid
        save['save3']['x'] = x
        save['save3']['y'] = y
        save['save3']['enemy'] = enemy
        file['save3'] = save['save3']
        file.sync()

    file.close()

    print("Game Saved")

编辑:运行该函数后,它应该将字典保存到文件 ['save#'] 并允许我稍后访问数据,但数据不会保存到搁置文件以及当我尝试访问它时那里什么也没有。 ((对不起,应该马上把它放进去))

例如,如果我再次运行 save() 函数,它应该显示与保存文件关联的名称,但它只显示“EMPTY”。

我将 save_files 设置为的基本内容是

文件['save#'] = {'name':'EMPTY'}

【问题讨论】:

  • 怎么不行?为什么它不起作用?
  • 您应该使用收到的错误消息等更新帖子,以及预期的输出。检查mcve
  • 运行该函数后,它应该将字典保存到文件 ['save#'] 并允许我稍后访问数据,但数据不会保存到搁置文件中,当我尝试时再次访问它那里什么都没有。

标签: python python-3.x file-io pickle shelve


【解决方案1】:

由于您的 if 语句正在比较 int,因此请确保 choice 也是一个整数。 choice 可能实际上是一个字符串,在这种情况下,所有比较都不会是 True。基本上:

choice = int(input("Enter Number:\t"))

或者,您可以将所有比较更改为字符串,但重要的是确保比较中的类型一致性

【讨论】: