Я информирую себя о функциях взаимодействия с пользователем. Я с основами: raw_input()
e input()
. Я читал, что он input()
принимает только целочисленные данные, что он не принимает строки и что для этого мы используем raw_input()
.
Проблема в том, что если я сохраняю строку в переменной input()
, если она ее принимает и распознает. Но если я попытаюсь сделать то же самое с raw_input()
ним, выдает следующую ошибку:
Traceback (most recent call last): File "lllll.py", line 9, in <module> raw_input() NameError: name 'raw_input' is not defined
Я работаю с Python 3.5.2
Ошибка возникает, как вам сказали, потому что
raw_input
ее нет вPython 3.X
. Это было и будет источником путаницы, потому что функцииinput()
не делают одно и то жеPython 2
,Python 3
несмотря на то, что они имеют одно и то же имя.В
Python 2.x
обеих функциях мы немного поясним, что делает каждая из них:Питон 2.х :
raw_input()
Возвращает строку пользовательского ввода как есть, необработанную и всегда возвращает строку символов , объектstr
(ASCII), содержащий ввод.Но помните, что переменная
v
не содержит числа, это неint
, это строка символов (текст). Если мы попытаемся работать как целое число:Мы получаем ошибку, сообщающую нам, что мы не можем добавить строку с целым числом:
Чтобы сделать его целым числом, вы должны преобразовать его, выполнив явное приведение (Python имеет строгую типизацию, он никогда не выполняет неявное приведение, чтобы адаптировать тип переменной к контексту):
input()
ожидает передачи допустимых выражений Python . То есть ему может быть передан только код Python , и функция оценивает и обрабатывает его как таковой.Что здесь случилось? Что ж, он
input()
взял выражение и, поскольку это допустимый код Python, вычислил его и выполнил операции. Мы могли бы подумать, что онinput()
принимает только числа, но это неверно, я не знаю, почему он получил такое широкое распространение, вплоть до обобщения идеи, что онinput
предназначен для ввода скаляров иraw_input
строк. Примите любое допустимое выражение в Python:Объединение двух строк:
Создание списка с использованием сжатия списка:
Мы можем передать строку без проблем, но строка передается в нее с помощью кавычек, точно так же, как мы объявляем строковый литерал в коде:
Еще одна очень распространенная ошибка — пытаться использовать
input
в Python 2 то, что используется в Python 3, с идеей присвоения строки, введенной пользователем, переменной:У нас ошибка:
точно так же, как если бы мы попытались использовать переменную, которая не определена до того, как мы это сделали:
Если мы поняли, что он делает
input
в Python 2, нас не должно удивлять, что при оценке введенной строки «Jogofus» он пытается искать имяJogofus
в глобальном пространстве имен (как если бы это было имя переменной, функции). , класс и др.).Питон 3.х:
input()
делает то же самое, что иraw_input()
вPython 2.x
. Считывает строку ввода из стандартного ввода и возвращает ее в необработанном виде в объектеstr
(UTF-8). По сути, это та же самая функция, но переименованная, с той лишь разницей, что в Python 2str
это ASCII, а в Python 3 — строка Unicode (UTF-8).Первый
input()
примерно эквивалентенeval()
, который берет строку текста и пытается оценить ее, как если бы это был допустимый код Python. Разница в том, что вместо чтения строки из стандартного ввода, какinput
в Python 2, вы должны передать ее в качестве аргумента:Короче говоря, если вы используете
Python 3.x
только существуетinput()
и всегда возвращает строку. Если вы используетеPython 2.x
raw_input
, то делаете то же самое, что иinput()
вPython 3.x
(принимает любую строку и всегда возвращает объектstr
),input()
принимая только те выражения, которые синтаксически допустимы в Python (в противном случае это вызовет ошибку) и оценивая их впоследствии.Я советую вам, когда вы просматриваете документацию или учебные пособия, обращать внимание на то, какую версию они используют, потому что изменения из ветки 2 в ветку 3 были важны. Вот список наиболее значимых:
https://docs.python.org/3/whatsnew/3.0.html
Функция
raw_input()
была переименованаinput()
в Python 3.x.Старый
input()
можно эмулировать с помощьюeval(input())
Для python2 есть 2 функции
input()
иraw_input()
, первая для числовых значений, а вторая для текстовых строк; но это изменилось в python3 ,raw_input()
он был переименован в input(), а старыйinput()
был удален. Поэтому, если вы используете python 3, вы должны использоватьinput()
вместоraw_input()