Как получить пользовательский ввод с клавиатуры в Python 2? - PullRequest
2 голосов
/ 17 сентября 2011

Я написал функцию на Python, которая предлагает пользователю дать два числа и добавляет их. Он также предлагает пользователю ввести город и распечатать его. По какой-то причине, когда я запускаю его в оболочке, после ввода города я получаю «имя не определено».

def func_add(num1, num2):
   a = input("your city")
   print a
   return num1 + num2 

Ответы [ 6 ]

8 голосов
/ 17 сентября 2011

Если вы используете Python 2, вам нужно использовать raw_input:

def func_add(num1, num2):

   a = raw_input("your city")
   print a
   return num1 + num2 

input приводит к тому, что все, что вы вводите, будет оцениваться как выражение Python, поэтому вы получите

a = whatever_you_typed

Так что если нет переменной с именем whatever_you_typed, вы получите NameError.

С raw_input он просто сохраняет все, что вы вводите в строку, так что в итоге вы получаете

a = 'whatever_you_typed'

который указывает a на эту строку, что вам и нужно.

1 голос
/ 17 сентября 2011
input()

выполняет (на самом деле, оценивает) выражение, как будто это был фрагмент кода, ищет объект с введенным вами именем, вы должны использовать

raw_input()

Это угроза безопасности, и начиная с Python 3.x, input () ведет себя как raw_input (), который был удален.

0 голосов
/ 17 сентября 2011

В Python 2.x input запрашивает выражение Python (например, num1 + 2), которое затем оценивается. Вы хотите raw_input, который позволяет запрашивать произвольные строки.

0 голосов
/ 17 сентября 2011

Вы хотите raw_input, а не input.

input(...)
    input([prompt]) -> value

    Equivalent to eval(raw_input(prompt)).

В отличие от ...

raw_input(...)
    raw_input([prompt]) -> string

    Read a string from standard input.  The trailing newline is stripped.
    If the user hits EOF (Unix: Ctl-D, Windows: Ctl-Z+Return), raise EOFError.
    On Unix, GNU readline is used if enabled.  The prompt string, if given,
    is printed without a trailing newline before reading.
0 голосов
/ 17 сентября 2011

Вы хотите использовать вместо raw_input().input() ожидает Python, который затем получает eval ed.

0 голосов
/ 17 сентября 2011

вы хотите использовать raw_input. input как Eval

...