Форматирование строк
Часто форматирование строк связано с их выводом на экран. Однако следует помнить, что на вывод передается уже сформированная строка. Создание строки, то есть вставка в нее данных в заданных форматах, является отдельной операцией. Готовая строка может быть, например, присвоена переменной, а не выводиться сразу на экран.
% — оператор форматирования строки
Оператор % по отношению к строкам выполняет операцию форматирования и вставки таким образом, что объект, стоящий справа от него, встраивается согласно определенным правилам в строку слева от него:
Такой способ форматирования считается старым потому, что заимствован из функции printf языка C, а в Python кроме него появились другие способы вставки данных в «строки-шаблоны». Однако в ряде случаев удобнее использовать оператор % .
Вывод вещественного числа с заданной точностью
Оператор деления / возвращает вещественное число. Если количество знаков после запятой бесконечно, интерпретатор Python выведит его с большим количеством знаков в дробной части:
a = 4 / 3 print(a)
1.3333333333333333
С помощью оператора форматирования строки % можно выполнить округление числа до требуемой точности. Например, оставить только два знака после запятой. Для этого внутри строки, то есть в кавычках, записывают комбинацию символов, которая начинается со знака % . Далее ставят точку. Число после точки обозначает количество знаков после запятой. Символ f обозначает вещественный тип данных float .
a = 4 / 3 print('%.2f' % a)
Обратите внимание, переменная a содержит число с большим количеством знаков в дробной части. Строка ‘1.33’ является результатом выполнения выражения ‘%.2f’ % a . Функции print() передается готовая строка ‘1.33’ . Предварительно эту строку можно было бы присвоить отдельной переменной:
a = 4 / 3 b = '%.2f' % a print(b)
С другой стороны, по правую сторону от оператора форматирования строки не обязательно указывать переменную. Чаще здесь записывают непосредственно выражение. При этом берут его в скобки.
print('%.2f' % (4 / 3))
Строка, содержащая в себе спецификаторы преобразования, также может содержать обычные символы:
print('A = %.1f, B = %d' % (3, 4))
A = 3.0, B = 4
Символ d в формате вставки обозначает целое число (тип int ).
Оператор форматирования строк выполняет округление вещественных чисел, а не простое отбрасывание «лишних» цифр:
print('%.2f, %.2f' % (0.123, 0.126))
0.12, 0.13
Вывод символа
Чтобы получить любой символ из таблицы Unicode, в спецификаторе используют букву c , при этом после знака оператора форматирования указывают код требуемого символа.
print('%c' % 189) print('%c' % 32400)
Вставка в строку значений словаря через ключи
ab = print('%(good)s, %(price).2f' % ab)
AB, 2.30
Вывод данных в поля заданной ширины
Бывает данные надо вывести в виде таблицы. Это значит, что каждый элемент данных выводится в поле определенной ширины, которая измеряется в знакоместах.
Например, вместо подобного вывода:
First 483 1.1 Second 9 10.7
First 483 1.1 Second 9 10.7
Для таких случаев в формате вставки элемента данных в строку указывается ширина поля (количество знакомест). Делается это сразу после знака процента.
print('%-7s %5d %8.1f' % ('First', 483, 1.1)) print('%-7s %5d %8.1f' % ('Second', 9, 10.65))
Знак «минус» заставляет данные выравниваться по левому краю. По умолчанию они выравниваются по правому:
print('%7s %5d' % ('First', 483)) print('%7s %5d' % ('Second', 9))
First 483 Second 9
Строковый метод format
Строковый метод format вставляет переданные в него аргументы в строку, к которой применяется. В строке места вставки, или «поля замены», определяются фигурными скобками. Внутри скобок могут указываться индексы или ключи аргументов, переданных в метод format.
print("<>, <> and <>".format('A', 8, 'B')) print(", and ".format('A', 8, 'B'))
A, 8 and B 8, A and B
В format() может передоваться больше аргументов, чем имеется мест вставок в строке. В таком случае оставшиеся аргументы игнорируются.
nums = ['I', 'II', 'III', 'IV', 'V'] print("<> <> <>".format(*nums)) print(" ".format(*nums))
I II III I V
Вставка значений по ключу:
print(' = '.format(var='pi', value=3.14))
pi = 3.14
u = print('-'.format(**u)) print(''.format(**u)) print('-'.format('John', **u))
Bob-35 Bob John-35
Вывод атрибутов объекта:
class House: size = 5 street = "Red" h = House() print(', '.format(h))
5, Red
Метод format позволяет задавать ширину поля и выравнивание:
u = print('--'.format(**u)) print('10>-4>-'.format(**u)) print('--'.format(**u))
Bob - 35- Bob- 35- Bob - 35 -
Вывод вещественных чисел:
print('<>'.format(4/3)) print(''.format(4/3)) print(''.format(4/3)) print(''.format(4/3)) print(''.format(4/3))
1.3333333333333333 1.333333 1.33 1.33 1.333333e+00
Форматированные строковые литералы
В последних версиях Python появилась возможность использовать так называемые форматированные строковые литералы (formatted string literals). В отличие от обычных строковых литералов перед f-строками ставится буква f .
В теле строки могут находиться включения в фигурных скобках. В процессе выполнения программы интерпретатор исполняет выражения в фигурных скобках, вставляя их результат в соответстующие места строки.
user = input() print(f'Hello !') a = 4.5678 print(f'Result ')
Bob Hello Bob! Result 4.57
print(f'Hello !') a = 4 b = 3 print(f'Result ')
John Hello John! Result 1.33
Выравнивание строк другими строковыми методами
a = "Hello" print('|', a.center(10), '|') print(a.rjust(14)) print(a.ljust(10)) print(a.ljust(14, '.')) print(a.center(14, '.'))
| Hello | Hello Hello Hello. . Hello.
Как форматировать позиции элементов двумерного массива при выводе?
Подскажите пожалуйста, есть ли в Python методы, позволяющие выравнивать элементы в двумерном массиве, в зависимости от количества знаков в этом элементе? Например, у меня есть матрица случайных чисел размерностью МхМ (М вводит пользователь), диапазон чисел — от 1 до 50. Я хочу, чтобы при выводе все элементы в каждом столбце были выравнены по правому краю относительно друг друга. Т.е, делаю 3 отступа, если элемент — это однозначное число, и 2 отступа, если двузначное. Сделал это через if .. else, но может быть есть более лаконичный и красивый способ? заранее спасибо
from random import randint M = int(input('Please enter the size of matrix: ')) matrix = [[randint(1, 50) for _ in range(M)] for _ in range(M)] for i in range(M): for j in range(M): if matrix[i][j] '.format(matrix[i][j]), end=' ') else: print(' <>'.format(matrix[i][j]), end=' ') print()
Отслеживать
задан 11 авг 2020 в 20:03
43 5 5 бронзовых знаков
2 ответа 2
Сортировка: Сброс на вариант по умолчанию
for i in range(M): for j in range(M): print('2d>'.format(matrix[i][j]), end=' ')
Отслеживать
25.4k 4 4 золотых знака 20 20 серебряных знаков 36 36 бронзовых знаков
Как форматировать элементы матрицы в питоне



Скачай курс
в приложении
Перейти в приложение
Открыть мобильную версию сайта
© 2013 — 2023. Stepik
Наши условия использования и конфиденциальности

Public user contributions licensed under cc-wiki license with attribution required
Форматированный вывод
Различные способы вывода информации в консоль.
1. Просто вывод:
a = 3.4 print(a)
2. Форматированный вывод:
a = 3.4 print("%3d" % a)
a = 3.4 print("%3.2f" % a)
a = 3 print("%3.2f" % a)
a = '3' print("%3s" % a)
a = 3 print("%3s" % a)
3. Вывод списка (последовательности):
a = [1,2,3,4,5] print(a)
4. Склеивание числовой последовательности в строку
a = [1,2,3,4,5] #map(str,a) Применяет функцию str к каждому элементу списка #' '.join(['1','2','3','4']) - склеивает последовательность строк в одну print(' '.join(map(str,a))) a = [1,2,300,40,5,100] print(' '.join(map(str,a)))
5. Склеивание числовой последовательности в строку
a = [1,2,3,4,5,6] print(' '.join(map(lambda x: "%3d" % x, a))) a = [1,2,300,40,5,100] print(' '.join(map(lambda x: "%3d" % x, a)))
6. Вывод двумерного списка в консоль (будет некрасиво, если значения разной размерности):
from random import randrange as rnd a = [[rnd(-10,120) for c in range(10)] for r in range(12)] for r in a: # Перебираем все строки (по значению) for x in r: # Перебираем в строках все элементы (по значению) print(x, end = ' ') # Выводим значение элемента, переход строки в консоли не ставим print() # После вывода строки переходим в консоли на новую строку
7. (%3d выравнивает значения, будут проблемы, если значения не числа)
from random import randrange as rnd a = [[rnd(-10,120) for c in range(10)] for r in range(12)] for r in a: # Перебираем все строки (по значению) for x in r: # Перебираем в строках все элементы (по значению) print("%3d" % x, end = ' ') # Выводим значение элемента, переход строки в консоли не ставим print() # После вывода строки переходим в консоли на новую строку
8. Вывод двумерного списка, некоторые элементы которого — строки
from random import randrange as rnd a = [[rnd(-10,120) for c in range(10)] for r in range(12)] a[3][4] = '*' for r in a: # Перебираем все строки (по значению) for x in r: # Перебираем в строках все элементы (по значению) print("%3s" % x, end = ' ') # Выводим значение элемента, переход строки в консоли не ставим print() # После вывода строки переходим в консоли на новую строку