2013-09-26 1 views
1

Я сделал этот код для моей игры на основе текста, и я получаю сообщение об ошибке сказавPython NameError: название «север» не определено для текста игры

line 1, in <module> 
userInput = input("Please enter a direction in which to travel: ") 
File "<string>", line 1, in <module> 
NameError: name 'north' is not defined 

Вот мой код

userInput = input("Please enter a direction in which to travel: ") 
Map = { 
    'north':'that way leads to the kitchen', 
    'south':'that way leads to the dining room', 
    'east':'that way leads to the entry', 
    'west':'that way leads to the living room' 
} 
if userInput == north: 
    print Map['north'] 
elif userInput == south: 
    print Map['south'] 
elif userInput == east: 
    print Map['east'] 
elif userInput == West: 
    print Map['west'] 
elif userInput == '': 
    print "Please specify a various direction." 
else: 
    quit 

Спасибо за любую помощь

+0

Если это на самом деле ваш код, вы ответственность получить много 'IndentationErrors' после вас поместите некоторые цитаты вокруг ваших указаний, чтобы сделать их строками. – roippi

+0

Проблема заключается в вашей инструкции if, но вы также можете значительно упростить ее. Проверьте мой ответ ниже. Я предоставил рабочий код. –

+1

Кроме того, в python отсутствует ключевое слово 'quit'. – SethMMorton

ответ

0

При использовании Python 2 вы всегда должны использовать raw_input(), чтобы получить вход от пользователя.

input() равнозначно eval(raw_input()); Таким образом, ваш код пытается найти переменную с именем «север», когда вы вводите его.

Однако в Python 3, input() действует так же, как raw_input() сделал в Python 2.


Вы также должны сравнивайте свой ввод с строками, а не с переменными, которые вы создали. Например, if userInput == north должен быть if userInput == 'north'. Это делает строку 'north'.

Вы можете просто суммировать свой код:

print Map.get(userInput, 'Please specify a various direction') 
+0

О, ладно, так что измените userInput = input («Пожалуйста, введите направление, в котором перемещаться:») в userInput = raw_input («Пожалуйста, введите направление, в которое нужно перемещаться») – TheEvanElement

+0

@ TheEvanElement Yep! – TerryA

+0

Спасибо! Большая помощь! – TheEvanElement

2

Этой линию

if userInput == north: 
    ... 

спрашивает ли переменное с именем userInput такими же, как переменная north.

Но вы не указали переменную с именем north. Строка должна сравниваться со строкой 'north' следующим образом.

if userInput == 'north': 
    ... 

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

MAP = { 
    'north':'that way leads to the kitchen', 
    'south':'that way leads to the dining room', 
    'east':'that way leads to the entry', 
    'west':'that way leads to the living room' 
} 
userInput = raw_input("Please enter a direction in which to travel: ") 
if userInput in MAP.keys(): 
    print MAP[userInput] 

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

Альтернативой является захват KeyError следующим образом.

MAP = { 
    'north':'that way leads to the kitchen', 
    'south':'that way leads to the dining room', 
    'east':'that way leads to the entry', 
    'west':'that way leads to the living room' 
} 
userInput = raw_input("Please enter a direction in which to travel: ") 
try: 
    print MAP[userInput] 
except KeyError: 
    print 'What?' 

или повторять до допустимого ввода предоставляется, как это (и сделать его чувствительно к регистру):

MAP = { 
    'north':'that way leads to the kitchen', 
    'south':'that way leads to the dining room', 
    'east':'that way leads to the entry', 
    'west':'that way leads to the living room' 
} 
while True: 
    userInput = raw_input("Please enter a direction in which to travel: ").lower() 
    try: 
     print MAP[userInput] 
     break 
    except KeyError: 
     print '%s is not an option' % userInput 
+1

Я не уверен, почему я получил голос. Может ли кто-нибудь дать мне подсказку (или голосование)? –

+0

смотрит прямо на меня. Upvoted. –

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

  • Нет связанных вопросов^_^