【问题标题】:if-statement adjusts multiple dictionary key values even though statement only specifies one keyif 语句调整多个字典键值,即使语句只指定一个键
【发布时间】:2021-07-07 21:43:04
【问题描述】:

所以我正在制作一个基于文本的小角色扮演游戏作为个人项目。我有一本字典,它使用嵌套字典映射游戏位置 - 例如:

zonemap = {
    "a1": {ZONENAME: "somename", DESCRIPTION: "somedescription", SOLVED: False, SEARCHED: False},
    "a2": {ZONENAME: "somename", DESCRIPTION: "somedescription", SOLVED: False, SEARCHED: False},
    "c3": {ZONENAME: "somename", DESCRIPTION: "somedescription", SOLVED: False, SEARCHED: False}
    #so on for all game locations
    }

SOLVED 键存储一个布尔值,告诉我们该区域是否已完成。当调用下面的函数并更新SEARCHED 键时,它也在更新SOLVED 键。打印语句为两个键返回True,但它应该只更新SEARCHED

def search_zone():
    if zonemap[myPlayer.location][SEARCHED] == False:
        zonemap[myPlayer.location][SEARCHED] = True #this line is the trouble maker
        for key in zonemap.keys():
            print('SOLVED', zonemap[key][SOLVED])
            print('SEARCHED', zonemap[key][SEARCHED])

zonemap[myPlayer.location][SEARCHED] = True 为什么要更新两个密钥?

【问题讨论】:

    标签: python dictionary if-statement boolean


    【解决方案1】:

    我稍微更改了您的代码,以便调试。但在这些测试条件下,它似乎对我有用:

    ZONENAME = "ZONENAME"
    DESCRIPTION = "DESCRITPTION"
    SOLVED = "SOLVED"
    SEARCHED = "SEARCHED"
    
    
    zonemap = {
        "a1": {ZONENAME: "somename", DESCRIPTION: "somedescription", SOLVED: False, SEARCHED: False},
        "a2": {ZONENAME: "somename", DESCRIPTION: "somedescription", SOLVED: False, SEARCHED: False},
        "c3": {ZONENAME: "somename", DESCRIPTION: "somedescription", SOLVED: False, SEARCHED: False}
        #so on for all game locations
        }
    
    def search_zone(location):
        if zonemap[location][SEARCHED] == False:
            zonemap[location][SEARCHED] = True
            for key in zonemap.keys():
                print(f'SOLVED {key}', zonemap[key][SOLVED])
                print(f'SEARCHED {key}', zonemap[key][SEARCHED])
    
    search_zone("a1")
    

    输出:

    SOLVED a1 False
    SEARCHED a1 True
    SOLVED a2 False
    SEARCHED a2 False
    SOLVED c3 False
    SEARCHED c3 False
    

    它只更新SEARCHED 而不是SOLVED

    【讨论】:

    • 哦,天哪,谢谢你 - 太简单了。当我为 SEARCHEDSOLVED 创建全局变量时,我分配了 True 和 False 值。将它们更改为以下解决了问题! SOLVED = "SOLVED" 知道为什么这会导致两者都更新吗?
    • 我不太确定,据我所知这不会造成问题。如果您发现了错误,请告诉我!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-11-29
    • 1970-01-01
    • 1970-01-01
    • 2014-03-15
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多