Python ввод вывод
Любая программа общается с пользователем через ввод и вывод. Здесь вы разберетесь, как print() выводит несколько значений, зачем нужны параметры sep и end, как получить данные через input() и подключить модуль стандартной библиотеки.
Примеры рассчитаны на Python 3.12 и 3.13. В новом разделе показано, как сделать ввод устойчивым к ошибкам: программа не падает, если вместо числа ввели букву, а таблица с результатами выглядит ровно благодаря спецификаторам формата в f-строках. В конце есть прием быстрого чтения данных для олимпиадных задач.

Содержание статьи
Ввод и вывод в Python - это неотъемлемая часть в изучении языка. С выводом мы с вами уже знакомы, за это у нас отвечает print(),а за ввод у нас отвечает input(). Ниже, на примерах мы с вами разберем, как работают эи функции, и как лучше их использовать.
print('Это строка которую мы хотим вывести')
Результат:
Это строка которую мы хотим вывести # Результат вывода в консоли (print выводит строку без кавычек)
# рассмотрим другой пример
a = 10
print ("Значение переменной а", a)
Результат:
Значение переменной а 10 # Вывод в консоли
Во втором примере, возможно вы заметили что функция print(), добавила автоматически пробел между строкой, и значением переменной a. Такое поведение данной функции является своего рода настройкой по умолчанию, но, Python нас в этом не ограничивает, и мы можем изменить формат вывода.
print(*objects, sep=' ', end='\n', file=None, flush=False) # примерно так выглядит синтаксис функции
#objects - это значения, которые необходимо напечатать
#sep - это разделитель которые используется между значениями, по умолчанию, это пробел
#end - печать в самом конце
print(1,2,3,4)
print(1,2,3,4, sep='*')
print(1,2,3,4, sep ='#', end = '&')
Результат:
1 2 3 4
1*2*3*4
1#2#3#4&
Форматированный вывод
Существуют несколько вариантов форматированного вывода, но, мы с вами поговорим о более современном формате,f - строки. Данный вариант вывода форматированной записи удобен для восприятия, и в отличии от других вариантов, его использовать намного проще, рассмотрим примеры:
name = "Тимур"
age = 30
print(f"Привет {name}, тебе {age} лет? ")
Результат:
Привет Тимур, тебе 30 лет? # Как видите мы создали две переменные, и без труда их вывели в печать
Как вы помните из предыдущих уроков, переменная может менять свое значение в ходе работы вашей программы, соответственно, вы можете динамически генерировать различные значения на выводе. Логика работы f-строк, довольно проста, вы просто на выводе в нужном месте указываете в фигурных скобках название вашей переменной.
Ввод Python
И так, все что мы писали до сих пор, это максимально статичный код, в том что мы делали не было никакой гибкости, пришло время это изменить. Как вы уже много раз сталкивались, в большинстве программ для придания ему гибкости, идет частое взаимодействие с пользователем, а некоторые программы без взаимодействия с пользователем вообще бесполезны.
О вводе пользовательских данных мы поговорим еще много, и глубже изучим эту функцию. И так за ввод данных у нас отвечает функция input(). В примере ниже мы напишем небольшую программу, в которой пользователю надо будет ввести два слагаемых, и получить результат, поехали!
num = int(input('Введите значение:')) # вводим первое значение
num2 = int(input("Введите значение :")) #вводим второе значение
sum = num + num2 #создаем переменную sum, и записываем туда результат сложения
print("Результат:",sum) # выводим результат
Всего 4 строчки кода, и у нас уже есть маленькая программа, которая умеет складывать два числа, можно было конечно уместить эту программу и меньшее количество строк, но, для наглядности лучше так. Подведем небольшой промежуточный итог. В программе выше, мы использовали и ввод и вывод, и как видите это внесло ощутимую гибкость в нашей программе.
Импорт библиотек в Python
Со временем при разработке программы, она становится больше и функциональнее, хорошей идеей, и хорошим тоном разработки считается разбивки на модули. Модуль - это файл Python, в котором содержаться классы, функции, переменные, при импортировании модуля, нужные функции или переменные можно вызывать, то есть один модуль мы импортируем в другой модуль. Для импорта в Python есть ключевое слово import.Сейчас мы импортируем стандартный модуль Python math, и на небольшом примере разберемся как работать с импортированными модулями, и как вообще происходит процесс импорта.
import math # Просто, ничего сложного
print(math.pi) #Смотрите документацию по модулям, что бы знать как они работают, в данном случаем получаем число ПИ
Результат:
3.141592653589793
В примере выше, когда мы импортировали наш модуль math, нас стали доступны все его атрибуты и функции, но нужно запомнить, что мы можем так же импортировать из модуля только то, что нам нужно. Для этого используется ключевое слово from. Например:
from math import pi # Все очень просто, из модуля math импортируем константу pi (число ПИ)
Возможность импортирования модулей, делает Python очень гибкой средой разработки, огромное количество написанных и протестированных модулей решают кучу задач за нас, вам достаточно поискать нужный модуль и почитать его документацию, начните с pypi.org
Следующий урок: Условия в Python
Надежный ввод чисел и аккуратный вывод
Здесь разобраны такие пункты: input() всегда возвращает строку, несколько чисел в одной строке, выравнивание и точность в f-строках, вывод в файл и в поток ошибок.
input() всегда возвращает строку
Даже если пользователь набрал 5, функция вернет строку "5". Без преобразования "5" + "3" даст "53", а int("пять") завершит программу с ValueError. Оберните ввод в функцию с повтором:
def ask_int(prompt: str, low: int | None = None, high: int | None = None) -> int:
while True:
raw = input(prompt).strip()
try:
value = int(raw)
except ValueError:
print(f"Нужно целое число, а не {raw!r}")
continue
if (low is not None and value < low) or (high is not None and value > high):
print(f"Число должно быть от {low} до {high}")
continue
return value
age = ask_int("Возраст: ", 0, 120)
Для дробных чисел используйте float() и помните, что Python ожидает точку: float("2,5") вызовет ошибку. Если пользователи вводят запятую, замените ее заранее через raw.replace(",", ".").
Обратите внимание на устройство функции. Вызов strip() убирает случайные пробелы по краям, которые иначе приведут к ошибке преобразования. Запись {raw!r} выводит введенное значение в кавычках, поэтому пустая строка или лишний пробел сразу заметны. Цикл while True повторяет вопрос, пока не получит корректное значение, а return завершает и цикл, и функцию. Такую функцию достаточно написать один раз и использовать во всех учебных программах, где нужно спросить число.
Несколько чисел в одной строке
Если пользователь введет не два числа, распаковка завершится ошибкой ValueError, поэтому в реальной программе оберните строку в try.
a, b = map(int, input("Два числа через пробел: ").split())
nums = [int(x) for x in input().split()]
Выравнивание и точность в f-строках
rows = [("Хлеб", 2, 54.9), ("Сыр", 1, 389.0)]
for name, qty, price in rows:
print(f"{name:<8}{qty:>3} шт. {price:>8.2f} руб.")
# Хлеб 2 шт. 54.90 руб.
# Сыр 1 шт. 389.00 руб.
| Спецификатор | Значение | Пример результата |
|---|---|---|
{x:.2f} | 2 знака после точки | 3.14 |
{x:>8} | выравнивание вправо по ширине 8 | text |
{x:,} | разделитель тысяч | 1,000,000 |
{x:.1%} | процент | 12.5% |
{x=} | имя и значение для отладки | x=42 |
Вывод в файл и в поток ошибок
У print() есть параметры file и flush. Сообщения об ошибках выводите в sys.stderr, чтобы они не смешивались с результатом, а flush=True нужен для индикаторов прогресса, которые должны появляться сразу.
import sys
print("Файл не найден", file=sys.stderr)
with open("log.txt", "a", encoding="utf-8") as f:
print("Запуск завершен", file=f)
Для больших объемов входных данных input() медленный. Читайте все сразу: data = sys.stdin.read().split(). Больше примеров ввода есть в статье input python 3.
Частые вопросы
Несколько вопросов, которые часто задают начинающие, и ответы на них.
Как вывести значения без пробела или без перехода на новую строку?
Задайте параметры: print(a, b, sep="") склеит значения без пробела, а print(x, end=" ") заменит перенос строки пробелом. Оба параметра можно комбинировать.
Почему input() возвращает строку, даже если ввели число?
Функция не знает, какие данные вы ожидаете, и всегда отдает текст. Преобразование выполняете вы: int(), float() или собственная функция с проверкой.
Как ввести список чисел в одну строку?
Разбейте строку методом split() и преобразуйте каждый элемент: nums = list(map(int, input().split())). По умолчанию split() делит по любым пробелам и игнорирует лишние.
Как вывести число с двумя знаками после запятой?
Используйте f-строку f"{x:.2f}". Она возвращает строку для вывода, а для вычислений с округлением применяйте round(x, 2) или модуль decimal, если важна точность денежных сумм.