Сообщить об ошибке.

Функция input() в Python, ввод данных с клавиатура.

Позволяет производить ввод данных в консоли.

Синтаксис:

input(prompt)

Параметры:

  • prompt - строка подсказки.

Возвращаемое значение:

  • строка str, даже если вводятся цифровые значения.

Описание:

Функция input() позволяет обеспечить ввод пользовательских данных из консоли. Если передан необязательный аргумент подсказки prompt, то он записывается в стандартный вывод без завершающей строки. Затем функция читает строку из ввода и преобразует ее в СТРОКУ, убирая завершающий символ строки '\n' и возвращает ее в качестве значения.

Другими словами, все что вводится в консоль при использовании встроенной функции input() преобразуется в тип str. Это происходит в том числе и с числами. Следовательно, числовые данные, перед их использованием необходимо распознавать и преобразовывать к нужным типам.

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

  • В случае считывания EOF (признак конца файла), поднимается исключение EOFError.
  • Перед чтением ввода, функция input() вызывает событие аудита input с аргументом prompt.
  • После успешного чтения ввода, вызывает событие аудита input c результатом resultс.

Примеры получения/ввода данных из консоли/клавиатуры.

Общие примеры использования функции input().

>>> x = input('Enter your name:')
# Enter your name:Anton
>>> print('Hello, ', x)
# Hello,  Anton

# Можно и без строки подсказки
>>> print('Введите число:')
# Введите число:
>>> x = input()
# 10

# Не забываем что функция 
# возвращает строку
>>> x
# '10'

Проверка и преобразование типов при вводе данных с клавиатура.

Пример представляет собой программу подсчета суммы или произведения введенных в консоль чисел. В примере будем распознавать числовые типы на примере типов int и float, читаемые функцией input() из консоли интерпретатора Python.

# test.py 

def str_to_num(line):
    """функция конвертирует строку в число"""
    line = line.strip()
    # если в строке только цифры
    if line.isdigit():
        return int(line) 
    # если строка содержит точку или запятую
    elif '.' in line or ',' in line:
        # если из строки убрать точку или запятую
        # и при этом в строке останутся только цифры
        if any(line.replace(x, '').isdigit() for x in ['.', ',']):
            return float(line.replace(',', '.'))
    else:
        # ошибка
        print('Это не число!\n')
        return None

print('\nДля выхода из программы введите Ctrl+C')
print('Для окончания ввода цифр нажмите Enter\n')

nums = []
while True:
    inpt = input('Ожидается ввод числа или Enter:')
    if inpt == '':
        # Закончить ввод чисел
        break
    n = str_to_num(inpt)
    if n is not None:
        nums.append(n)

if nums:
    if len(nums) == 1:
        print('Вы ввели одну цифру: ', nums[0])
    else:
        print('\nВыберите действие:')
        print('  сложить цифры введите 1;')
        print('  умножить цифры введите 2.\n')

        rez = None
        while True:
            inpt = input('Введите 1 или 2:')
            inpt = inpt.strip()
            if inpt == '1':
                rez = sum(nums)
                print('Сумма введенных чисел:', rez)
            elif inpt == '2':
                rez = 1
                for i in nums:
                    rez *= i
                print('Произведение введенных чисел:', rez)
            else:
                print('Неправильное действие.\n')
            
            if rez is not None:
                break
else:
    print('Вы ничего не ввели.')

Вывод программы:

$ python3 test.py 

Для выхода из программы введите Ctrl+C
Для окончания ввода цифр нажмите Enter

Ожидается ввод числа или Enter:10
Ожидается ввод числа или Enter:13.9
Ожидается ввод числа или Enter:9,9
Ожидается ввод числа или Enter:

Выберите действие:
  сложить цифры введите 1;
  умножить цифры введите 2.

Введите 1 или 2:2
Произведение введенных чисел: 1376.1000000000001

Эмуляция терминала с использованием функцией input().

Для воспроизведения вывода ошибок при выполнении команд в воображаемой "консоли" воспользуемся модулем traceback. Выполнять введенный код будем при помощи встроенной функции exec().

# test.py
import sys, traceback

def run_user_code(envdir):
    source = input(">>> ")
    try:
        # Выполнение введенного кода с клавиатуры
        exec(source, envdir)
    except Exception:
        print("Exception in user code:")
        print("-"*60)
        traceback.print_exc(file=sys.stdout)
        print("-"*60)

# словарь для хранения введенных переменных
envdir = {}

while True:
    run_user_code(envdir)

Запускаем эмуляцию интерпретатора Python.

$ python3 test.py
>>> a = 3
>>> b = '1'           
>>> a + b
Exception in user code:
------------------------------------------------------------
Traceback (most recent call last):
  File "tt.py", line 6, in run_user_code
    exec(source, envdir)
  File "<string>", line 1, in <module>
TypeError: unsupported operand type(s) for +: 'int' and 'str'
------------------------------------------------------------