Тридцать шестой урок курса по Python и конец модуля про отчёт. Четыре шага в одном `main()`, запись через временный файл, повтор без последствий и код возврата; `--dry-run` добавляется в задании. И правило, ради которого всё: упавший источник оставляет вчерашний отчёт, а не стирает его.
Тридцать пятый урок курса по Python. `1234567.891` и `1 234 567,89` — одно число и два разных отчёта. Разбираем формат-строки, разделители по-нашему, `round`, который округляет к чётному, `Decimal` для денег и сумму округлённых, которая не равна округлённой сумме.
Тридцать четвёртый урок курса по Python. Собираем HTML из данных: шаблон вместо склейки строк, `html.escape` для всего, что пришло из таблицы, картинка внутри файла — и страница, которая проверяет саму себя. Один файл, который открывается везде и печатается в PDF.
Тридцать третий урок курса по Python. Те же два числа: от нуля столбик выше в 1.31 раза, с осью от восьми — в 4.86. Тот же отрезок линии: 14° на широком листе и 73° на узком. Проценты против процентных пунктов, выбор куска ряда — и график, который проверяет сам себя.
Тридцать второй урок курса по Python. Рисуем ряд из прошлого урока: лист и оси, линия, подписи, сетка, легенда — и сохранение в файл без единого окна на экране. Плюс три вещи, которые ломают график у всех: `Agg`, порядок «сначала рисуем, потом сохраняем» и незакрытая фигура.
Тридцать первый урок курса по Python. Индекс из дат умеет то, чего не умеет список: `asfreq` показывает дни, которых нет, `resample` складывает дни в недели, `rolling` сглаживает. И измеренная цена сглаживания: размах падает вдвое, а день настоящего пика исчезает из ряда.