Удаление строки во вложенном словаре - PullRequest
0 голосов
/ 27 ноября 2018

Полный код здесь: https://drive.google.com/open?id=1iCfj5fLjuD42LLkfhuZoT_7gmXZgHUdk

Я играю в игру, и застрял в момент, когда мне нужно убрать предмет из комнаты, когда вы поднимаете его в инвентаре.

Вы должны ввести -> выбрать предмет, который вы хотели бы забрать в этой комнате.

Так, например, -> выбрать потом -> рок.

То, что я хочу сделать, это то, что 'камень' будет добавлен к инвентарю, и ТОЛЬКО строка, которая будет удалена с ключа ЭКЗАМЕНА в комнате, в которой находится игрок (maplocation[myPlayer.location][EXAMINATION]).

inventory = ['sword', 'map', 'bread', 'enchanted rod', 'water' ]

maplocation = {
'Mountains': {
    ZONENAME: 'Mountains',
    EXAMINATION: "rock, twig, snow",
    SIDE_UP: '',
    SIDE_DOWN: 'Vallee',
    SIDE_LEFT: '',
    SIDE_RIGHT: 'Start',
},
}

def inventory_pick(myAction):
    print('What do you want to pick up?')
    pickup = input('-> ')
    current_room = maplocation[myPlayer.location]
    if current_room.get(EXAMINATION, None) == pickup:
        inventory.append(pickup)
        del current_room[EXAMINATION, pickup]
        print(pickup + " has been added to your inventory")
    else:
        print("There is no " + pickup + " here!" )

Ответы [ 2 ]

0 голосов
/ 27 ноября 2018

Я не думаю, что вы пытаетесь вызвать EXAMINATION, так как это просто строка.Вот что я могу придумать, основываясь на предоставленном вами коде:

def inventory_pick(myAction):
    print('What do you want to pick up?')
    pickup = input('-> ')
    if pickup in maplocation[myPlayer.location][EXAMINATION]:
        inventory.append(pickup)
        print(pickup + " has been added to your inventory")
        del maplocation[myPlayer.location][EXAMINATION][pickup]
    else:
        print("There is no " + pickup + " here!" )
0 голосов
/ 27 ноября 2018

ваш код не совсем имеет смысла.Я предполагаю, что, если pickup игрока такое же, как "исследовать" текущей комнаты, вы хотите удалить "исследовать" из текущей комнаты, верно?

То есть вместо

if pickup in maplocation[myPlayer.location][EXAMINATION]:
    inventory.append(pickup)
    print(pickup + " has been added to your inventory")
    for EXAMINATION in maplocation[myPlayer.location][EXAMINATION].value():
        del EXAMINATION[pickup]

Вы должны

current_room = map_locations[my_player.location]  # break it up to give 
                                                  # semantic meaning to your code
if current_room.get(EXAMINATION, None) == pickup:
    inventory.append(pickup)
    del current_room[EXAMINATION]
    # or current_room.pop(EXAMINATION, None)
...