Выравнивание f-строки

В начале своего пути освоения этого замечательного языка наткнулся на бесплатный хэндбук Я-конторы и одно из первых же заданий (в разделе давалась инфомрация только по вводу и выводу данных, операциям с числами, строками и форматирование) поставило в тупик. Задание: Сделать чек красивым. Все строки должны быть длиной в 35 символов.

На ввод подаются: Название товара, цена товара, вес товара, количество денег у пользователя

Требуемый формат вывода:

введите сюда описание изображения

Всё корректно выводится, кроме 8-й строки: если длинна переменной >2 - она едет, вот мой вымученный код:

price = int(input())
weight = int(input())
money = int(input())
re_money = money - (weight * price)
print(f"{'Чек':=^35}")
print(f"Товар: {name:>28}")
print(f"Цена: {weight:>17}кг * {price}руб/кг")
print(f"Итого: {weight * price:>28}")
print(f"Внесено: {money:>26}")
print(f"Сдача: {re_money:>28}")
print("=" * 35)

Подскажите, пожалуйста, как выравнивать f-строки с переменными, разделёнными строковыми данными?


Ответы (1 шт):

Автор решения: dofi4ka

Можно разместить внутрь f-строки еще одну f-строку:

print(f"Цена: {f'{weight}кг * {price}руб/кг':>29}")

Начиная с Python 3.12 можно использовать одинаковые кавычки для вложенных f-строчек

print(f"Цена: {f"{weight}кг * {price}руб/кг":>29}")

Ну а вообще можно такой сложный вывод вынести в функцию чтобы не мучится каждый раз

def my_print(label, info, max_len=35):
    print(
        f"{label}:"
        f"{info:>{max_len - len(label) - 1}}"
    )


print(f"{'Чек':=^35}")
my_print("Товар", name)
my_print("Цена", f"{weight}кг * {price}руб/кг")
my_print("Итого", weight * price)
my_print("Внесено", money)
my_print("Сдача", re_money)
print("=" * 35)
→ Ссылка