Перейти к содержимому
Editor

Ввод и вывод в Python: print(), input() и форматирование

Начальный15 min4 упр.90 XP

Этот урок переведён с английского оригинала.Read in EnglishLeer en españolСообщить об ошибке в переводе

0/4 упр.

Каждой программе нужен способ общаться с внешним миром. Приложение с прогнозом погоды показывает температуру. Игра отображает ваш счёт. Калькулятор выводит ответы. Всё это вывод.

В Python главный инструмент для показа информации пользователю называется print(). Поначалу эта функция кажется простой, но у неё есть мощные настройки, которые позволяют точно управлять видом вывода.

В этом уроке вы изучите продвинутые приёмы работы с print() и хитрости форматирования для аккуратного вывода, а также узнаете, как input() читает то, что вводит пользователь. К концу урока ваш вывод будет выглядеть аккуратно и профессионально.

Вы уже знаете, что print("Hello") выводит текст. Но print() умеет выводить и несколько значений сразу. Перечислите их через запятую, и Python выведет их все, разделив пробелами.

Представьте print() как официанта, который зачитывает ваш заказ. Вы называете ему несколько блюд, и он объявляет каждое с небольшой паузой.

Вывод нескольких значений через запятую
# Printing multiple values
name = "Alice"
age = 25
city = "Paris"
print(name, age, city) # Alice 25 Paris
print("Name:", name) # Name: Alice
print("Age:", age, "years") # Age: 25 years
Вывод
Alice 25 Paris
Name: Alice
Age: 25 years

Обратите внимание на удобную деталь: Python автоматически ставит пробел между значениями. Кроме того, числа не нужно превращать в строки. Функция print() сделает это за вас.


По умолчанию print() ставит между значениями пробел. Параметр sep позволяет заменить этот разделитель на что угодно. Его название происходит от слова separator («разделитель»).

Представьте, что вы нанизываете бусины на нитку. sep подобен узелку, который вы завязываете между бусинами. Вы сами решаете, что окажется между элементами.

Как с помощью sep задать, что стоит между значениями
# Default separator is a space
print("A", "B", "C") # A B C
# Custom separators
print("A", "B", "C", sep="-") # A-B-C
print("A", "B", "C", sep=" | ") # A | B | C
print("A", "B", "C", sep="") # ABC (no separator)
print("A", "B", "C", sep="\n") # Each on a new line
Вывод
A B C
A-B-C
A | B | C
ABC
A
B
C

Параметр sep отлично подходит для форматированного вывода дат, путей к файлам или данных в формате CSV, причём склеивать строки вручную не придётся.

Практическое применение sep
# Practical uses of sep
year, month, day = 2025, 3, 15
print(year, month, day, sep="-") # 2025-3-15
# Build a file path
print("home", "user", "docs", sep="/") # home/user/docs
# Create CSV-like output
print("Alice", 25, "Paris", sep=",") # Alice,25,Paris
Вывод
2025-3-15
home/user/docs
Alice,25,Paris

Закончив вывод, print() каждый раз добавляет в конце символ перевода строки. Поэтому вывод каждого вызова print() начинается с новой строки. Параметр end позволяет изменить то, что выводится в конце.

Представьте end как знак препинания в конце предложения. По умолчанию Python «нажимает Enter» после каждого вывода. Вместо этого можно поставить пробел, запятую или вообще ничего.

Как с помощью end управлять переносом строк
# Default end is a newline
print("Hello")
print("World")
# Output:
# Hello
# World
print() # blank line
# Custom end - keep printing on the same line
print("Hello", end=" ")
print("World")
# Output: Hello World
print("Loading", end="...")
print("Done!")
# Output: Loading...Done!
Вывод
Hello
World

Hello World
Loading...Done!
end в цикле
# Print items on the same line using a loop
fruits = ["apple", "banana", "cherry", "date"]
for fruit in fruits:
print(fruit, end=" ")
print() # Final newline to clean up
# Output: apple banana cherry date
Вывод
apple banana cherry date

Как использовать sep и end вместе?

sep и end можно указать в одном вызове print(). Так вы полностью управляете и тем, что стоит между значениями, и тем, что выводится в самом конце.

sep и end вместе
# Combine sep and end
print("A", "B", "C", sep=" -> ", end=" [DONE]\n")
# Output: A -> B -> C [DONE]
# Build a progress bar effect
print("Step 1", "Step 2", "Step 3", sep=" > ", end="\n\n")
print("All steps complete!")
Вывод
A -> B -> C [DONE]
Step 1 > Step 2 > Step 3

All steps complete!

Как сделать выровненный и отформатированный вывод?

В настоящих программах вывод должен легко читаться. В таблицах, чеках и отчётах столбцы должны ровно выстраиваться друг под другом. В Python для этого есть несколько способов.

Самый простой способ дают строковые методы .ljust(), .rjust() и .center(). Они дополняют строку пробелами до нужной ширины.

Выравнивание текста с помощью ljust() и rjust()
# Right-align numbers for a clean column
print("Item".ljust(15), "Price".rjust(8))
print("-" * 24)
print("Coffee".ljust(15), "$4.50".rjust(8))
print("Sandwich".ljust(15), "$8.99".rjust(8))
print("Cookie".ljust(15), "$2.75".rjust(8))
Вывод
Item               Price
------------------------
Coffee             $4.50
Sandwich           $8.99
Cookie             $2.75

Если нужно больше контроля, используйте f-строки со спецификаторами формата. Внутри фигурных скобок можно задать ширину и выравнивание каждого значения.

Спецификаторы выравнивания в f-строках
# f-string alignment
# < left-align, > right-align, ^ center
print(f"{'Name':<15} {'Score':>8}")
print(f"{'-' * 24}")
print(f"{'Alice':<15} {95:>8}")
print(f"{'Bob':<15} {87:>8}")
print(f"{'Charlie':<15} {92:>8}")
Вывод
Name               Score
------------------------
Alice                 95
Bob                   87
Charlie               92
Отформатированная таблица умножения
# Building a multiplication table
print(" ", end="")
for i in range(1, 4):
print(f"{i:>4}", end="")
print()
print("-" * 14)
for row in range(1, 4):
print(f"{row} |", end="")
for col in range(1, 4):
print(f"{row * col:>4}", end="")
print()
Вывод
     1   2   3
--------------
1 |   1   2   3
2 |   2   4   6
3 |   3   6   9

Как работает функция input() в Python?

Вывод составляет только половину дела. Большинству программ нужно ещё и получать информацию от пользователя. В Python функция input() приостанавливает программу и ждёт, пока пользователь что-нибудь введёт.

Представьте input() как поле формы на сайте. Программа показывает подсказку, пользователь вводит ответ, а программа сохраняет этот ответ в переменной.

Задаём вопрос с помощью input()
name = input("What is your name? ")
print("Hello,", name)

Нажмите «Запустить»: программа остановится на input() и будет ждать. Введите своё имя, нажмите Enter, и программа продолжит работу, а ваш ответ окажется в name.

Функция input() всегда возвращает строку, даже если пользователь ввёл число. Эта важная деталь застаёт врасплох многих новичков. Запустите этот код и введите число:

input() всегда возвращает строку
age = input("How old are you? ")
print(type(age)) # always <class 'str'>
print(age + 10) # TypeError: a string and a number cannot be added

Как преобразовать ввод пользователя в число?

Раз input() всегда возвращает строку, её нужно преобразовать, если вы ожидаете число. Оберните input() в int() для целых чисел или во float() для дробных.

Преобразование ввода в числа
age = int(input("How old are you? "))
print("In 10 years you will be", age + 10)
price = float(input("Price of the item: "))
print("Tax:", round(price * 0.08, 2))

Какие шаблоны вывода часто встречаются в программах на Python?

В профессиональных программах используются узнаваемые шаблоны вывода. Меню, заголовки, чеки и индикаторы прогресса строятся по привычным образцам. Освоив эти шаблоны, вы придадите своим программам законченный вид.

Шаблон: вывод меню
# Pattern 1: A menu display
print("=" * 30)
print(" RESTAURANT MENU")
print("=" * 30)
print("1. Burger $8.99")
print("2. Pizza $12.50")
print("3. Salad $7.25")
print("=" * 30)
Вывод
==============================
    RESTAURANT MENU
==============================
1. Burger         $8.99
2. Pizza          $12.50
3. Salad          $7.25
==============================
Шаблон: отформатированный отчёт
# Pattern 2: A simple report
title = "Sales Report"
print(title.center(30, "="))
print()
print(f"{'Product':<15} {'Units':>7} {'Revenue':>8}")
print("-" * 30)
products = [
("Widgets", 150, 1500.00),
("Gadgets", 89, 2670.00),
("Gizmos", 234, 4680.00),
]
for name, units, revenue in products:
print(f"{name:<15} {units:>7} {revenue:>8.2f}")
print("-" * 30)
total_rev = sum(r for _, _, r in products)
print(f"{'Total':<15} {'':<7} {total_rev:>8.2f}")
Вывод
=========Sales Report=========

Product           Units  Revenue
------------------------------
Widgets             150  1500.00
Gadgets              89  2670.00
Gizmos              234  4680.00
------------------------------
Total                    8850.00
Шаблон: интерактивный калькулятор
# Pattern 3: A program that asks questions
print("Welcome to the Calculator!")
print("Enter two numbers to add.")
print()
num1 = float(input("First number: "))
num2 = float(input("Second number: "))
print(f"Result: {num1} + {num2} = {num1 + num2}")

Упражнения

Пора попрактиковаться! Эти упражнения посвящены форматированию вывода с помощью print(). Попробуйте решить каждое, прежде чем смотреть подсказки.

Упражнение 1: вывод со своим разделителем
Напишите код

Выведите слова "red", "green" и "blue", разделив их строкой - (пробел, дефис, пробел). Используйте для этого параметр sep функции print().

Ожидаемый вывод:

red - green - blue

Обойдитесь одним вызовом print() с параметром sep.

# Print "red", "green", "blue" with " - " as the separator
Упражнение 2: вывод элементов в одну строку
Напишите код

С помощью цикла for выведите числа от 1 до 5 в одну строку через пробел. В конце добавьте пустой print(), чтобы завершить строку.

Ожидаемый вывод:

1 2 3 4 5

Используйте параметр end внутри цикла. Следите, чтобы после 5 не осталось лишнего пробела.

# Print numbers 1 through 5 on the same line
for i in range(1, 6):
# Use end parameter to stay on the same line
pass # Replace this line
print() # Final newline
Упражнение 3: таблица умножения
Напишите код

Создайте таблицу умножения для чисел от 1 до 3. Каждое произведение должно быть выровнено по правому краю и занимать 4 символа в ширину. Выведите строку заголовка и строку-разделитель.

Ожидаемый вывод:

1   2   3
   -----------
1 |   1   2   3
2 |   2   4   6
3 |   3   6   9

Используйте выравнивание в f-строках ({value:>4}), чтобы выровнять числа по правому краю в столбцах шириной 4 символа.

# Print the header row
print(" ", end="")
for i in range(1, 4):
print(f"{i:>4}", end="")
print()
# Print the separator
print(" -----------")
# Print each row of the table
# Your code here
Упражнение 4: отформатированный чек
Напишите код

Создайте отформатированный чек со следующими товарами и ценами. С помощью выравнивания в f-строках выровняйте названия товаров по левому краю (ширина 20 символов), а цены по правому краю (ширина 8 символов, 2 знака после запятой). Добавьте заголовок, разделитель и итог.

Товары:

  • Laptop: 999.99
  • Mouse: 29.50
  • Keyboard: 74.99
  • Ожидаемый вывод:

    ============================
          TECH STORE
    ============================
    Item                   Price
    ----------------------------
    Laptop                999.99
    Mouse                  29.50
    Keyboard               74.99
    ----------------------------
    Total                1104.48
    ============================
    # Create the receipt
    items = [
    ("Laptop", 999.99),
    ("Mouse", 29.50),
    ("Keyboard", 74.99),
    ]
    # Print the header
    # Print column labels
    # Print each item
    # Print the total

    Итоги: ввод и вывод в Python

    Вот краткая справка по всему, что вы изучили:

    ПонятиеСинтаксисПример
    Вывод нескольких значенийprint(a, b, c)print("Hi", name)
    Свой разделительsep="..."print(1, 2, 3, sep="-") даёт 1-2-3
    Своё окончаниеend="..."print("Hi", end=" ") оставляет курсор на той же строке
    Выравнивание по левому краюf"{val:<width}"f"{name:<20}"
    Выравнивание по правому краюf"{val:>width}"f"{price:>8.2f}"
    Выравнивание по центруf"{val:^width}"f"{title:^30}"
    Ввод пользователяinput("prompt")name = input("Name: ")
    Преобразование вводаint(input())age = int(input("Age: "))

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

    Что дальше?

    Теперь, когда вы умеете аккуратно оформлять вывод, можно научиться управлять ходом программы. В следующих уроках вы познакомитесь с инструкциями if и циклами: с их помощью программы принимают решения и повторяют действия.

    Похожие уроки

    Урок был полезен?