Как сделать красивый вывод в python
Перейти к содержимому

Как сделать красивый вывод в python

  • автор:

Форматирование строк

Часто форматирование строк связано с их выводом на экран. Однако следует помнить, что на вывод передается уже сформированная строка. Создание строки, то есть вставка в нее данных в заданных форматах, является отдельной операцией. Готовая строка может быть, например, присвоена переменной, а не выводиться сразу на экран.

% — оператор форматирования строки

Оператор % по отношению к строкам выполняет операцию форматирования и вставки таким образом, что объект, стоящий справа от него, встраивается согласно определенным правилам в строку слева от него:

Такой способ форматирования считается старым потому, что заимствован из функции 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

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

import matplotlib.pyplot as plt import numpy as np import scipy as sc import sympy import random from sympy import * x = symbols('x') Ratio=random.randint(-30,30)*x**2+random.randint(-30,30)*x+random.randint(-30,30) plt.text(0.01, 0.8, Ratio, fontsize=9) fig = plt.gca() fig.axes.get_xaxis().set_visible(False) fig.axes.get_yaxis().set_visible(False) plt.savefig('filename0001.png') 

Отслеживать

12.5k 7 7 золотых знаков 18 18 серебряных знаков 48 48 бронзовых знаков

задан 6 мар 2021 в 18:07

Артем Черемухин Артем Черемухин

21 2 2 бронзовых знака

Функция всегда квадратичная или может быть что-то более сложное?

6 мар 2021 в 18:27

ru.stackoverflow.com/questions/1080034 отвечает на ваш вопрос?

6 мар 2021 в 18:30

Собственно, я брал код оттуда, но у меня иной вывод, некрасивый. Функции будут более сложными, в основном показательными, с дробями и корнями в степени

7 мар 2021 в 5:33

matplotlib или внешний сервис с поддержкой LaTex ru.stackoverflow.com/a/1242076/420098

Красивый Вывод!

Красивый вывод
ans= x= l=» while True: n =input("’yes’ чтобы прекратить:") if n == ‘yes’: .

Список: сложение двух списков, их рандомная пересортировка и красивый вывод
Здравствуйте! Огромное спасибо за столь быструю помощь с предыдущим вопросом.

Красивый калькулятор
Хелпаните пилз!! Не робит прога с layout (коды снизу), кнопки не реагируют, ничего не выдаётся(((.

Красивый калькулятор
С помощью Layout сделайте красивый калькулятор, настройте все кнопки и поле для отображения.

87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
Помогаю со студенческими работами здесь

Красивый вывод матриц
Как сделать что бы матрицы красиво выводились? #include <iostream> #include<cmath> #define n 5.

Красивый вывод структуры
Здравствуйте, хотелось бы узнать, можно ли избежать такого вывода текста? (вложение) Пытался.

Красивый вывод формулы
Как красиво вывести формулу, подставив туда значения, которые ввел пользователь? Какой-блок.

Красивый вывод в ListBox
Здравствуйте, столкнулся со следующей проблемой: Вывожу с цикла значения(0,1). Нужен вывод в ряд.

Реализовать красивый вывод результатов
Помогите с оптимизацией кода. Хочу красиво оформить задачу. Product: id, Наименование, UPC.

Красивый вывод результатов поиска
Привет всем, Я к сожалению не знаю терминалогии и потому не могу найти ничего в поиске.

Хитрые приёмы на Python

В этой статье собраны удобные приёмы, которые вполне могут упростить написание кода на Python. Всем начинающим рекомендуется к прочтению.

Обложка поста Хитрые приёмы на Python

В этой статье собраны удобные приёмы, которые вполне могут упростить жизнь всем Python-программистам. Итак, не будем терять времени.

Перечисление

i = 0 for item in iterable: print i, item i += 1 

Можно сделать так:

for i, item in enumerate(iterable): print i, item 

В enumerate можно передавать и второй аргумент. Вот пример:

>>> list(enumerate('abc')) [(0, 'a'), (1, 'b'), (2, 'c')] >>> list(enumerate('abc', 1)) [(1, 'a'), (2, 'b'), (3, 'c')] 

Абстракция словарей/множеств

С абстракциями списков (list comprehension) вы скорее всего сталкивались, но вот с абстракциями словарей/множеств (dict/set comprehension) — вряд ли. Они просты в использовании и так же эффективны. Вот пример:

my_dict = my_set = # Отличие только в двоеточии. 

Деление с плавающей запятой

При делении целых чисел в Python результат будет целым, даже если на самом деле он был дробным. Чтобы получить корректный ответ, приходится делать что-то подобное:

result = 1.0/2 

Но у этой проблемы есть и другое решение:

>>> from __future__ import division >>> result = 1/2 >>> print(result) 0.5 

Вуаля! И не нужно дописывать .0 . Стоит отметить, что этот приём относится только к Python 2 — в третьей версии языка всё работает как нужно по умолчанию.

Простой сервер

Если нужно быстро и легко расшарить файлы из директории, то вот простой способ:

# Python 2 python -m SimpleHTTPServer # Python 3 python3 -m http.server 

Эта команда запустит сервер.

Вычисление выражений Python

Вы наверняка знакомы с eval , но знаете ли вы о literal_eval ? Вряд ли. Для безопасного исполнения выражений, содержащих исключительно литералы, вы можете делать так:

import ast expr = "[1, 2, 3]" my_list = ast.literal_eval(expr) 
expr = "[1, 2, 3]" my_list = eval(expr) 

Между прочим, эта фича находится в языке уже давно.

Профилирование скрипта

Вы можете с лёгкостью профилировать скрипт, запустив его следующей командой:

python -m cProfile my_script.py 

Интроспекция объектов

Вы можете изучать объекты Python при помощи команды dir() . Простой пример:

>>> foo = [1, 2, 3, 4] >>> dir(foo) ['__add__', '__class__', '__contains__', '__delattr__', '__delitem__', '__delslice__', . , 'extend', 'index', 'insert', 'pop', 'remove', 'reverse', 'sort'] 

Отладочные скрипты

Вы можете задавать точки останова (breakpoint) при помощи модуля pdb :

import pdb pdb.set_trace() 

Чтобы задать точку останова в любом месте скрипта, напишите там команду pdb.set_trace() . В pdb есть ещё несколько интересных штучек, описанных в документации.

Упрощение конструкций с if

Если вам нужно проверить несколько значений, сделайте так:

if n in [1,4,5,6]: 
if n==1 or n==4 or n==5 or n==6: 

Разворачивание списка/строки

Быстро развернуть список можно следующим образом:

>>> a = [1,2,3,4] >>> a[::-1] [4, 3, 2, 1] # Это создаёт новый развёрнутый список. # Развернуть имеющий список: a.reverse() 

То же самое можно сделать и со строкой:

>>> foo = "yasoob" >>> foo[::-1] 'boosay' 

Красивый вывод

Вы можете красиво выводить на экран словари и списки вот так:

from pprint import pprint pprint(my_dict) 

Нагляднее это, конечно, при работе со словарями. Кроме того, так же можно выводить информацию из JSON-файлов:

cat file.json | python -m json.tool 

Тернарный оператор

Тернарный оператор — это сокращённая форма записи условного выражения if-else. Вот пример использования:

[on_true] if [expression] else [on_false] x, y = 50, 25 small = x if x < y else y

Если вы знаете другие полезные приёмы, делитесь ими в комментариях!

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *