Форматирование строк
Часто форматирование строк связано с их выводом на экран. Однако следует помнить, что на вывод передается уже сформированная строка. Создание строки, то есть вставка в нее данных в заданных форматах, является отдельной операцией. Готовая строка может быть, например, присвоена переменной, а не выводиться сразу на экран.
% — оператор форматирования строки
Оператор % по отношению к строкам выполняет операцию форматирования и вставки таким образом, что объект, стоящий справа от него, встраивается согласно определенным правилам в строку слева от него:
Такой способ форматирования считается старым потому, что заимствован из функции 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
или через f-строку (Python 3.6+):
- Закодировать файл в base64 на Python
- Рекурсивное создание директорий в Python
- Сортировка в Python
- Правильно добавить год/месяц к дате в Python
- Отформатировать дату в Python
- Получить рабочую директорию и директорию со скриптом в Python
- Копия объекта в Python
- Время выполнения программы на Python
- Конвертировать datetime.timedelta в строку
- Парсинг даты в Python
- Конвертировать строку (str) в булевый тип (bool) в Python
- Получить местный часовой пояс в Python
- Проверить, что строка соответствует регулярному выражению в Python
- Просмотреть доступные версии модулей в PIP
- Получить целочисленный Unix timestamp в Python
- getter и setter в Python
- Настроить формат вывода логов в Python
- Получить переменную окружения в Python
- Обновить пакет в PIP
- Получить имя (хостнейм) машины из Python
- Вывести стэк вызовов при возникновении исключения в Python
- Функция eval в Python
- Дозаписывать (append) в файл в Python
- Препроцессинг кода в Python
- Проверить, что программа установлена из Python
- Настроить путь для импорта библиотек в Python
- Получить размер терминала в символах в Python
- Enum с дополнительными полями в Python
- Ошибка invalid command ‘bdist_wheel’ при установке пакета через PIP
- Получить список аргументов функции из Python
- Сделать словарь только для чтения в Python
- Заматчить любой символ, включая перевод строки, в регулярных выражениях на Python
- Получить список файлов в директории через pathlib в Python
- Вывести действительное число с округлением до нескольких символов после запятой в Python
- Вывод в терминал текста с цветами в Python
- Перезагрузить импортированный модуль в Python
- Безопасно создать список/словарь/любой объект из строкового представления в Python
- Аналог декоратора @property для методов класса в Python
- Перехватить ошибку TimeoutError в asyncio
- Отключить вывод логов в Python
- Уровни логгирования в Python
- Удалить *.pyc и __pycache__ файлы
- Выгрузить объект в JSON в Unicode в Python
- Конвертировать datetime в другую часовую зону в Python
- Дополнить строку нулями в Python
- Вычислить MD5 от строки в Python
- Удалить знаки пунктуации из строки в Python
- Проверить, что первая буква в строке — заглавная, в Python
- Разбить (split) строку по нескольким разделителям в Python
- Отсортировать версии в Python
- Распаковать любой архив в Python
- Получить имя текущего скрипта на Python
- Установка pip на Python 2.6
- Отличить печатаемый символ Unicode от непечатаемого на Python
- Вывести версию интерпретатора Python в машиночитаемом виде
- Найти место, куда Python устанавливает пакеты (dist-packages, site-packages)
Фиксированное количество знаков после запятой в Python
Вот так можно указать количество знаков после запятой при выводе:
a = [1000, 2.4, 2.23456754323456, 2754.344] for i in a: print('%.3f' % i) # 3 знака после запятой
1000.000 2.400 2.235 2754.344
Отслеживать
ответ дан 4 апр 2017 в 18:55
Кирилл Малышев Кирилл Малышев
10.8k 1 1 золотой знак 19 19 серебряных знаков 34 34 бронзовых знака
а чем запись print(‘%.3f’ % i) лучше(хуже) записи x = float(‘<:.3f>‘.format(x)) ?
12 янв 2019 в 13:56
@Rashid-s, рекомендуется в Python 3 использовать format. stackoverflow.com/questions/12382719/…
12 янв 2019 в 14:04
Мне кажется что вы слегка усложняете. Есть чудесная функция round(), в которую в можете передать число, а через запятую передать количество знаков после. Так как всё равно там будет округление
d = round(3.14, 1) print(d) # 3.1
Отслеживать
ответ дан 23 авг 2020 в 13:01
41 2 2 бронзовых знака
Вы пробовали тестировать ваше решение на примерах из вопроса?
23 авг 2020 в 13:12
Почему вы считаете, что ТС что-то услажняет? round (123.000001, 3) # 123.0 , но ожидаемый результат другой. Он является нескромным желанием? Если да, то почему?
23 авг 2020 в 13:28
def toFixed(f: float, n=0): a, b = str(f).split('.') return '<>.<><>'.format(a, b[:n], '0'*(n-len(b))) f = 7.123 print(toFixed(f, 10)) # 7.1230000000 print(toFixed(f, 2)) # 7.12
Отслеживать
ответ дан 5 апр 2017 в 8:50
vadim vaduxa vadim vaduxa
8,897 14 14 серебряных знаков 24 24 бронзовых знака
Я для этого использую встроенный модуль. Понятно, что он возвращает Decimal, но я потом обратно преобразую во float.
from decimal import Decimal number = Decimal('0.424242') number = number.quantize(Decimal('1.000')) number = float(number) # возвращает true, т.к. оба типа данных теперь float print( 0.424 == number )
Отслеживать
ответ дан 11 апр 2020 в 13:23
Nick Alexander Nick Alexander
если нужно не округлить, а именно обрезать знаки после запятой n = float(input())
print(int(n * 1000) / 1000)
print(n * 1000 //1 /1000)
a=input() print(float(a[:5])) #если заранее известно количество знаков
Можно ли в Python во float отбросить k знаков после запятой?
Здравствуйте, вопрос следующий.
Допустим, есть число 17.212123445.
А нужно записать в память только первую цифру после запятой. Каким образом сделать это при помощи вещественных и целочисленных операций?
- Вопрос задан более трёх лет назад
- 154532 просмотра
1 комментарий
Простой 1 комментарий
Попробуйте через ф-ию round(укажите сколько значков после запятой надо вывести)
>>>a=5.4323321
>>>a.__round__(2)
5.43
>>>a
5.4323321
>>>a.__round__(4)
5.4323
Решения вопроса 1
ненавижу javascript
>>> a=13.946 >>> print(a) 13.946 >>> print("%.2f" % a) 13.95
Ответ написан более трёх лет назад
Нравится 15 10 комментариев
Timebird @Timebird Автор вопроса
Не совсем, тем не менее, спасибо за ответ, это я некорректно вопрос сформулировал, видимо.
Нужно не выводить на печать последние две цифры, а хранить в памяти число с двумя последними цифрами
ну не вопрос допишите b = float(«%.2f» % a)
Timebird @Timebird Автор вопроса
Спасибо, работает. 🙂
Timebird: Ты только не делай так. Для таких случаев есть Decimal.
Roman Kitaev: это норм способ, decimal тянуть для такой задачи оверхед)
Михаил: Ты не знаешь ведь задачу) Вдруг, он там деньги считает?
О_о вместо того чтоб воспользоваться хотя бы функцией round для округления до нужной точности, вы серьёзно предлагаете сначала преобразовать в строку а потом обратно в число?
Roman Kitaev: тогда мой вариант может стать причиной того что баланс не сойдется))
Артём Клименко: да мне похеру, я могу и scipy зафигачить чтоб число округлить, и да, я предлогаю именно это, потому что это самый что ни на есть стандартнейший способ, быстро сделать то что в ввопросе описано, и при этом следующий прогер который будет это читать сразу поймет о чем речь. а не будет ебсти себе мозг чо там у нас раунд возвращает, да и приведение в строку и обрато способ куда шустрей по ресурсам)
Михаил: round — стандартная bult-in функция, существующая для выполнения конкретной задачи, именно она и является стандартным способом, впрочем, таки да, вы не обязаны со мной соглашаться, но указанный вами способ вызывает у меня стойкое чувство жжения в районе поясницы.
З.Ы. if len(str(bool(a))) == 4: