Input (ввод, «инпут») — это данные, которые поступают в программу или устройство извне: нажатия клавиш, строка из файла, сигнал с микрофона. Output (вывод, «аутпут») — результат, который программа или устройство отдаёт наружу: текст в консоли, картинка на экране, файл на диске. Тем же словом input называют и поле ввода на веб-странице — HTML-элемент <input>, а output — парный ему тег <output> для показа результата. Ниже разбираю оба смысла: потоки ввода-вывода в коде на примере Python, элементы <input> и <output> в HTML-форме, устройства ввода-вывода и типовые ошибки новичков.
Содержание
Что означают input и output в разных контекстах
Слово одно, но за ним стоят разные вещи. Прежде чем читать дальше, стоит понять, какой именно смысл нужен вам:
| Контекст | Input (ввод) | Output (вывод) |
|---|---|---|
| Программа | данные, которые код получает: с клавиатуры, из файла, по сети | то, что код отдаёт: текст в консоль, файл, ответ по сети |
| Веб-форма (HTML) | элемент <input> — поле, флажок, кнопка |
элемент <output> — место для результата вычисления |
| Компьютер как устройство | клавиатура, мышь, микрофон, сканер | монитор, принтер, колонки |
| Аудиотехника | разъём input (вход) усилителя, куда приходит сигнал | разъём output (выход), откуда сигнал уходит на колонки |
| Игры и разговорная речь | «инпут» — действие игрока или исходные данные для задачи | «аутпут» — результат, реакция системы |
В программировании пара «input/output» часто сокращается до I/O (ввод-вывод): например, «файловый I/O» — это чтение и запись файлов.
Ввод-вывод в программировании
Стандартные потоки: stdin, stdout, stderr
Операционная система даёт каждой запущенной программе три стандартных потока: stdin (standard input, откуда программа читает), stdout (standard output, куда пишет обычный результат) и stderr (standard error, куда пишет сообщения об ошибках). Когда вы запускаете скрипт в терминале, stdin привязан к клавиатуре, stdout и stderr — к экрану. Но ту же программу можно запустить так, чтобы stdin читал файл, а stdout писал в другой файл, и код менять не придётся.
В Python эти потоки доступны как объекты sys.stdin, sys.stdout и sys.stderr, а привычные функции input() и print() — это удобные обёртки над ними.
input() и print() в Python
input() читает одну строку из stdin, убирает завершающий перевод строки и возвращает её. В Python 3 результат input() — всегда строка (str), даже если пользователь ввёл число. print() выводит аргументы в stdout, разделяя их пробелом и добавляя перевод строки в конце:
name = input("Как вас зовут? ") # ждёт строку из stdin
age = int(input("Сколько вам лет? ")) # строку "17" превращаем в число 17
print("Привет,", name, "- через год вам будет", age + 1)
# Ввод: Аня, затем 17
# Вывод: Привет, Аня - через год вам будет 18
У print() есть два параметра, которые управляют форматом вывода: sep — разделитель между аргументами (по умолчанию пробел) и end — что добавить в конце (по умолчанию \n). Третий параметр file направляет вывод в другой поток, например в stderr:
import sys
print("2026", "09", "02", sep="-") # 2026-09-02
print("Загрузка", end="... ")
print("готово") # Загрузка... готово
print("ошибка: файл не найден", file=sys.stderr) # уйдёт в поток ошибок, не в stdout
Через sys.stdin и sys.stdout можно работать напрямую. Это нужно, когда данных много (в задачах на Stepik или Codeforces sys.stdin.read() читает весь ввод одним вызовом быстрее, чем цикл из input()) или когда важен точный контроль над переводами строк:
import sys
line = sys.stdin.readline() # как input(), но перевод строки '\n' в конце сохраняется
sys.stdout.write("готово\n") # как print("готово"), но '\n' нужно ставить самому
Файлы: ввод-вывод на диске
Файл — тот же поток, только привязанный к диску. В Python его открывают функцией open() с режимом: "r" — чтение (ввод), "w" — запись с очисткой файла, "a" — дозапись в конец. Конструкция with закрывает файл автоматически, а encoding="utf-8" избавляет от проблем с кириллицей:
with open("notes.txt", "w", encoding="utf-8") as f:
f.write("первая строка\n") # output: программа -> диск
with open("notes.txt", encoding="utf-8") as f:
print(f.read(), end="") # input: диск -> программа; выведет: первая строка
Тот же принцип в других языках: в C это scanf/printf, в Java — Scanner(System.in) и System.out.println(), в JavaScript в браузере — prompt() и console.log(). А в Angular словами Input и Output названы декораторы @Input() и @Output(), которые передают данные между компонентами: смысл тот же — что приходит в компонент и что он отдаёт наружу.
Инпут в HTML: элемент <input>
На веб-странице <input> — это элемент формы, через который пользователь вводит данные: текстовое поле, флажок, переключатель, кнопка выбора файла. Что именно показывает браузер, определяет атрибут type. В таблице — типы, с которыми чаще всего приходится работать:
| type | Что видит пользователь | Что уходит в форму |
|---|---|---|
text |
однострочное поле | введённая строка |
password |
поле со скрытыми символами | строка (скрыта только на экране, серверу видна) |
email |
поле с проверкой формата адреса | строка |
number |
поле для числа со стрелками | число в виде строки |
checkbox |
флажок | значение value, только если флажок отмечен |
radio |
переключатель: один из группы с общим name |
value выбранного варианта |
file |
кнопка выбора файла | сам файл (форме нужен enctype="multipart/form-data") |
date |
выбор даты | дата в формате ГГГГ-ММ-ДД |
range |
ползунок | число в виде строки |
color |
палитра | цвет вида #rrggbb |
hidden |
ничего | заранее заданное value |
submit |
кнопка отправки | отправляет форму |
Кроме type, важны атрибуты: name — имя, под которым значение уйдёт на сервер (без него поле не отправляется вовсе); value — начальное значение (для флажков и переключателей — то, что отправится); placeholder — подсказка внутри пустого поля; required — браузер не отправит форму с пустым полем; id — чтобы связать поле с подписью <label for="...">.
Поля собираются в <form>, а отправляет данные кнопка type="submit":
<form action="/subscribe" method="post">
<label for="email">Почта</label>
<input type="email" id="email" name="email" placeholder="you@example.com" required>
<label><input type="checkbox" name="agree" value="yes"> Согласен с правилами</label>
<input type="submit" value="Подписаться">
</form>
При нажатии кнопки браузер отправит на /subscribe пары «имя=значение»: email=anna@example.com&agree=yes. Если флажок не отмечен, пары agree в запросе не будет совсем — это стоит учитывать на сервере.
Как выбирать тип: нужен произвольный текст — text; браузер должен проверить формат — email, number, date; выбор из нескольких вариантов — radio (ровно один) или несколько checkbox (любое число); значение должно уйти на сервер незаметно для пользователя — hidden.
Тег <output> в HTML
Парный элемент <output> предназначен для результата вычисления или действия пользователя. У него есть атрибут for — список id элементов, из которых результат получен (через пробел), и name, по которому к нему обращаются из скрипта. В отличие от <input>, значение <output> при отправке формы на сервер не уходит — это элемент только для отображения:
<form oninput="total.value = Number(price.value) * Number(qty.value)">
<input type="number" id="price" name="price" value="100"> ×
<input type="number" id="qty" name="qty" value="2"> =
<output name="total" for="price qty">200</output> руб.
</form>
Пока пользователь меняет цену или количество, браузер пересчитывает сумму и показывает её внутри <output>. Результат можно вывести и в обычный <span>, но <output> явно помечает его как результат формы — это понимают и скрипты, и программы чтения с экрана.
Устройства ввода-вывода
В вычислительной технике input и output — это направление данных относительно компьютера: устройства ввода передают информацию в него, устройства вывода — из него. Часть устройств работает в обе стороны:
| Устройство | Роль | Что передаёт |
|---|---|---|
| Клавиатура, мышь, геймпад | ввод | нажатия и перемещения |
| Микрофон, веб-камера, сканер | ввод | звук, видео, изображение документа |
| Монитор, проектор | вывод | изображение |
| Принтер | вывод | отпечаток на бумаге |
| Колонки, наушники | вывод | звук |
| Сенсорный экран | ввод и вывод | касания и изображение |
| Сетевая карта, модем | ввод и вывод | данные по сети в обе стороны |
| Жёсткий диск, SSD, флешка | ввод и вывод | чтение и запись файлов |
То же деление встречается на бытовой технике: на усилителе или звуковой карте разъёмы подписаны IN/INPUT (сюда подаётся сигнал) и OUT/OUTPUT (отсюда он выходит). Перепутать их — частая причина, почему «звука нет»: провод воткнут в выход вместо входа.
«Инпут» в играх и разговорной речи
В играх и обзорах техники «инпут» — это действие игрока (нажатие кнопки, движение мыши), а input lag (задержка ввода) — время между нажатием и реакцией на экране. Складывается она из нескольких этапов: опрос контроллера, обработка в игре, вывод кадра монитором, поэтому честно измеряется вся цепочка от устройства до экрана, а не одно число «у монитора». В рабочей речи «инпут» часто означает просто исходные данные для задачи («пришли мне инпут по проекту»), а «аутпут» — результат работы.
Типовые ошибки с input и output
1. input() вернул строку, а не число. Самая частая ошибка новичка в Python:
a = input() # пользователь ввёл 2
b = input() # пользователь ввёл 3
print(a + b) # 23 <- строки склеились, а не сложились
Исправление — явно преобразовать тип:
a = int(input())
b = int(input())
print(a + b) # 5
Если пользователь введёт не число, int() бросит ValueError — для ввода от людей его стоит перехватывать через try/except.
2. У <input> нет name — поле не уходит на сервер.
<form action="/register" method="post">
<input type="text" placeholder="Ваше имя">
<input type="submit" value="Отправить">
</form>
<!-- Результат: форма отправляется, но тело запроса пустое - имя пользователя потеряно -->
Исправление — добавить name:
<input type="text" name="username" placeholder="Ваше имя">
<!-- Результат: username=Аня -->
3. print() без sep/end — вывод не в том формате. Ожидали числа в строку, а получили столбик; ожидали дату через дефис, а получили пробелы:
for i in range(3):
print(i)
# 0
# 1
# 2
print(2026, 9, 2) # 2026 9 2
Исправление — задать end и sep:
for i in range(3):
print(i, end=" ")
print() # 0 1 2
print(2026, 9, 2, sep="-") # 2026-9-2
Для сложного формата проще f-строка: print(f"{2026}-{9:02d}-{2:02d}") выведет 2026-09-02.
Выводы
- Input (ввод) — это данные, которые поступают в программу или устройство извне; output (вывод) — результат, который программа или устройство отдаёт наружу.
- В HTML словом input называют элемент формы
<input>(текстовое поле, флажок, переключатель, кнопка), а output — парный тег<output>для показа результата вычисления. - Каждая программа получает от операционной системы три стандартных потока: stdin для чтения, stdout для обычного вывода и stderr для сообщений об ошибках; в Python функции
input()иprint()— обёртки над ними. input()в Python 3 всегда возвращает строку, поэтому для арифметики её нужно преобразовать черезint(); формат выводаprint()задают параметрыsep,endиfile.- У
<input>вид поля определяет атрибутtype, а без атрибутаnameзначение на сервер не отправляется; значение<output>при отправке формы на сервер не уходит. - Устройства ввода (клавиатура, мышь, микрофон, сканер) передают данные в компьютер, устройства вывода (монитор, принтер, колонки) — из него, а сенсорный экран, диск и сетевая карта работают в обе стороны.
Где применяется / связь с практикой
Ввод-вывод — первое, с чем сталкивается любой программист: без input() и print() не решить даже задачу с первого занятия, а без понимания потоков и файлов не написать скрипт, который читает данные и сохраняет результат. Дальше та же тема разворачивается в HTML-формы, работу с сетью и базами данных — всё это тоже ввод и вывод, только через другие каналы. Разобрать основы на практике, от input() до работы с файлами и модулями, можно на курсе «Python-разработчик. Базовый уровень» в Otus, а посмотреть, как преподаватели разбирают такие задачи вживую, — на открытых уроках.
Смежные темы: Основы Python для начинающих: что нужно знать в 2025 году, HTML-флажки и другие элементы HTML-формы, HTML и его основные элементы.
FAQ
Как заставить программу читать из файла, не меняя код? Перенаправить потоки в терминале: python script.py < input.txt > output.txt. Тогда input() будет читать строки из input.txt, а print() — писать в output.txt.
Что значит «задача I/O-bound»? Что программа большую часть времени ждёт ввода-вывода — ответа сети, чтения диска, — а не считает. Ускоряют такую задачу не более быстрым процессором, а параллельным ожиданием: асинхронностью или потоками.
Почему при чтении файла вместо русских букв «кракозябры»? Файл записан в одной кодировке, а прочитан в другой. Указывайте encoding="utf-8" и при записи, и при чтении: в Windows open() без этого параметра может использовать системную кодировку (cp1251), а не UTF-8.



