Иногда (а точнее, довольно часто) возникают ситуации, когда нужно сделать строку, подставив в неё некоторые данные, полученные в процессе выполнения программы (пользовательский ввод, данные из файлов и т. д.).
В этом случае для подстановки этих значений можно использовать строковый метод format.
При этом в шаблоне в места подстановок нужно поставить якори вида {}, а в параметры format передать ровно необходимое количество значений.
Однако возможностей у format гораздо больше: кроме непосредственной подстановки в строку возможно применение форматирования в выводимым данным.
Полный список возможностей можно получить непосредственно в документации,
а здесь будет список разумных примеров использования этого метода:
>>> '{}, {}, {}'.format('a', 'b', 'c')
'a, b, c'
>>> '{0}, {1}, {2}'.format('a', 'b', 'c') # Можно явно указать индексы
'a, b, c'
>>> '{2}, {1}, {0}'.format('a', 'b', 'c') # Если индексы указаны явно, то они могут идти в любом порядке
'c, b, a'
>>> '{0}{1}{0}'.format('abra', 'cad') # И даже повторяться
'abracadabra'
>>> 'Coordinates: {lat}, {lon}'.format(lat='37.24N', lon='-115.81W') # Можно вместо индексов явно указывать имена
'Coordinates: 37.24N, -115.81W'
# Выравнивания
>>> '{:<30}'.format('left aligned')
'left aligned '
>>> '{:>30}'.format('right aligned')
' right aligned'
>>> '{:^30}'.format('centered')
' centered '
>>> '{:*^30}'.format('centered') # Используем * для заполнения
'***********centered***********'
# Особый вывод действительных чисел
>>> '{:+f}; {:+f}'.format(3.14, -3.14) # Всегда показывать знак
'+3.140000; -3.140000'
>>> '{: f}; {: f}'.format(3.14, -3.14) # Или выводить пробел, если знака плюса нет
' 3.140000; -3.140000'
>>> '{:0.2f}; {:0.3f}; {:0.3f}'.format(3.14, -3.14, 179e-4) # Можно выводить фиксированное кол-во значащих цифр
'3.14; -3.140; 0.018'
# Вывод в двоичной, восьмеричной или шестнадцатиричной системе счисления
>>> "int: {0:d}; hex: {0:x}; oct: {0:o}; bin: {0:b}".format(42)
'int: 42; hex: 2a; oct: 52; bin: 101010'
>>> "int: {0:d}; hex: {0:#x}; oct: {0:#o}; bin: {0:#b}".format(42) # С префиксом 0x, 0o, 0b
'int: 42; hex: 0x2a; oct: 0o52; bin: 0b101010'
f-строки
Начиная с Python 3.6 появился ещё один способ получения строк, в которые вставлены значения некоторых переменных. Кроме того, что этот способ очень хорошо читается, он ещё и самый быстрый.
Начнём с примера:
>>> x = 10
>>> y = 5
>>> print(f"{x} x {y} / 2 = {x * y / 2}")
>>> 10 x 5 / 2 = 25.0
>>> planets = ["Меркурий", "Венера", "Земля", "Марс"]
>>> print(f"Мы живём не планете {planets[2]}")
>>> Мы живём не планете Земля
В целом этот подход очень похож на использование метода .format, только необходимо всегда указывать префикс f перед строкой и имена переменных внутри фигурных скобок.
Возможностей того, что можно указывать внутри фигурных скобок достаточно много: pep-0498.
Задачи на форматирование строк
S★: Пять цифр после запятой
На вход даются десятичные числа.
Необходимо вывести их с точностью 5 цифрами после запятой.
На вход даётся число N,
затем следуют N действительных чисел.
3
-2
12.123
12.123456
-2.00000
12.12300
12.12346
IDE
T★: Фиксированное число цифр после запятой
На вход даются десятичные числа.
Необходимо вывести их с указанным числом цифр после запятой.
На вход даётся число d — количество знаков, после запятой, которые нужно выводить.
Затем идёт число N — количество чисел, после следуют N действительных чисел.
3
2
-12
12.1234
-12.000
12.123
IDE
U★: Таблица степеней — 1
На вход даётся число N.
Необходимо вывести таблицу квадратов и кубов.
Числа в таблице должны быть выровнены по правому краю.
Ширина каждого столбца — 10 символов.
3
| 0| 0| 0|
| 1| 1| 1|
| 2| 4| 8|
| 3| 9| 27|
IDE
V★: Таблица степеней — 2
На вход даётся число N.
Необходимо вывести таблицу квадратов и кубов.
Числа в таблице должны быть выровнены по правому краю.
Ширина каждого столбца должна быть минимальной, но так, чтобы все числа поместились.
На вход даётся числа d и N.
Необходимо вывести таблицу степеней от 1 до d чисел от 0 до N.
Числа в таблице должны быть выровнены по правому краю.
Ширина каждого столбца должна быть минимальной, но так, чтобы все числа поместились.
Дан ребус — таблица 5 × 5, заполненная буквами так, что в каждой строке, столбце и на каждой диагонали все буквы различны.
Нужно заменить его на другой ребус.
Для этого каждая буква ребуса заменяется на другую соответствующую букву.
Строка для замены букв даётся сразу после ребуса.