Если вы знакомы с Python или только начинаете его изучать, скорее всего, вы слышали о функции ввода Python.
Встроенная функция ввода Python позволяет захватывать ввод, предоставленный пользователем во время выполнения программы. Функция ввода возвращает ввод в строковом формате, а его значение может быть присвоено переменной для последующего использования.
Давайте поэкспериментируем с функцией ввода Python и посмотрим, что возвращает функция, когда мы передаем ей строку или целое число.
Это руководство основано на Python 3, это важно подчеркнуть, учитывая, что поведение функции ввода различается в Python 2 и Python 3.
Я буду использовать Python 2 только в одном из разделов этого руководства, чтобы показать вам, как по-разному работает ввод в двух версиях Python.
Пойдем!
Пример использования ввода в Python
Я хочу создать программу на Python, которая просит пользователя ввести число, а затем сообщает, является ли это число четным или нечетным.
Для этого мы будем использовать функцию ввода, чтобы считать число от пользователя. Функция ввода останавливает выполнение программы до тех пор, пока пользователь не предоставит ввод и не нажмет Enter:
print("Enter a number")
number = input()
print(type(number))
Как видно из приведенного выше кода, я хочу проверить тип значения, возвращаемого функцией ввода.
Вот что получилось:
$ python number.py
Enter a number
3
<class 'str'>
Таким образом, несмотря на то, что я указал число, функция ввода возвращает объект типа string.
Что мне нужно сделать, чтобы проверить, четное ли число или нечетное?
Мне нужно преобразовать его из строки в целое число.
Функция int() позволяет преобразовать строку в целое число, это называется приведением типа.
После считывания числа мы используем оператор if else, чтобы проверить, является ли число, указанное пользователем, четным или нечетным.
Мне интересно, какая ошибка возникнет, если я попытаюсь проверить, является ли число четным или нечетным, прежде чем преобразовывать его в целое число.
$ python number.py
Enter a number
3
Traceback (most recent call last):
File "number.py", line 4, in <module>
if number % 2 == 0:
TypeError: not all arguments converted during string formatting
Возникает ошибка типа TypeError.
На этот раз давайте воспользуемся функцией int() для преобразования числа из строки в целое число.
print("Enter a number")
number = input()
if int(number) % 2 == 0:
print("The number is even")
else:
print("The number is odd")
Вывод становится следующим:
$ python number.py
Enter a number
3
The number is odd
На этот раз все хорошо!
Как отобразить сообщение пользователю с помощью функции ввода
В предыдущем примере я использовал оператор печати для вывода сообщения перед запросом ввода данных.
Я также могу удалить оператор печати и передать аргумент приглашения функции ввода.
Аргумент prompt для функции Python input() является необязательным и позволяет отображать сообщение для нашего пользователя.
Вот как выглядит наша программа:
number = input("Enter a number: ")
if int(number) % 2 == 0:
print("The number is even")
else:
print("The number is odd")
Это более краткий вариант, и его вывод будет следующим:
$ python number.py
Enter a number: 3
The number is odd
На этот раз наша программа не переходит на новую строку, прежде чем позволить пользователю ввести число. Это потому, что сообщение-подсказка печатается без завершающей новой строки.
Преобразование строки в целое число также можно выполнить непосредственно в строке, где мы вызываем функцию ввода, а не в условии оператора if else.
number = int(input("Enter a number: "))
if number % 2 == 0:
print("The number is even")
else:
print("The number is odd")
Обработка чисел с плавающей точкой с помощью функции ввода
Точно так же, как мы раньше обрабатывали целые числа, мы можем использовать функцию ввода для чтения чисел с плавающей точкой.
Учитывая, что функция input() в Python 3 всегда возвращает строку, нам понадобится функция для преобразования строки в число с плавающей точкой. Встроенная функция для преобразования строки в число с плавающей точкой называется float().
number = float(input("Enter a number: "))
print(type(number))
print("The number is", number)
Давайте выполним программу:
$ python float.py
Enter a number: 3.5
<class 'float'>
The number is 3.5
А что, если я передам в качестве входных данных число 3?
$ python float.py
Enter a number: 3
<class 'float'>
The number is 3.0
Python преобразует его в число с плавающей точкой, 3.0. То же самое относится и к отрицательным числам.
Обработка нескольких значений с помощью функции ввода
Мы также можем заставить пользователя предоставить несколько значений с помощью функции input().
Например, предположим, я создаю программу, которая запрашивает имя, фамилию и национальность.
Вы можете использовать метод string split() вместе с функцией input() для обработки нескольких значений.
name, surname, nationality = input("Enter your name, surname and nationality: ").split()
print("Name: ", name)
print("Surname: ", surname)
print("Nationality: ", nationality)
Давайте выполним это!
$ python app.py
Enter your name, surname and nationality: Claudio Sabato italian
Name: Claudio
Surname: Sabato
Nationality: italian
Метод split() генерирует список из строки, возвращаемой функцией ввода. Символ пробела используется в качестве разделителя, поскольку это разделитель по умолчанию для метода split().
Затем каждому элементу списка присваиваются переменные имя, фамилия и национальность (это называется распаковкой).
Разница между Input и Raw_input в Python
Python также предоставляет функцию raw_input.
Я хотел бы понять…
В чем разница между input и raw_input?
Давайте попробуем заменить input на raw_input в нашей программе:
number = int(raw_input("Enter a number: "))
if number % 2 == 0:
print("The number is even")
else:
print("The number is odd")
При запуске программы возникает следующая ошибка:
$ python number.py
Traceback (most recent call last):
File "number.py", line 1, in <module>
number = int(raw_input("Enter a number: "))
NameError: name 'raw_input' is not defined
Согласно ошибке, «raw_input» не определен, это потому, что я использую Python 3, а функция raw_input доступна только в Python 2.
Вот версия Python, которую я использовал по умолчанию, и версия Python 2, которую я буду использовать для тестирования функции raw_input:
$ python --version
Python 3.7.4
$ python2 --version
Python 2.7.14
А вот что происходит, когда я запускаю программу на Python 2:
$ python2 number.py
Enter a number: 3
The number is odd
Программа работает хорошо, но пока не ясна разница между input и raw_input…
Я создам еще одну простую программу для сравнения типов объектов, возвращаемых функциями input и raw_input:
number = input("Enter a number (input test): ")
raw_number = raw_input("Enter a number (raw_input test): ")
print "Input type: ", type(number)
print "Raw input type: ", type(raw_number)
Как вы видите, оператор печати не имеет скобок, поскольку я буду запускать эту программу с использованием Python 2. Вывод будет следующим:
$ python2 input_vs_raw_input.py
Enter a number (input test): 3
Enter a number (raw_input test): 3
Input type: <type 'int'>
Raw input type: <type 'str'>
В Python 2 значение, возвращаемое функцией input, является целым числом, а значение, возвращаемое функцией raw_input, является строкой.
В начале этого урока мы увидели, что значение, возвращаемое функцией ввода в Python 3, представляет собой строку.
Так…
Функция input() работает по-разному в Python 2 и Python 3, когда дело касается типа возвращаемого значения, когда ввод предоставляется пользователем. Функция raw_input() в Python 2 стала функцией input() в Python 3, они обе возвращают объект типа string.
Использование функции Eval для оценки выражений
До сих пор мы видели, как использовать функции int() и float() для преобразования строк в целые и плавающие числа.
Нечто подобное можно сделать с помощью встроенной функции eval, с той разницей, что с помощью eval можно также вычислять выражения в строковом формате.
Давайте сначала посмотрим, что возвращает eval при применении к строковому представлению целого числа и числа с плавающей точкой:
>>> eval('3')
3
>>> eval('3.5')
3.5
А вот как eval может вычислять полные выражения:
>>> eval('2+3')
5
>>> eval('2+3.5')
5.5
Определенно полезно знать это для ваших программ на Python!
Заключение
В этом уроке мы рассмотрели все основы функции input() в Python.
Теперь вы знаете, что эта функция возвращает строку в Python 3 и что в зависимости от типа входных данных мы можем преобразовать ее в целые числа или числа с плавающей точкой, используя встроенные функции int() и float().
Мы также видели:
- Как получить несколько значений от пользователя.
- В чем разница между input и raw_input.
- Как использовать встроенную функцию eval.
У вас есть вопросы?