Input и output: что это такое — ввод и вывод в программировании и HTML

Input и output: что это такое - ввод и вывод в программировании и HTML Полезное

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.

OTUS Журнал
Скидка 15% 1-6 сентября на курсы (popup)