Документы по шаблону · Шаг 3 из 4
Заполнить документ
Строка проверена, пора делать договор. Деньги в договоре пишут по-русски: «25 300,00», с пробелами между тысячами и запятой перед копейками, — а в таблице они лежат как придётся: 25300, 2,675, 1 234 567,8. Копейку в договоре никто не простит.
Что сделать
Подставьте значения строки в шаблон; поля, имя которых начинается с summa, запишите деньгами: «25 300,00».
Что приходит
shablon— текст шаблона с полями$имяи${имя}, по правилам шага 1stroka— строка таблицы словарём «столбец → значение»
Что вернуть
Готовый текст документа строкой; незаполненные поля — ValueError «не заполнено: data, summa», сумма не число — ValueError.
Допишите функцию zapolnit в редакторе справа.
Результат верните через return — то, что
напечатано, на проверку не влияет.
В проекте
Программа зовёт zapolnit на каждую годную строку и записывает вернувшийся текст в файл; имя файла придумает шаг 4. Текст вашей ошибки она показывает человеку: «Строка 7 пропущена: …».
Шаблон «Договор № $nomer. $fio обязуется оплатить $summa руб.» и строка с номером А-17, ФИО « Иванов И. И. » и суммой 25300 дают «Договор № А-17. Иванов И. И. обязуется оплатить 25 300,00 руб.»: пробелы по краям значения убраны, сумма — деньгами.
shablon = "Договор № $nomer. $fio обязуется оплатить $summa руб."
stroka = {"nomer": "А-17", "fio": " Иванов И. И. ", "summa": "25300", "telefon": "+7 900"}
zapolnit(shablon, stroka)
'Договор № А-17. Иванов И. И. обязуется оплатить 25 300,00 руб.'
- Значение берётся из строки по имени поля, пробелы по краям убираются. Лишние столбцы строки не мешают.
- Незаполненные поля. Поле, которого нет в строке, или со значением
None,"", из одних пробелов — не заполнено. Если таких полей хоть одно —ValueErrorс текстомне заполнено:и имена через запятую с пробелом, в порядке первого появления в шаблоне:не заполнено: data, summa. Это проверяется раньше сумм. - Деньги. Значение поля, чьё имя начинается с
summa(summa,summa_itogo), — число: пробелы между цифрами (обычные и неразрывные) убираются, запятая или точка отделяет дробную часть. Записывается до копеек, половина копейки — вверх (2,675→2,68,999,995→1 000,00), тысячи разделены пробелом, копейки — после запятой:1 234 567,80. Не число или меньше нуля —ValueError, и в тексте ошибки — само значение в кавычках «ёлочках». - Остальные поля подставляются как есть, даже если похожи на число: номер договора
1000так и остаётся1000. - Доллар без имени (
100$,$5) и$$ведут себя, как в шаге 1: первый остаётся как есть, второй даёт один знак$. Значение, похожее на поле ("$fio"), подставляется как текст и второй раз не раскрывается.
Обсуждение
Вопросов пока нет.
Войдите, чтобы спросить.