2015-04-22 70 views
0

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

由于某些原因,我无法获得以下功能正常工作。我已经尝试过在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()函数,它应该显示与保存文件相关的名称,但它只显示'EMPTY'。

我必须设置为是

文件save_files民生之本[ '保存#'] = { '名': '空'}

+0

它是如何不起作用类型的一致性?为什么它不起作用? – miradulo

+0

您应该更新帖子并提供错误信息等等,以及预期的输出结果。检查[mcve](http://stackoverflow.com/help/mcve) –

+0

运行该函数后,它应该将字典保存到文件['save#']并允许我稍后访问数据,但数据不会'保存到搁置文件中,当我尝试再次访问它时,没有任何内容。 – Sebastian

回答

0

由于您的if语句比较int,确保choice也是一个整数。有可能choice实际上是一个字符串,在这种情况下,没有一个比较是真的。基本上是:

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

另外,您可以更改为字符串的所有比较,但重要的是要保证在比较

+0

哦,我的天啊,我是个白痴谢谢你 – Sebastian

+1

没问题。请标记为已解决。 – ODiogoSilva