if 语句调整多个字典键值,即使语句只指定一个键
if-statement adjusts multiple dictionary key values even though statement only specifies one key
所以我正在制作一个基于文本的角色扮演游戏作为个人项目。我有一本字典,它用嵌套字典映射出游戏位置 - 例如:
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
键。两个键的打印语句 return 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
更新两个密钥?
我稍微更改了您的代码,以便于调试。但它似乎在这些测试条件下对我有用:
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
所以我正在制作一个基于文本的角色扮演游戏作为个人项目。我有一本字典,它用嵌套字典映射出游戏位置 - 例如:
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
键。两个键的打印语句 return 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
更新两个密钥?
我稍微更改了您的代码,以便于调试。但它似乎在这些测试条件下对我有用:
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