2015-11-21 3 views
-1

gridSystem - это словарь, а его ключ - это другой словарь, содержащий действие и значение. Моя проблема в функции action - это оператор 2-го раза. Если action не равно одному из действий в словаре a (Смотрите, Boots .. эти имена теперь являются заполнителями), он должен просто распечатать «Попробовать еще раз». Но по какой-то причине он всегда оценивает значение true независимо от того, что делает, и дает мне ошибку, когда я печатаю то, что не является действием в словаре. Может кто-нибудь помочь? Благодарю.Оператор iF неверно оценивает true

a = {"Look":1, "Boots":32} 


gridSystem = {"One":a} 



def action(): 
    while True: 
     room = raw_input("choose a room ") 
     if room in gridSystem.keys(): 
      action = raw_input("What do you want to do? ") 
      actiontoString = ''.join([action]) 
      if action == actiontoString: 
       continue_action = raw_input("You have selected to " + actiontoString) 
       print gridSystem[room][action] 
       break 
      elif not action == actiontoString: 
       print "Try again" 
     else: 
      raw_input("Not in the gridsystem. Press enter to try again") 



action() 
+0

Хорошая техника отладки заключается в том, чтобы печатать переменные непосредственно перед оператором 'if', чтобы увидеть, сохраняют ли они значения, которые вы считаете. – tdelaney

ответ

1

actiontoString = ''.join([action]) будет, по сути, создать точную копию action (который является строкой) и сохранить его в ссылку под названием actiontoString (другую строку, точно так же). Это всегда будет True.

Возможно, вам понадобится if action in gridSystem[room]: вместо текущей проверки равенства. Замените elif...: на простой else:. Используйте print "You have selected to", actiontoString вместо получения ненужного ввода от пользователя.

+0

В этом была проблема. благодаря –

Смежные вопросы