Как отформатировать вывод с отступом?

Использовать f-строки (formatted string literals):

name = "Alice"
age = 30
print(f"{name:>10}: {age:<5}")  # Выравнивание вправо, заполнение пробелами

Использовать метод .format():

name = "Bob"
age = 25
print("{:>10}: {:<5}".format(name, age))

Использовать str.ljust(), str.rjust(), str.center():

text = "Hello"
print(text.ljust(10))  # Выравнивание влево, заполнение пробелами
print(text.rjust(10))  # Выравнивание вправо, заполнение пробелами
print(text.center(10)) # Выравнивание по центру, заполнение пробелами

Для чисел можно указать количество знаков после запятой, ширину и заполнение:

pi = 3.14159
print(f"{pi:.2f}")      # 2 знака после запятой
print(f"{pi:06.2f}")    # Ширина 6, заполнение нулями, 2 знака после запятой

Форматирование вывода с отступом в Python

В Python есть несколько способов отформатировать вывод с отступом. Выбор зависит от ваших потребностей, но вот наиболее распространенные подходы:

1. Использование f-строк (formatted string literals)

Это современный и часто предпочтительный способ, появившийся в Python 3.6. Он позволяет встраивать выражения непосредственно в строку:


    name = "Alice"
    age = 30
    city = "New York"

    formatted_string = f"Имя: {name:>10}\nВозраст: {age:>10}\nГород: {city:>10}"
    print(formatted_string)

    # Вывод:
    # Имя:      Alice
    # Возраст:         30
    # Город:   New York
  

  • {name:>10} означает: выровнять значение переменной name по правому краю в поле шириной 10 символов.
  • < - выравнивание по левому краю.
  • ^ - выравнивание по центру.

Можно также использовать символ-заполнитель:


    number = 42
    formatted_string = f"Number: {number:05}"
    print(formatted_string) # Output: Number: 00042
  

Здесь :05 означает, что число будет дополнено нулями до 5 знаков, если оно меньше.

2. Метод str.format()

Это более старый, но все еще широко используемый способ форматирования строк:


    name = "Bob"
    score = 95

    formatted_string = "Имя: {:>10}\nОценка: {:>10}".format(name, score)
    print(formatted_string)

    # Вывод:
    # Имя:        Bob
    # Оценка:         95
  

Синтаксис аналогичен f-строкам: {:>10} означает выравнивание по правому краю в поле шириной 10 символов.

3. Оператор % (string formatting operator)

Это самый старый метод, и его использование обычно не рекомендуется для нового кода, поскольку f-строки и str.format() более читабельны и гибки. Однако его все еще можно встретить в старом коде:


    product = "Widget"
    price = 19.99

    formatted_string = "Продукт: %10s\nЦена: %10.2f" % (product, price)
    print(formatted_string)

    # Вывод:
    # Продукт:     Widget
    # Цена:       19.99
  

  • %10s означает строку, выровненную по правому краю в поле шириной 10 символов.
  • %10.2f означает число с плавающей точкой, выровненное по правому краю в поле шириной 10 символов, с двумя знаками после запятой.

4. Использование модуля textwrap

Модуль textwrap полезен для форматирования длинных текстовых блоков. Он позволяет разбивать строки на строки заданной ширины и добавлять отступы.


    import textwrap

    long_text = """
    This is a very long string that needs to be wrapped and indented.
    It's important to format it correctly for readability.
    """

    wrapped_text = textwrap.fill(long_text, width=40, initial_indent='    ', subsequent_indent='    ')
    print(wrapped_text)

    # Вывод:
    #     This is a very long string
    #     that needs to be wrapped and
    #     indented.  It's important to
    #     format it correctly for
    #     readability.
  

  • textwrap.fill() разбивает текст на строки заданной ширины.
  • initial_indent задает отступ для первой строки.
  • subsequent_indent задает отступ для всех последующих строк.

5. Ручное добавление отступов

В простых случаях можно просто добавить пробелы в начало строки:


    message = "Hello, world!"
    indented_message = "  " + message  # Добавляем два пробела
    print(indented_message)  # Output:   Hello, world!
  

Этот метод подходит для статических отступов, но не для динамического форматирования.

Какой метод выбрать?

  • F-строки: Самый современный и читабельный способ для большинства случаев.
  • str.format(): Хороший выбор, если вы работаете с версиями Python до 3.6 или предпочитаете более явное форматирование.
  • Оператор %: Следует избегать в новом коде.
  • textwrap: Идеален для форматирования длинных текстовых блоков.
  • Ручное добавление отступов: Подходит только для простых, статических случаев.
0