Функция input Python: руководство для изучения на примере

Если вы знакомы с 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'>

Итак, несмотря на то, что я указал число, функция ввода возвращает объект строкового типа.

Что мне нужно сделать, чтобы проверить, является ли число четным или нечетным?

Мне нужно преобразовать его из строки в целое число.

Функция 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

На этот раз все хорошо!

Как отобразить сообщение пользователю с помощью функции ввода

В предыдущем примере я использовал оператор печати для печати сообщения перед запросом ввода данных.

Я также могу удалить оператор печати и передать аргумент приглашения функции ввода.

Аргумент приглашения для функции 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().

Затем каждому элементу списка присваиваются переменные имя, фамилия и национальность (это называется распаковкой).

Разница между вводом и Raw_input в Python

Python также предоставляет функцию raw_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 значение, возвращаемое функцией ввода, является целым числом, а значение, возвращаемое функцией raw_input, — строкой.

В начале этого урока мы видели, что значение, возвращаемое функцией ввода в Python 3, представляет собой строку.

Так…

Функция input() работает по-разному в Python 2 и Python 3, когда речь идет о типе значения, возвращаемого при вводе данных пользователем. Функция raw_input() в Python 2 стала функцией input() в Python 3, обе они возвращают объект строкового типа.

Использование функции 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!

Заключение

В этом уроке мы рассмотрели все основы функции Python input().

Теперь вы знаете, что эта функция возвращает строку в Python 3 и что в зависимости от типа входных данных мы можем преобразовать ее в целые числа или числа с плавающей запятой, используя встроенные функции int() и float().

Мы также видели:

  • Как получить несколько значений от пользователя.
  • В чем разница между input и raw_input.
  • Как использовать встроенную функцию eval.