Ошибка в Python

Это моя первая программа Python. Я реализовал словарь, как показано ниже. Здесь я пытаюсь получить значения * (либо ключ, либо значение) * в зависимости от ввода пользователя.

Например: если пользователь вводит "1", мне нужно получить "Sachin Tendulkar" из диктатуры. Если пользователь вводит "Sachin Tendulkar", тогда мне нужно получить "1" от диктатуры.

streetno={"1":"Sachin Tendulkar","2":"Sehawag","3":"Dravid","4":"Dhoni","5":"Kohli"}
while True: inp=input('Enter M/N:')
if inp=="M" or inp=="m": key=raw_input( "Enter the main number :") result=streetno.get(key)
else: key=raw_inp("Enter the street name : ") result=streetno.get(key)

Я думаю, что нет ничего плохого в логике. Но я не могу его выполнить. Я получаю ниже показанной ошибки.

Python 2.7.2 (default, Jun 12 2011, 14:24:46) [MSC v.1500 64 bit (AMD64)] on win32
Type "copyright", "credits" or "license()" for more information.
>>> ================================ RESTART ================================
>>>
Enter M/N:m
Traceback (most recent call last):
File "C:\Users\kiran\Desktop\Cricketpur.py", line 3, in <module> inp=input('Enter M/N:')
File "<string>", line 1, in <module>
NameError: name 'm' is not defined
>>>
</module></string></module>
4 ответа

Проблема в этой строке:

inp=input('Enter M/N:')

Вы используете input вместо raw_input, чего вы действительно не должны, поскольку он выполняет все, что вводит пользователь в качестве кода Python. Просто используйте raw_input здесь, и все должно быть хорошо.

Однако остальная часть вашего кода также нарушена и не должна работать так, как вы ожидаете, что она будет работать. Моя попытка исправить это:

streetno = { "1" : "Sachin Tendulkar", "2" : "Sehawag", "3" : "Dravid", "4" : "Dhoni", "5" : "Kohli"}
# we create a "reversed" dictionary here that maps
# names to numbers
streetname = dict((y,x) for x,y in streetno.items())
while True: inp = raw_input('Enter M/N:') if inp == "M" or inp == "m": key = raw_input("Enter the main number:") # you don't need .get here, a simple [] is probably what you want result = streetno[key] else: key = raw_input("Enter the street name: ") # we need to use our reversed map here! result = streetname[key] # do something with the result (change that to whatever you want # to do with it) print result


Если вы хотите, чтобы набираемый символ использовал raw_input, а не вводил (который принимает выражение и пытается его оценить), а не raw_inp (которого не существует).

Кроме того, ваше выражение "while True" никогда не закончится.

И вы не отделили свою позицию "else" должным образом.


Проблема состоит в том, что вы используете input для первого вопроса (вы используете raw_input для других)

В качестве дополнительной заметки вы можете захотеть проверить встроенный модуль cmd для python для этой программы. Это специально для создания программ командной строки, таких как:

http://www.doughellmann.com/PyMOTW/cmd/


Поскольку вы используете Python 2.7, input() ведет себя как eval(raw_input()), что означает, что он оценивает, что eval(raw_input()) в качестве входных данных. Измените это на raw_input(). Кроме того, raw_inp не является функцией, поэтому вам нужно будет изменить это на raw_input().

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

licensed under cc by-sa 3.0 with attribution.