Выравнивание 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 шт):
Можно разместить внутрь 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)