Функция input() в Python, ввод данных с клавиатуры
Функция input() позволяет обеспечить ввод пользовательских данных из консоли. Если передан необязательный аргумент подсказки prompt , то он записывается в стандартный вывод без завершающей строки. Затем функция читает строку из ввода и преобразует ее в СТРОКУ, убирая завершающий символ строки ‘\n’ и возвращает ее в качестве значения.
Другими словами, все что вводится в консоль при использовании встроенной функции input() преобразуется в тип str . Это происходит в том числе и с числами. Следовательно, числовые данные, перед их использованием необходимо распознавать и преобразовывать к нужным типам.
Если был импортирован модуль readline , то функция input() будет использовать его для обеспечения сложных функций редактирования строк и истории.
- В случае считывания EOF (признак конца файла), поднимается исключение EOFError .
- Перед чтением ввода, функция input() вызывает событие аудита input с аргументом prompt .
- После успешного чтения ввода, вызывает событие аудита input c результатом resultс .
Примеры получения/ввода данных из консоли/клавиатуры.
- Общие примеры использования функции input() ;
- Проверка и преобразование типов при вводе данных с клавиатура;
- Эмуляция терминала с использованием функцией input() .
Общие примеры использования функции 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 "", line 1, in TypeError: unsupported operand type(s) for +: 'int' and 'str' ------------------------------------------------------------
- ОБЗОРНАЯ СТРАНИЦА РАЗДЕЛА
- Функция abs(), абсолютное значение числа
- Функция all(), все элементы True
- Функция any(), хотя бы один элемент True
- Функция ascii(), преобразует строку в ASCII
- Функция bin(), число в двоичную строку
- Класс bool(), логическое значение объекта
- Функция breakpoint(), отладчик кода
- Класс bytearray(), преобразует в массив байтов
- Класс bytes(), преобразует в строку байтов
- Функция callable(), проверяет можно ли вызвать объект
- Функция chr(), число в символ Юникода
- Класс classmethod, делает функцию методом класса
- Функция compile() компилирует блок кода Python
- Класс complex(), преобразует в комплексное число
- Функция delattr(), удаляет атрибут объекта
- Класс dict() создает словарь
- Функция dir(), все атрибуты объекта
- Функция divmod(), делит числа с остатком
- Функция enumerate(), счетчик элементов последовательности
- Функция eval(), выполняет строку-выражение с кодом
- Функция exec(), выполняет блок кода
- Функция filter(), фильтрует список по условию
- Класс float(), преобразует в вещественное число
- Функция format(), форматирует значение переменной
- Класс frozenset(), преобразует в неизменяемое множество
- Функция getattr(), значение атрибута по имени
- Функция globals(), переменные глобальной области
- Функция hasattr(), наличие атрибута объекта
- Функция hash(), хэш-значение объекта
- Функция help(), справка по любому объекту
- Функция hex(), число в шестнадцатеричную строку
- Функция id(), идентификатор объекта
- Функция input(), ввод данных с клавиатуры
- Класс int(), преобразует в тип int
- Функция isinstance(), принадлежность экземпляра к классу
- Функция issubclass(), проверяет наследование класса
- Функция iter(), создает итератор
- Функция len(), количество элементов объекта
- Класс list(), преобразовывает в список
- Функция locals(), переменные локальной области
- Функция map(), обработка последовательности без цикла
- Функция max(), максимальное значение элемента
- Класс memoryview(), ссылка на буфер обмена
- Функция min(), минимальное значение элемента
- Функция next(), следующий элемент итератора
- Класс object(), возвращает безликий объект
- Функция oct(), число в восьмеричную строку
- Функция open(), открывает файл на чтение/запись
- Функция ord(), число символа Unicode
- Функция pow(), возводит число в степень
- Функция print(), печатает объект
- Класс property(), метод класса как свойство
- Класс range(), генерирует арифметические последовательности
- Функция repr(), описание объекта
- Функция reversed(), разворачивает последовательность
- Функция round(), округляет число
- Класс set(), создает или преобразовывает в множество
- Функция setattr(), создает атрибут объекта
- Класс slice(), шаблон среза
- Функция sorted(), выполняет сортировку
- Декоратор staticmethod(), метод класса в статический метод
- Класс str(), преобразует объект в строку
- Функция sum(), сумма последовательности
- Функция super(), доступ к унаследованным методам
- Класс tuple(), создает или преобразует в кортеж
- Класс type(), возвращает тип объекта
- Функция vars(), словарь переменных объекта
- Функция zip(), объединить элементы в список кортежей
- Функция __import__(), находит и импортирует модуль
- Функция aiter(), создает асинхронный итератор
- Функция anext(), следующий элемент асинхронного итератора
Как ввести несколько строк в python
А нельзя ввести несколько строк используя Enter + дополнительные клавиши, типа: Ctrl, Shift, Alt .
17 октября 2022
Функция input() ждёт, пока пользователь нажмёт на клавишу Enter, и затем возвращает введенную строку. Значит, нельзя 1 командой input() ввести более одной строки, но можно повторять это, например, в таком цикле:
result = [] while True: # False - пустая строка seq = input('Введите строку: ') if seq: result.append(seq) else: break # run. # 1 # Hello # True # print(result) # => ['1', 'Hello', 'True']
Ввод окончится при двойном переносе строки. В результате получим массив введенных строк.
Получение пользовательского ввода в Python с input()
Получение и обработка информации — один из важнейших элементов любого языка программирования, особенно если речь идет о получении информации от пользователей.
Python, будучи медленным относительно таких языков, как C или Java, предлагает продвинутые инструменты для получения, анализа и обработки данных от конечного пользователя.
В этом материале речь пойдет о том, какие функции Python можно использовать для этих целей.
Ввод в Python
Для получения информации с клавиатуры в Python есть функции input() или raw_input() (о разнице между ними чуть позже). У них есть опциональный параметр prompt , который является выводимой строкой при вызове функции.
Когда input() или raw_input() вызываются, поток программы останавливается до тех пор, пока пользователь не введет данные через командную строку. Для ввода нужно нажать Enter после завершения набора текста. Обычно Enter добавляет символ новой строки ( \n ), но не в этом случае. Введенная строка просто будет передана приложению.
Интересно, что кое-что поменялось в принципе работе функции между Python 2 и Python 3, что отразилось в разнице между input() и raw_input() . Об этом дальше.
Сравнение функций input и raw_input
Разница между этими функциями зависит от версии Python. Так, в Python 2 функция raw_input() используется для получения ввода от пользователя через командную строку, а input() оценивает ее и попробует запустить как код Python.
В Python 3 от raw_input() избавились, оставив только input() . Она используется для получения ввода пользователя с клавиатуры. Возможности input() из Python 2 в Python 3 работать не будут. Для той же операции нужно использовать инструкцию eval(input()) .
Взгляните на пример функции raw_input в Python 2.
# Python 2 txt = raw_input("Введите что-нибудь, чтобы проверить это: ") print "Это то, что вы только что ввели?", txt
Вывод
Введите что-нибудь, чтобы проверить это: Привет, мир! Это то, что вы только что ввели? Привет, мир!
А вот как она работает в Python 3
# Python 3 txt = input("Введите что-нибудь, чтобы проверить это: ") print("Это то, что вы только что ввели?", txt)
Вывод
Введите что-нибудь, чтобы проверить это: Привет, мир 3! Это то, что вы только что ввели? Привет, мир 3!
Дальше в материале будет использоваться метод input из Python 3, если не указано другое.
Строковый и числовой ввод
По умолчанию функция input() конвертирует всю получаемую информацию в строку. Прошлый пример продемонстрировал это.
С числами нужно работать отдельно, поскольку они тоже изначально являются строками. Следующий пример показывает, как можно получить информацию числового типа:
# Ввод запрашивается и сохраняется в переменной test_text = input ("Введите число: ") # Преобразуем строку в целое число. # функция float() используется вместо int(), # для преобразования пользовательского ввода в десятичный формат, test_number = int(test_text) # Выводим в консоль переменную print ("Введенное число: ", test_number)
Вывод
Введите число: 13 Введенное число: 13
Того же можно добиться и таким образом:
test_number = int(input("Введите число: "))
Здесь сразу после сохранения ввода происходит преобразование и присваивание значения переменной.
Нужно лишь отметить, что если пользователь ввел не целое число, то код вернет исключение (даже если это число с плавающей точкой).
Обработка исключений ввода
Есть несколько способов, как можно удостовериться в том, что пользователь ввел корректные данные. Один из них — перехватывать все возможные ошибки, которые могут возникнуть.
Вот такой код считается небезопасным:
test2word = input("Сколько вам лет? ") test2num = int(test2word) print("Ваш возраст ", test2num)
Запустим его и введем следующее:
Сколько вам лет? Пять
При вызове функции int() со строкой Пять появится исключение ValueError , и программа остановит работу.
Вот как можно сделать код безопаснее и обработать ввод:
test3word = input("Введите свое счастливое число: ") try: test3num = int(test3word) print("Это правильный ввод! Ваше счастливое число: ", test3num) except ValueError: print("Это не правильный ввод. Это не число вообще! Это строка, попробуйте еще раз.")
Этот блок оценит ввод. Если он является целым числом, представленным в виде строки, то функция input() конвертирует его в целое число. Если нет, то программа выдаст исключение, но вместо ошибки оно будет перехвачено. В результате вызовется вторая инструкция print .
Вот так будет выглядеть вывод с исключением.
Введите свое счастливое число: Семь Это не правильный ввод. Это не число вообще! Это строка, попробуйте еще раз.
Такой код можно объединить с другой конструкцией, например, циклом for, чтобы убедиться, что код будет выполняться постоянно, до тех пор, пока пользователь не введет те данные, которые требуются.
Полный пример
# Создадим функцию для демонстрации примера def example(): # Бесконечный цикл, который продолжает выполняться # до возникновения исключения while True: test4word = input("Как вас зовут? ") try: test4num = int(input("Сколько часов вы играете на своем мобильном телефоне?" )) # Если полученный ввод не число, будет вызвано исключение except ValueError: # Цикл будет повторяться до правильного ввода print("Error! Это не число, попробуйте снова.") # При успешном преобразовании в целое число, # цикл закончится. else: print("Впечатляет, ", test4word, "! Вы тратите", test4num*60, "минут или", test4num*60*60, "секунд на игры в своем телефоне!") break # Вызываем функцию example()
Вывод:
Как вас зовут? Александр Сколько часов вы играете на своем мобильном телефоне? 3 Впечетляет, Александр! Вы тратите 180 минут или 10800 секунд на игры в своем телефоне!
Выводы
В этой статье вы узнали, как встроенные инструменты Python используются для получения пользовательского ввода в разных форматах. Также научились обрабатывать исключения и ошибки, которые могут возникнуть в процессе.
Как сделать ввод множества пользователем из консоли?
Даны два списка, упорядоченных по возрастанию (каждый список состоит из различных элементов).
Найдите пересечение множеств элементов этих списков, то есть те числа, которые являются элементами обоих списков. Алгоритм должен иметь сложность O(len(A)+len(B)).
Решение оформите в виде функции Intersection(A, B). Функция должна возвращать список пересечения данных списков в порядке возрастания элементов. Модифицировать исходные списки запрещается.
Я решил ее как-то так:
def intersection(a, b): c = a.update(b) for i in c: return i # return c.difference_update(d) numList1 = list(set(int, input().split())) numList2 = list(set(int, input().split())) print(intersection(numList1, numList2))
При запуске программы ввожу первое множество, жму энтер и выдает ошибку:
Traceback (most recent call last):
File «C:/Users/Николай/PycharmProjects/week6/Intersection of many.py», line 8, in
numList1 = list(set(int, input().split()))
TypeError: set expected at most 1 arguments, got 2
Как мне от этого уйти? Честно говоря не понимаю как решить задачку. Буду признателен за подсказки.
- Вопрос задан более трёх лет назад
- 2676 просмотров
Комментировать
Решения вопроса 2

Andrey Dugin @adugin Куратор тега Python
Что за int в set()? Читайте, что написано в трейсе. И в чём смысл из списка, который возвращается функцией .split(), делать set, и снова list? Ну и вообще, Вы на каком языке пишете? С синтаксисом всё совсем плохо. Update списка, присвоение апдейта, return в цикле. Изучите матчасть всё-таки, не надо играть в угадайку.
UPD Вот решение, соответствующее всем условиям задачи:
def intersect(a1, a2): common = [] i1, i2 = iter(a1), iter(a2) try: e1, e2 = next(i1), next(i2) while True: if e1 < e2: e1 = next(i1) elif e1 >e2: e2 = next(i2) else: common.append(e1) e1, e2 = next(i1), next(i2) except StopIteration: return common intersect([1,2,3,4,5,10,12], [3,4,5,6,7,11,12]) # => [3, 4, 5, 12]
Ответ написан более трёх лет назад
Комментировать
Нравится 1 Комментировать
n293 @n293 Автор вопроса
Большое спасибо за помощь: Андрей Дугин и longclaps
def intersection(a, b): c = a & b return sorted(c, key=int) numList1 = set(input().split()) numList2 = set(input().split()) print(*intersection(numList1, numList2))
Ответ написан более трёх лет назад
Нравится 1 3 комментария

Andrey Dugin @adugin Куратор тега Python
Только у этого алгоритма сложность сильно меньше O(len(A)+len(B))
n293 @n293 Автор вопроса
Андрей Дугин, буду признателен, если объясните, как вычислить сложность алгоритма, ну либо ссылку на источник.
Это решение подходит под заданную сложность?
def intersection(a, b): result = list(set(a) & set(b)) return result numList1 = list(map(int, input().split())) numList2 = list(map(int, input().split())) print(*intersection(numList1, numList2))