From 08ad4931bacd0a51c9b472fea537bf9cf9b71a04 Mon Sep 17 00:00:00 2001 From: Sergey Lemeshevsky Date: Wed, 18 Mar 2020 23:12:27 +0300 Subject: [PATCH] =?UTF-8?q?=D0=94=D0=BE=D0=B1=D0=B0=D0=B2=D0=BB=D0=B5?= =?UTF-8?q?=D0=BD=D0=B0=20=D0=B3=D0=BB=D0=B0=D0=B2=D0=B0=20=D0=BF=D0=BE=20?= =?UTF-8?q?=D1=83=D0=BF=D1=80=D0=B0=D0=B2=D0=BB=D1=8F=D1=8E=D1=89=D0=B8?= =?UTF-8?q?=D0=BC=20=D1=81=D1=82=D1=80=D1=83=D0=BA=D1=82=D1=83=D1=80=D0=B0?= =?UTF-8?q?=D0=BC?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- control.ipynb | 1507 ++++++++++++++++++++++++++++++++++++ fig-control/tryext_1.png | Bin 0 -> 122054 bytes src-control/digit_names.py | 33 + 3 files changed, 1540 insertions(+) create mode 100644 control.ipynb create mode 100644 fig-control/tryext_1.png create mode 100755 src-control/digit_names.py diff --git a/control.ipynb b/control.ipynb new file mode 100644 index 0000000..8af4885 --- /dev/null +++ b/control.ipynb @@ -0,0 +1,1507 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "\n", + "# Управляющие структуры и функции\n", + "\n", + " \n", + "**С.В. Лемешевский** (email: `sergey.lemeshevsky@gmail.com`), Институт математики НАН Беларуси\n", + "\n", + "Date: **Mar 18, 2020**\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "Рассматриваться управляющие структуры языка Python: условные\n", + "инструкции и циклы, инструкции обработки исключительных ситуаций.\n", + "Кроме того рассматривается создание собственных функций, и здесь будет\n", + "подробно рассматриваться чрезвычайно гибкий механизм работы с\n", + "аргументами функций." + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "# Управляющие структуры\n", + "
\n", + "\n", + "В языке Python условное ветвление реализуется с помощью инструкции\n", + "`if`, а циклическая обработка – с помощью инструкций `while` и `for\n", + "... in`. В языке Python имеется также такая конструкция, как условное\n", + "выражение – вариант инструкции `if`, аналог трехместного оператора\n", + "(`?:`), имеющегося в C-подобных языках." + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Условное ветвление\n", + "
\n", + "\n", + "Общий синтаксис инструкции условного ветвления в языке Python имеет\n", + "следующий вид:" + ] + }, + { + "cell_type": "code", + "execution_count": 1, + "metadata": { + "collapsed": false, + "jupyter": { + "outputs_hidden": false + } + }, + "outputs": [], + "source": [ + "if boolean_expression1:\n", + " suite1\n", + "elif boolean_expression2:\n", + " suite2\n", + "...\n", + "elif boolean_expressionN:\n", + " suiteN\n", + "else:\n", + " else_suite" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Инструкция может содержать ноль или более предложений\n", + "`elif`. Заключительное предложение `else` также является\n", + "необязательным. Если необходимо предусмотреть ветку для какого-то\n", + "особого случая, который не требует никакой обработки, в качестве блока\n", + "кода этой ветки можно использовать инструкцию `pass` (она ничего не\n", + "делает и просто является инструкцией-заполнителем, используемой там,\n", + "где должна находиться хотя бы одна инструкция).\n", + "\n", + "В некоторых случаях можно сократить инструкцию `if ... else` до\n", + "единственного условного выражения. Ниже приводится синтаксис условных\n", + "выражений:" + ] + }, + { + "cell_type": "code", + "execution_count": 2, + "metadata": { + "collapsed": false, + "jupyter": { + "outputs_hidden": false + } + }, + "outputs": [], + "source": [ + "expression1 if boolean_expression else expression2" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Если логическое выражение `boolean_expression` возвращает значение\n", + "`True`, результатом всего условного выражения будет результат\n", + "выражения `expression1`, в противном случае – результат выражения\n", + "`expression2`.\n", + "\n", + "\n", + "> **Об использовании скобок.**\n", + ">\n", + "> Предположим, что нам необходимо записать в переменную `width` значение\n", + "> 100 и прибавить к нему 10, если переменная margin имеет значение\n", + "> `True`. Мы могли бы написать такое выражение:\n", + ">" + ] + }, + { + "cell_type": "code", + "execution_count": 3, + "metadata": { + "collapsed": false, + "jupyter": { + "outputs_hidden": false + } + }, + "outputs": [], + "source": [ + "width = 100 + 10 if margin else 0\t# ОШИБКА!" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "> \n", + "> Особенно неприятно, что эта строка программного кода работает\n", + "> правильно, когда переменная `margin` имеет значение `True`, записывая\n", + "> значение 110 в переменную width. Но когда переменная `margin` имеет\n", + "> значение `False`, в переменную `width` вместо 100 будет записано\n", + "> значение 0. Это происходит потому, что интерпретатор Python\n", + "> воспринимает выражение 100 + 10 как часть `expression1` условного\n", + "> выражения. Решить эту проблему можно с помощью круглых скобок:" + ] + }, + { + "cell_type": "code", + "execution_count": 4, + "metadata": { + "collapsed": false, + "jupyter": { + "outputs_hidden": false + } + }, + "outputs": [], + "source": [ + "width = 100 + (10 if margin else 0)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "> \n", + "> Кроме того, круглые скобки делают программный код более понятным\n", + "> для человека.\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "Условные выражения могут использоваться для видоизменения сообщений,\n", + "выводимых для пользователя. Например, при выводе числа обработанных\n", + "файлов, вместо того чтобы печатать «0 файл(ов)», «1 файл(ов)» или\n", + "что-то подобное, можно было бы использовать пару условных выражений:" + ] + }, + { + "cell_type": "code", + "execution_count": 1, + "metadata": { + "collapsed": false, + "jupyter": { + "outputs_hidden": false + } + }, + "outputs": [ + { + "ename": "NameError", + "evalue": "name 'count' is not defined", + "output_type": "error", + "traceback": [ + "\u001b[0;31m---------------------------------------------------------------------------\u001b[0m", + "\u001b[0;31mNameError\u001b[0m Traceback (most recent call last)", + "\u001b[0;32m\u001b[0m in \u001b[0;36m\u001b[0;34m\u001b[0m\n\u001b[0;32m----> 1\u001b[0;31m \u001b[0mprint\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m\"{0} файл{1}\"\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mformat\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mcount\u001b[0m \u001b[0;32mif\u001b[0m \u001b[0mcount\u001b[0m \u001b[0;34m!=\u001b[0m \u001b[0;36m0\u001b[0m \u001b[0;32melse\u001b[0m \u001b[0;34m\"нет\"\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0;34m(\u001b[0m\u001b[0;34m\"ов\"\u001b[0m \u001b[0;32mif\u001b[0m \u001b[0mcount\u001b[0m \u001b[0;34m%\u001b[0m \u001b[0;36m10\u001b[0m \u001b[0;32mnot\u001b[0m \u001b[0;32min\u001b[0m \u001b[0;34m[\u001b[0m\u001b[0;36m1\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0;36m2\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0;36m3\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0;36m4\u001b[0m\u001b[0;34m]\u001b[0m \u001b[0;32melse\u001b[0m \u001b[0;34m(\u001b[0m\u001b[0;34m\"a\"\u001b[0m \u001b[0;32mif\u001b[0m \u001b[0mcount\u001b[0m \u001b[0;34m%\u001b[0m \u001b[0;36m10\u001b[0m \u001b[0;34m!=\u001b[0m \u001b[0;36m1\u001b[0m \u001b[0;32melse\u001b[0m \u001b[0;34m\"\"\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m", + "\u001b[0;31mNameError\u001b[0m: name 'count' is not defined" + ] + } + ], + "source": [ + "print(\"{0} файл{1}\".format((count if count != 0 else \"нет\"), (\"ов\" if count % 10 not in [1, 2, 3, 4] else (\"a\" if count % 10 != 1 else \"\"))))" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Циклы\n", + "
\n", + "\n", + "В языке Python есть две инструкции циклов – `while` и `for ... in`." + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### Циклы `while`\n", + "\n", + "
\n", + "\n", + "Ниже приводится полный синтаксис цикла `while`:" + ] + }, + { + "cell_type": "code", + "execution_count": 6, + "metadata": { + "collapsed": false, + "jupyter": { + "outputs_hidden": false + } + }, + "outputs": [], + "source": [ + "while boolean_expression:\n", + " while_suite\n", + "else:\n", + " else_suite" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Предложение `else` является необязательным. До тех пор, пока выражение\n", + "`boolean_expression` возвращает значение `True`, в цикле будет\n", + "выполняться блок `while_suite`. Если выражение `boolean_expression`\n", + "вернет значение `False`, цикл завершится, и при наличии предложения `else`\n", + "будет выполнен блок `else_suite`. Если внутри блока `while_suite`\n", + "выполняется инструкция `continue`, то управление немедленно передается\n", + "в начало цикла и выражение `boolean_expression` вычисляется снова. \n", + "Если цикл не завершается нормально, блок предложения `else` не\n", + "выполняется.\n", + "\n", + "Необязательное предложение `else` имеет несколько сбивающее с толку\n", + "название, поскольку оно выполняется во всех в случаях, когда цикл\n", + "нормально завершается. Если цикл завершается в результате выполнения\n", + "инструкции `break` или `return`, когда цикл находится внутри функции\n", + "или метода, или в результате исключения, то блок `else_suite` \n", + "предложения `else` не выполняется. (При возникновении исключительной\n", + "ситуации интерпретатор Python пропускает предложение `else` и пытается\n", + "отыскать подходящий обработчик исключения, о чем будет рассказываться\n", + "в следующем разделе.) Плюсом такой реализации является одинаковое\n", + "поведение предложения `else` в циклах `while`, в циклах `for ... in` и\n", + "в блоках `try ... except`. \n", + "\n", + "Рассмотрим пример, демонстрирующий предложение `else` в действии.\n", + "Методы `str.index()` и `list.index()` возвращают индекс заданной\n", + "подстроки или элемента или возбуждают исключение `ValueError`, если\n", + "подстрока или элемент не найдены. Метод `str.find()` делает то же\n", + "самое, но в случае неудачи он не возбуждает исключение, а возвращает\n", + "значение `-1`. Для списков не существует эквивалентного метода, но \n", + "при желании мы могли бы создать такую функцию, использующую\n", + "цикл `while`:" + ] + }, + { + "cell_type": "code", + "execution_count": 2, + "metadata": { + "collapsed": false, + "jupyter": { + "outputs_hidden": false + } + }, + "outputs": [], + "source": [ + "def list_find(lst, target):\n", + " index = 0\n", + " while index < len(lst):\n", + " if lst[index] == target:\n", + " break\n", + " index += 1\n", + " else:\n", + " index = -1\n", + " return index" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "Эта функция просматривает список в поисках заданного элемента\n", + "`target`. Если искомый элемент будет найден, инструкция `break`\n", + "завершит цикл и вызывающей программе будет возвращен соответствующий\n", + "индекс. Если искомый элемент не будет найден, цикл достигнет конца \n", + "списка и завершится обычным способом. В случае нормального завер-\n", + "шения цикла будет выполнен блок в предложении `else`, индекс получит\n", + "значение `-1` и будет возвращен вызывающей программе." + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### Циклы `for`\n", + "
\n", + "\n", + "Подобно циклу `while`, полный синтаксис цикла `for ... in` также\n", + "включает необязательное предложение `else`:" + ] + }, + { + "cell_type": "code", + "execution_count": 8, + "metadata": { + "collapsed": false, + "jupyter": { + "outputs_hidden": false + } + }, + "outputs": [], + "source": [ + "for expression in iterable:\n", + " for_suite\n", + "else:\n", + " else_suite" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "В качестве выражения `expression` обычно используется либо\n", + "единственная переменная, либо последовательность переменных, как\n", + "правило, в форме кортежа. Если в качестве выражения `expression`\n", + "используется кортеж или список, каждый элемент итерируемого объекта\n", + "`iterable` распаковывается в элементы `expression`.\n", + "\n", + "Если внутри блока `for_suite` встретится инструкция `continue`,\n", + "управление будет немедленно передано в начало цикла и будет начата\n", + "новая итерация. Если цикл завершается по выполнении всех итераций и в\n", + "цикле присутствует предложение `else`, выполняется блок\n", + "`else_suite`. Если выполнение цикла прерывается принудительно\n", + "(инструкцией `break` или `return`), управление немедленно передается\n", + "первой инструкции, следующей за циклом, а дополнительное предложение\n", + "`else` при этом пропускается. Точно так же, когда возбуждается\n", + "исключение, интерпретатор Python пропускает предложение `else` и\n", + "пытается отыскать подходящий обработчик исключения (о чем будет\n", + "рассказываться в следующем разделе).\n", + "\n", + "Ниже приводится версия функции `list_find()`, реализованная на базе\n", + "цикла `for ... in`, которая так же, как и версия на базе цикла\n", + "`while`, демонстрирует предложение `else` в действии:" + ] + }, + { + "cell_type": "code", + "execution_count": 5, + "metadata": { + "collapsed": false, + "jupyter": { + "outputs_hidden": false + } + }, + "outputs": [ + { + "ename": "IndentationError", + "evalue": "expected an indented block (, line 4)", + "output_type": "error", + "traceback": [ + "\u001b[0;36m File \u001b[0;32m\"\"\u001b[0;36m, line \u001b[0;32m4\u001b[0m\n\u001b[0;31m break\u001b[0m\n\u001b[0m ^\u001b[0m\n\u001b[0;31mIndentationError\u001b[0m\u001b[0;31m:\u001b[0m expected an indented block\n" + ] + } + ], + "source": [ + "def list_find(lst, target):\n", + " for index, x in enumerate(lst):\n", + " if x == target:\n", + " break\n", + " else:\n", + " index = -1\n", + " return index" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Как видно из этого фрагмента, переменные, созданные в выражении\n", + "`expression` цикла `for ... in`, продолжают существовать после\n", + "завершения цикла. Как и любые локальные переменные, они прекращают\n", + "свое существование после выхода из области видимости, включающей их.\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "# Обработка исключений\n", + "
\n", + "\n", + "Об ошибках и исключительных ситуациях интерпретатор Python сообщает\n", + "посредством возбуждения исключений, хотя в некоторых библиотеках\n", + "сторонних разработчиков еще используются устаревшие приемы, такие как\n", + "возврат «ошибочного» значения." + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Перехват и возбуждение исключений\n", + "
\n", + "\n", + "Перехватывать исключения можно с помощью блоков `try ... except`,\n", + "которые имеют следующий синтаксис:" + ] + }, + { + "cell_type": "code", + "execution_count": 10, + "metadata": { + "collapsed": false, + "jupyter": { + "outputs_hidden": false + } + }, + "outputs": [], + "source": [ + "try:\n", + " try_suite\n", + "except exception_group1 as variable1:\n", + " except_suite1\n", + "...\n", + "except exception_groupN as variableN:\n", + " except_suiteN\n", + "else:\n", + " else_suite\n", + "finally:\n", + " finally_suite" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Эта конструкция должна содержать хотя бы один блок except, а блоки\n", + "`else` и `finally` являются необязательными. Блок `else_suite`\n", + "выполняется, только если блок `try_suite` завершается обычным\n", + "способом, и не выполняется в случае возникновения исключения. Если\n", + "блок `finally` присутствует, он выполняется всегда и в последнюю\n", + "очередь. \n", + "\n", + "Каждая группа `exception_group` в предложении except может быть\n", + "единственным исключением или кортежем исключений в круглых\n", + "скобках. Часть `as variable` в каждой группе является\n", + "необязательной. В случае ее использования в переменную variable\n", + "записывается ссылка на исключение, которое возникло, благодаря этому к\n", + "нему можно будет обратиться в блоке `except_suite`.\n", + "\n", + "Если исключение возникнет во время выполнения блока `try_suite`,\n", + "интерпретатор поочередно проверит каждое предложение `except`. Если \n", + "будет найдена соответствующая группа `exception_group`, будет выполнен\n", + "соответствующий блок `except_suite`. Соответствующей считается группа,\n", + "в которой присутствует исключение того же типа, что и возникшее\n", + "исключение, или возникшее исключение является подклассом одного из\n", + "исключений, перечисленных в группе.\n", + "\n", + "На рис. [control:except:fig:1](#control:except:fig:1) демонстрируется порядок выполнения\n", + "типичной конструкции `try ... except ... finally`. \n", + "\n", + "\n", + "\n", + "
\n", + "![Порядок выполнения конструкции `try ... except ... finally`](fig-control/tryext_1.png)\n", + "\n", + "\n", + "Ниже приводится окончательная версия функции `list_find()`, на этот\n", + "раз она использует механизм обработки исключения:" + ] + }, + { + "cell_type": "code", + "execution_count": 6, + "metadata": { + "collapsed": false, + "jupyter": { + "outputs_hidden": false + } + }, + "outputs": [], + "source": [ + "def list_find(lst, target):\n", + " try:\n", + " index = lst.index(target)\n", + " except ValueError:\n", + " index = -1\n", + " return index" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Здесь мы использовали конструкцию `try ... except` для преобразования\n", + "исключения в возвращаемое значение. Аналогичный подход можно\n", + "использовать для перехвата одних исключений и возбуждения других – с\n", + "этим приемом мы познакомимся очень скоро. " + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "# Возбуждение исключений\n", + "
\n", + "\n", + "Исключения представляют собой удобное средство управления потоком\n", + "выполнения. Мы можем воспользоваться этим, используя либо встроенные\n", + "исключения, либо создавая свои собственные и возбуждая нужные нам,\n", + "когда это необходимо. Возбудить исключение можно одним из двух\n", + "способов:" + ] + }, + { + "cell_type": "code", + "execution_count": 7, + "metadata": { + "collapsed": false, + "jupyter": { + "outputs_hidden": false + } + }, + "outputs": [ + { + "ename": "NameError", + "evalue": "name 'exception' is not defined", + "output_type": "error", + "traceback": [ + "\u001b[0;31m---------------------------------------------------------------------------\u001b[0m", + "\u001b[0;31mNameError\u001b[0m Traceback (most recent call last)", + "\u001b[0;32m\u001b[0m in \u001b[0;36m\u001b[0;34m\u001b[0m\n\u001b[0;32m----> 1\u001b[0;31m \u001b[0;32mraise\u001b[0m \u001b[0mexception\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0margs\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 2\u001b[0m \u001b[0;32mraise\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n", + "\u001b[0;31mNameError\u001b[0m: name 'exception' is not defined" + ] + } + ], + "source": [ + "raise exception(args)\n", + "raise" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "В первом случае, то есть когда явно указывается возбуждаемое\n", + "исключение, оно должно быть либо встроенным, либо нашим собственным,\n", + "наследующим класс `Exception`. Если исключению в виде аргумента\n", + "передается некоторый текст, этот текст будет выведен на экран, если\n", + "исключение не будет обработано программой. Во втором случае, то есть \n", + "когда исключение не указывается, инструкция `raise` повторно возбудит\n", + "текущее активное исключение, а в случае отсутствия активного\n", + "исключения будет возбуждено исключение `TypeError`. \n", + "\n", + "\n", + "\n", + "\n", + "\n", + "" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "# Собственные функции\n", + "
\n", + "\n", + "Функции представляют собой средство, дающее возможность упаковывать и\n", + "параметризовать функциональность. В языке Python можно создать четыре\n", + "типа функций: глобальные функции, локальные функции, лямбда-функции и\n", + "методы. \n", + "\n", + "Все функции, которые мы создавали до сих пор, являются *глобальными*\n", + "функциями. Глобальные объекты (включая функции) доступны из любой\n", + "точки программного кода в том же модуле (то есть в том же самом файле\n", + "`.py`), которому принадлежит объект. Глобальные объекты доступны\n", + "также и из других модулей, как будет показано в следующей главе.\n", + "\n", + "*Локальные* функции (их еще называют вложенными функциями) –\n", + "это функции, которые объявляются внутри других функций. Эти\n", + "функции видимы только внутри тех функций, где они были объявлены – они\n", + "особенно удобны для создания небольших вспомогательных функций,\n", + "которые нигде больше не используются. \n", + "\n", + "*Лямбда*-функции – это выражения, поэтому они могут создаваться\n", + "непосредственно в месте их использования; они имеют множество\n", + "ограничений по сравнению с обычными функциями. Методы – это те же\n", + "функции, которые ассоциированы с определенным типом данных и могут\n", + "использоваться только в связке с этим типом данных.\n", + "\n", + "Синтаксис создания функции (глобальной или локальной) имеет следующий\n", + "вид:" + ] + }, + { + "cell_type": "code", + "execution_count": 13, + "metadata": { + "collapsed": false, + "jupyter": { + "outputs_hidden": false + } + }, + "outputs": [], + "source": [ + "def functionName(parameters):\n", + " suite" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Параметры `parameters` являются необязательными и при наличии более\n", + "одного параметра записываются как последовательность идентификаторов\n", + "через запятую или в виде последовательности пар `identifier=value`, о\n", + "чем вскоре будет говориться подробнее. Например, ниже приводится\n", + "функция, которая вычисляет площадь треугольника по формуле Герона:" + ] + }, + { + "cell_type": "code", + "execution_count": 14, + "metadata": { + "collapsed": false, + "jupyter": { + "outputs_hidden": false + } + }, + "outputs": [], + "source": [ + "def heron(a, b, c):\n", + " s = (a + b + c) / 2\n", + " return math.sqrt(s * (s - a) * (s - b) * (s - c))" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Внутри функции каждый параметр, `a`, `b` и `c`, инициализируется\n", + "соответствующими значениями, переданными в виде аргументов. При вызове\n", + "функции мы должны указать все аргументы, например, `heron(3, 4, 5)`.\n", + "Если передать слишком мало или слишком много аргументов, будет\n", + "возбуждено исключение `TypeError`. Производя такой вызов, мы \n", + "говорим, что используем позиционные аргументы, потому что каждый\n", + "переданный аргумент становится значением параметра в соответствующей\n", + "позиции. То есть в данном случае при вызове функции параметр `a`\n", + "получит значение `3`, параметр `b` – значение `4` и параметр `с` –\n", + "значение `5`.\n", + "\n", + "Все функции в языке Python возвращают какое-либо значение, хотя\n", + "вполне возможно (и часто так и делается) просто игнорировать это\n", + "значение. Возвращаемое значение может быть единственным значением или\n", + "кортежем значений, а сами значения могут быть коллекциями, \n", + "поэтому практически не существует никаких ограничений на то, что\n", + "могут возвращать функции. Мы можем покинуть функцию в любой\n", + "момент, используя инструкцию `return`. Если инструкция `return`\n", + "используется без аргументов или если мы вообще не используем\n", + "инструкцию `return`, функция будет возвращать значение `None`.\n", + "\n", + "Некоторые функции имеют параметры, для которых может существо-\n", + "вать вполне разумное значение по умолчанию. Например, ниже при-\n", + "водится функция, которая подсчитывает количество алфавитных сим-\n", + "волов в строке; по умолчанию подразумеваются алфавитные символы\n", + "из набора ASCII:" + ] + }, + { + "cell_type": "code", + "execution_count": 8, + "metadata": { + "collapsed": false, + "jupyter": { + "outputs_hidden": false + } + }, + "outputs": [ + { + "ename": "NameError", + "evalue": "name 'string' is not defined", + "output_type": "error", + "traceback": [ + "\u001b[0;31m---------------------------------------------------------------------------\u001b[0m", + "\u001b[0;31mNameError\u001b[0m Traceback (most recent call last)", + "\u001b[0;32m\u001b[0m in \u001b[0;36m\u001b[0;34m\u001b[0m\n\u001b[0;32m----> 1\u001b[0;31m \u001b[0;32mdef\u001b[0m \u001b[0mletter_count\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mtext\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mletters\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0mstring\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mascii_letters\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 2\u001b[0m \u001b[0mletters\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mfrozenset\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mletters\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 3\u001b[0m \u001b[0mcount\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0;36m0\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 4\u001b[0m \u001b[0;32mfor\u001b[0m \u001b[0mchar\u001b[0m \u001b[0;32min\u001b[0m \u001b[0mtext\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 5\u001b[0m \u001b[0;32mif\u001b[0m \u001b[0mchar\u001b[0m \u001b[0;32min\u001b[0m \u001b[0mletters\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n", + "\u001b[0;31mNameError\u001b[0m: name 'string' is not defined" + ] + } + ], + "source": [ + "def letter_count(text, letters=string.ascii_letters):\n", + " letters = frozenset(letters)\n", + " count = 0\n", + " for char in text:\n", + " if char in letters:\n", + " count += 1\n", + " return count" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Здесь при помощи синтаксиса `parameter=default` было определено\n", + "значение по умолчанию для параметра `letters`. Это позволяет вызывать \n", + "функцию `letter_count()` с единственным аргументом, например,\n", + "`letter_count(\"Maggie and Hopey\")`. В этом случае внутри функции\n", + "параметр `letter` будет содержать строку, которая была задана как\n", + "значение по умолчанию. Но за нами сохраняется возможность изменить\n", + "значение по умолчанию, например, указав дополнительный позиционный\n", + "аргумент: `letter_count(\"Maggie and Hopey\", \"aeiouAEIOU\")`, или\n", + "используя именованный аргумент (об именованных аргументах\n", + "рассказывается ниже): `letter_count(\"Maggie and Hopey\", letters=\"aeiouAEIOU\")`. \n", + "\n", + "Синтаксис параметров не позволяет указывать параметры, не имеющие\n", + "значений по умолчанию, после параметров со значениями по умолчанию,\n", + "поэтому такое определение: `def bad(a, b=1, c):`, будет вызывать\n", + "синтаксическую ошибку. С другой стороны, мы не обязаны передавать\n", + "аргументы в том порядке, в каком они указаны в определении функции –\n", + "мы можем использовать именованные аргументы и передавать их в виде\n", + "`name=value`." + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Распаковывание аргументов и параметров\n", + "
\n", + "\n", + "В предыдущей главе мы видели, что для передачи позиционных аргументов\n", + "можно использовать оператор распаковывания последовательностей\n", + "(`*`). Например, если возникает необходимость вычислить площадь\n", + "треугольника, а длины всех его сторон хранятся в списке, то мы могли\n", + "бы вызвать функцию так: `heron(sides[0], sides[1], sides[2])`, или\n", + "просто распаковать список и сделать вызов намного проще:\n", + "`heron(*sides)`. Если элементов в списке (или в другой\n", + "последовательности) больше, чем параметров в функции, мы можем\n", + "воспользоваться операцией извлечения среза, чтобы извлечь нужное число\n", + "аргументов.\n", + "\n", + "Мы можем также использовать оператор распаковывания последовательности\n", + "в списке параметров функции. Это удобно, когда необходимо создать\n", + "функцию, которая может принимать переменное число позиционных\n", + "аргументов. Ниже приводится функция `product()`, которая \n", + "вычисляет произведение своих аргументов:" + ] + }, + { + "cell_type": "code", + "execution_count": 16, + "metadata": { + "collapsed": false, + "jupyter": { + "outputs_hidden": false + } + }, + "outputs": [], + "source": [ + "def product(*args):\n", + " result = 1\n", + " for arg in args:\n", + " result *= arg\n", + " return result" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Эта функция имеет единственный аргумент с именем `args`. Наличие\n", + "символа `*` перед ним означает, что внутри функции параметр `args`\n", + "обретает форму кортежа, значениями элементов которого будут значения\n", + "переданных аргументов. Ниже приводятся несколько примеров вызова\n", + "функции:" + ] + }, + { + "cell_type": "code", + "execution_count": 17, + "metadata": { + "collapsed": false, + "jupyter": { + "outputs_hidden": false + } + }, + "outputs": [], + "source": [ + "product(1, 2, 3, 4) # args == (1, 2, 3, 4); вернет: 24\n", + "product(5, 3, 8) # args == (5, 3, 8); вернет: 120\n", + "product(11) \t # args == (11,); вернет: 11" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Мы можем использовать именованные аргументы вслед за позиционными, как\n", + "в функции, которая приводится ниже, вычисляющей сумму своих\n", + "аргументов, каждый из которых возводится в заданную степень:" + ] + }, + { + "cell_type": "code", + "execution_count": 18, + "metadata": { + "collapsed": false, + "jupyter": { + "outputs_hidden": false + } + }, + "outputs": [], + "source": [ + "def sum_of_powers(*args, power=1):\n", + " result = 0\n", + " for arg in args:\n", + " result += arg ** power\n", + " return result" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Эта функция может вызываться только с позиционными аргументами,\n", + "например: `sum_of_powers(1, 3, 5)`, или как с позиционными, так и с\n", + "именованным аргументами, например: `sum_of_powers(1, 3, 5, power=2)`.\n", + "\n", + "Допускается также использовать символ `*` в качестве самостоятельного\n", + "«параметра». В данном случае он указывает, что после символа `*` не\n", + "может быть других позиционных параметров, однако указание именованных\n", + "аргументов допускается. Ниже приводится модифицированная версия\n", + "функции `heron()`. На этот раз функция принимает точно три позиционных\n", + "аргумента и один необязательный именованный аргумент." + ] + }, + { + "cell_type": "code", + "execution_count": 19, + "metadata": { + "collapsed": false, + "jupyter": { + "outputs_hidden": false + } + }, + "outputs": [], + "source": [ + "def heron2(a, b, c, *, units=\"meters\"):\n", + " s = (a + b + c) / 2\n", + " area = math.sqrt(s * (s - a) * (s - b) * (s - c))\n", + " return \"{0} {1}\".format(area, units)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Ниже приводятся несколько примеров вызовов функции:" + ] + }, + { + "cell_type": "code", + "execution_count": 20, + "metadata": { + "collapsed": false, + "jupyter": { + "outputs_hidden": false + } + }, + "outputs": [], + "source": [ + "heron2(25, 24, 7)\t\t # вернет: '84.0 meters'\n", + "heron2(41, 9, 40, units=\"inches\") # вернет: '180.0 inches'\n", + "heron2(25, 24, 7, \"inches\")\t # ОШИБКА! Возбудит исключение TypeError" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "В третьем вызове мы попытались передать четыре позиционных аргумента,\n", + "но оператор `*` не позволяет этого и вызывает исключение `TypeError`.\n", + "\n", + "Поместив оператор `*` первым в списке параметров, мы тем самым\n", + "полностью запретим использование любых позиционных аргументов и\n", + "вынудим тех, кто будет вызывать ее, использовать именованные\n", + "аргументы. Ниже приводится пример сигнатуры такой (вымышленной)\n", + "функции:" + ] + }, + { + "cell_type": "code", + "execution_count": 21, + "metadata": { + "collapsed": false, + "jupyter": { + "outputs_hidden": false + } + }, + "outputs": [], + "source": [ + "def print_setup(*, paper=\"Letter\", copies=1, color=False):" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Мы можем вызывать функцию `print_setup()` без аргументов, допуская\n", + "использование значений по умолчанию. Или изменить некоторые или\n", + "все значения по умолчанию, например:\n", + "`print_setup(paper=\"A4\", color=True)`. Но если мы попытаемся\n", + "использовать позиционные аргументы, например: `print_setup(\"A4\")`,\n", + "будет возбуждено исключение `TypeError`.\n", + "\n", + "Так же, как мы распаковываем последовательности для заполнения\n", + "позиционных параметров, можно распаковывать и отображения –\n", + "с помощью оператора распаковывания отображений (`**`). Мы можем\n", + "использовать оператор `**`, чтобы передать содержимое словаря в\n", + "функцию `print_setup()`. Например:" + ] + }, + { + "cell_type": "code", + "execution_count": 22, + "metadata": { + "collapsed": false, + "jupyter": { + "outputs_hidden": false + } + }, + "outputs": [], + "source": [ + "options = dict(paper=\"A4\", color=True)\n", + "print_setup(**options)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "В данном случае пары «ключ-значение» словаря `options` будут\n", + "распакованы, и каждое значение будет ассоциировано с параметром, чье \n", + "имя соответствует ключу этого значения. Если в словаре обнаружится\n", + "ключ, не совпадающий ни с одним именем параметра, будет возбуждено\n", + "исключение `TypeError`. Любые аргументы, для которых в словаре не\n", + "найдется соответствующего элемента, получат значение по умолчанию, но\n", + "если такие аргументы не имеют значения по умолчанию, будет возбуждено\n", + "исключение `TypeError`. \n", + "\n", + "Кроме того, имеется возможность использовать оператор распаковывания\n", + "вместе с параметрами в объявлении функции. Это позволяет создавать\n", + "функции, способные принимать любое число именованных аргументов. Ниже\n", + "приводится функция `add_person_details()`, которая принимает номер\n", + "карточки социального страхования и фамилию в виде позиционных\n", + "аргументов, а также произвольное число именованных аргументов:" + ] + }, + { + "cell_type": "code", + "execution_count": 23, + "metadata": { + "collapsed": false, + "jupyter": { + "outputs_hidden": false + } + }, + "outputs": [], + "source": [ + "def add_person_details(ssn, surname, **kwargs):\n", + " print(\"SSN =\", ssn)\n", + " print(\" surname =\", surname)\n", + " for key in sorted(kwargs):\n", + " print(\" {0} = {1}\".format(key, kwargs[key]))" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Эта функция может вызываться как только с двумя позиционными\n", + "аргументами, так и с дополнительной информацией, например:\n", + "`add_person_details(83272171, \"Luther\", forename=\"Lexis\", age=47)`.\n", + "Такая возможность обеспечивает огромную гибкость. Конечно, мы можем\n", + "также одновременно принимать переменное число позиционных аргументов и\n", + "переменное число именованных аргументов:" + ] + }, + { + "cell_type": "code", + "execution_count": 9, + "metadata": { + "collapsed": false, + "jupyter": { + "outputs_hidden": false + } + }, + "outputs": [ + { + "ename": "IndentationError", + "evalue": "expected an indented block (, line 3)", + "output_type": "error", + "traceback": [ + "\u001b[0;36m File \u001b[0;32m\"\"\u001b[0;36m, line \u001b[0;32m3\u001b[0m\n\u001b[0;31m print(\"positional argument {0} = {1}\".format(i, arg))\u001b[0m\n\u001b[0m ^\u001b[0m\n\u001b[0;31mIndentationError\u001b[0m\u001b[0;31m:\u001b[0m expected an indented block\n" + ] + } + ], + "source": [ + "def print_args(*args, **kwargs):\n", + " for i, arg in enumerate(args):\n", + " print(\"positional argument {0} = {1}\".format(i, arg))\n", + " for key in kwargs:\n", + " print(\"keyword argument {0} = {1}\".format(key, kwargs[key]))" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Эта функция просто выводит полученные аргументы. Она может вызываться\n", + "вообще без аргументов или с произвольным числом позиционных и\n", + "именованных аргументов." + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Доступ к переменным в глобальной области видимости\n", + "
\n", + "\n", + "Иногда бывает удобно иметь несколько глобальных переменных, доступных\n", + "из разных функций программы. В этом нет ничего плохого, если речь идет\n", + "о «константах», но в случае переменных – это не самый лучший выход,\n", + "хотя для коротких одноразовых программ это в некоторых случаях можно\n", + "считать допустимым.\n", + "\n", + "Программа [digit_names.py](src-control/digit_names.py) принимает\n", + "необязательный код языка (`en` или `ru`) и число в виде аргументов\n", + "командной строки и выводит названия всех цифр заданного числа. То есть\n", + "если в командной строке программе было передано число `123`, она\n", + "выведет `one two three`. В программе имеется три глобальные\n", + "переменные:" + ] + }, + { + "cell_type": "code", + "execution_count": 25, + "metadata": { + "collapsed": false, + "jupyter": { + "outputs_hidden": false + } + }, + "outputs": [], + "source": [ + "Language = \"en\"\n", + "\n", + "ENGLISH = {0: \"zero\", 1: \"one\", 2: \"two\", 3: \"three\", 4: \"four\",\n", + " 5: \"five\", 6: \"six\", 7: \"seven\", 8: \"eight\", 9: \"nine\"}\n", + "RUSSIAN = {0: \"ноль\", 1: \"один\", 2: \"два\", 3: \"три\", 4: \"четыре\",\n", + " 5: \"пять\", 6: \"шесть\", 7: \"семь\", 8: \"восемь\", 9: \"девять\"}" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Мы следуем соглашению, в соответствии с которым имена переменных,\n", + "играющих роль констант, записываются только символами верхнего\n", + "регистра, и установили английский язык по умолчанию.\n", + "\n", + "В некотором другом месте программы выполняется обращение к переменной\n", + "`Language`, и ее значение используется при выборе соответствующего\n", + "словаря:" + ] + }, + { + "cell_type": "code", + "execution_count": 26, + "metadata": { + "collapsed": false, + "jupyter": { + "outputs_hidden": false + } + }, + "outputs": [], + "source": [ + "def print_digits(digits):\n", + " dictionary = ENGLISH if Language == \"en\" else RUSSIAN\n", + " for digit in digits:\n", + " print(dictionary[int(digit)], end=\" \")\n", + " print()" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Когда интерпретатор Python встречает имя переменной `Language` внутри\n", + "функции, он пытается отыскать его в локальной области видимости (в\n", + "области видимости функции) и не находит. Поэтому он продолжает поиск в\n", + "глобальной области видимости (в области видимости файла `.py`), где и\n", + "обнаруживает его.\n", + "\n", + "Ниже приводится содержимое функции `main()` программы. Она изменяет\n", + "значение переменной `Language` в случае необходимости и вызывает \n", + "функцию `print_digits()` для вывода результата." + ] + }, + { + "cell_type": "code", + "execution_count": 10, + "metadata": { + "collapsed": false, + "jupyter": { + "outputs_hidden": false + } + }, + "outputs": [], + "source": [ + "def main():\n", + " if len(sys.argv) == 1 or sys.argv[1] in {\"-h\", \"--help\"}:\n", + " print(\"usage: {0} [en|ru] number\".format(sys.argv[0]))\n", + " sys.exit()\n", + "\n", + " args = sys.argv[1:]\n", + " if args[0] in {\"en\", \"ru\"}:\n", + " global Language\n", + " Language = args.pop(0)\n", + " print_digits(args.pop(0))" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Обратите внимание на использование инструкции `global` в этой\n", + "функции. Эта инструкция используется для того, чтобы сообщить\n", + "интерпретатору, что данная переменная существует в глобальной области \n", + "видимости (в области видимости файла `.py`) и что операция\n", + "присваивания должна применяться к глобальной переменной; без этой\n", + "инструкции операция присваивания создаст локальную переменную с тем же\n", + "именем.\n", + "\n", + "> **Замечание.**\n", + ">\n", + "> Если не использовать инструкцию `global`, программа сохранит\n", + "> свою работоспособность, но когда интерпретатор встретит переменную\n", + "> `Language` в условной инструкции `if`, он попытается отыскать ее в\n", + "> локальной области видимости (в области видимости функции) и, не\n", + "> обнаружив ее, создаст новую локальную переменную с именем `Language`,\n", + "> оставив глобальную переменную `Language` без изменений. Эта\n", + "> малозаметная ошибка будет проявляться только в случае запуска\n", + "> программы с аргументом `ru`, потому что в этом случае будет создана\n", + "> новая локальная переменная `Language`, в которую будет записано\n", + "> значение `ru`, а глобальная переменная `Language`, которая\n", + "> используется функцией `print_digits()`, по-прежнему будет иметь\n", + "> значение `en`.\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "В сложных программах лучше вообще не использовать глобальные\n", + "переменные, за исключением констант, которые не требуют употребления\n", + "инструкции `global`." + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Лямбда-функции\n", + "
\n", + "\n", + "Лямбда-функции – это функции, для создания которых используется\n", + "следующий синтаксис:" + ] + }, + { + "cell_type": "code", + "execution_count": 28, + "metadata": { + "collapsed": false, + "jupyter": { + "outputs_hidden": false + } + }, + "outputs": [], + "source": [ + "lambda parameters: expression" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Часть `parameters` является необязательной, а если она\n", + "присутствует, то обычно представляет собой простой\n", + "список имен переменных, разделенных запятыми, то\n", + "есть позиционных аргументов, хотя при необходимости\n", + "допускается использовать полный синтаксис определе-\n", + "ния аргументов, используемый в инструкции `def`. Выражение\n", + "`expression` не может содержать условных инструкций или циклов (хотя\n", + "условные выражения являются допустимыми), а также не может содержать\n", + "инструкцию `return` (или `yield`). Результатом лямбда-выражения\n", + "является анонимная функция. Когда вызывается лямбда-функция, она\n", + "возвращает результат вычисления выражения `expression`. Если выражение\n", + "expression представляет собой кортеж, оно должно быть заключено в\n", + "круглые скобки.\n", + "\n", + "Ниже приводится пример простой лямбда-функции, которая добавляет (или\n", + "не добавляет) суффикс `s` в зависимости от того, имеет ли аргумент\n", + "значение 1:" + ] + }, + { + "cell_type": "code", + "execution_count": 29, + "metadata": { + "collapsed": false, + "jupyter": { + "outputs_hidden": false + } + }, + "outputs": [], + "source": [ + "s = lambda x: \"\" if x == 1 else \"s\"" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Лямбда-выражение возвращает анонимную функцию, которая присваивается\n", + "переменной `s`. Любая (вызываемая) переменная может вызываться как\n", + "функция при помощи круглых скобок, поэтому после выполнения некоторой\n", + "операции можно при помощи функции `s()` вывести сообщение с числом\n", + "обработанных файлов, например:" + ] + }, + { + "cell_type": "code", + "execution_count": 30, + "metadata": { + "collapsed": false, + "jupyter": { + "outputs_hidden": false + } + }, + "outputs": [], + "source": [ + "print(\"{0} file{1} processed\".format(count, s(count)))" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Лямбда-функции часто используются в виде аргумента `key` встроенной\n", + "функции `sorted()` или метода `list.sort()`. Предположим, что имеется\n", + "список, элементами которого являются трехэлементные кортежи (номер\n", + "группы, порядковый номер, название), и нам необходимо отсортировать\n", + "этот список различными способами. Ниже приводится пример такого\n", + "списка:" + ] + }, + { + "cell_type": "code", + "execution_count": 31, + "metadata": { + "collapsed": false, + "jupyter": { + "outputs_hidden": false + } + }, + "outputs": [], + "source": [ + "elements = [(2, 12, \"Mg\"), (1, 11, \"Na\"), (1, 3, \"Li\"), (2, 4, \"Be\")]" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Отсортировав список, мы получим следующий результат:" + ] + }, + { + "cell_type": "code", + "execution_count": 32, + "metadata": { + "collapsed": false, + "jupyter": { + "outputs_hidden": false + } + }, + "outputs": [], + "source": [ + "[(1, 3, 'Li'), (1, 11, 'Na'), (2, 4, 'Be'), (2, 12, 'Mg')]" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Ранее, когда мы рассматривали функцию `sorted()`, то видели, что\n", + "имеется возможность изменить порядок сортировки, если в аргументе `key`\n", + "передать требуемую функцию. Например, если необходимо отсортировать\n", + "список не по естественному порядку: номер группы, порядковый номер и\n", + "название, а по порядковому номеру и названию, то мы могли бы написать\n", + "маленькую функцию `def ignore0(e): return e[1], e[2]` и передавать ее\n", + "в аргументе `key`. Но создавать в программе массу крошечных функций,\n", + "подобных этой, очень неудобно, поэтому часто используется\n", + "альтернативный подход, основанный на применении лямбда-функций:" + ] + }, + { + "cell_type": "code", + "execution_count": 33, + "metadata": { + "collapsed": false, + "jupyter": { + "outputs_hidden": false + } + }, + "outputs": [], + "source": [ + "elements.sort(key=lambda e: (e[1], e[2]))" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Здесь в качестве значения аргумента key используется выражение\n", + "`lambda e: (e[1], e[2])`, которому в виде аргумента e последовательно\n", + "передаются все трехэлементные кортежи из списка. Круглые скобки,\n", + "окружающие лямбда-выражение, обязательны, когда выражение является\n", + "кортежем и лямбда-функция создается как аргумент другой функции. Для\n", + "достижения того же эффекта можно было бы использовать операцию\n", + "извлечения среза:" + ] + }, + { + "cell_type": "code", + "execution_count": 34, + "metadata": { + "collapsed": false, + "jupyter": { + "outputs_hidden": false + } + }, + "outputs": [], + "source": [ + "elements.sort(key=lambda e: e[1:3])" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Немного более сложная версия обеспечивает возможность сортировки\n", + "по названию, без учета регистра символов, и порядковому номеру:" + ] + }, + { + "cell_type": "code", + "execution_count": 35, + "metadata": { + "collapsed": false, + "jupyter": { + "outputs_hidden": false + } + }, + "outputs": [], + "source": [ + "elements.sort(key=lambda e: (e[2].lower(), e[1]))" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "# Утверждения\n", + "
\n", + "\n", + "Что произойдет, если функция получит аргументы, имеющие ошибочные\n", + "значения? Что случится, если в реализации алгоритма будет допущена\n", + "ошибка и вычисления будут выполнены неправильно? Самое неприятное, что\n", + "может произойти, – это то, что программа будет выполняться без\n", + "каких-либо видимых проблем, но будет давать неверные результаты. Один\n", + "из способов избежать таких коварных проблем состоит в том, чтобы\n", + "писать тесты. Другой способ состоит в том, чтобы определить\n", + "предварительные условия и ожидаемый конечный результат, и сообщать об\n", + "ошибке, если они не соответствуют друг другу. В идеале следует\n", + "использовать как тестирование, так и метод на основе сравнения\n", + "предварительных условий и ожидаемых результатов.\n", + "\n", + "Предварительные условия и ожидаемый результат можно задать с помощью\n", + "инструкции `assert`, которая имеет следующий синтаксис:" + ] + }, + { + "cell_type": "code", + "execution_count": 36, + "metadata": { + "collapsed": false, + "jupyter": { + "outputs_hidden": false + } + }, + "outputs": [], + "source": [ + "assert boolean_expression, optional_expression" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Если выражение `boolean_expression` возвращает значение `False`,\n", + "возбуждается исключение `AssertionError`. Если задано необязательное\n", + "выражение `optional_expression`, оно будет использовано в качестве\n", + "аргумента исключения `AssertionError`, что удобно для передачи сообщений\n", + "об ошибках. Однако следует отметить, что утверждения предназначены \n", + "для использования разработчиками, а не конечными пользователями.\n", + "Проблемы, возникающие в процессе нормальной эксплуатации программы,\n", + "такие как отсутствующие файлы или ошибочные аргументы командной\n", + "строки, должны обрабатываться другими средствами, например,\n", + "посредством вывода сообщений об ошибках или записи сообщений в файл\n", + "журнала.\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "" + ] + } + ], + "metadata": { + "kernelspec": { + "display_name": "Python 3", + "language": "python", + "name": "python3" + }, + "language_info": { + "codemirror_mode": { + "name": "ipython", + "version": 3 + }, + "file_extension": ".py", + "mimetype": "text/x-python", + "name": "python", + "nbconvert_exporter": "python", + "pygments_lexer": "ipython3", + "version": "3.8.2" + } + }, + "nbformat": 4, + "nbformat_minor": 4 +} diff --git a/fig-control/tryext_1.png b/fig-control/tryext_1.png new file mode 100644 index 0000000000000000000000000000000000000000..198f2f6b7795e53035e59a992feb59b87599dd69 GIT binary patch literal 122054 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

+t~$HxKe@T`iwUhG!^6m{1L2T2 zGb16!@3>Erh+WRXN47iM75!BFTeJM2pqtF?nH4}>b@t_1?d_N%e&GJg)vTE~JYz91 zSd3+4{O9lO0>Jmd;c60(mGx3q7^L=2RyZn(iZ;s_<9p}~!4jst^U|Mb0tir!Tn*FF zE)H()bIyb7n5cJfYyqri)`1nrn1D{YuUhoc$jod@RiX_ddk?c&t;LPj|lASytH2H-gL)T%`^RL)kABGZOi2-fwRV-?cZDB7G-NPm_H zRfI7ONFpAH*5%#@8R&cQR#@GaWHMzF7g#_4sK5LHw%wHtDY^aAW756?cQpUs37?~umoRnxci$rmven{GpxN8 zwDV5rx}uK}Oo|64hZAHe36tfw;8*Bz?M##^=hv^m@5gX5$6~OV2Q`wc8;x>lWko#x?Nry%i>DF2 ztCyD-pkz}dMy_Yjsa!ajb_NV~BbazsSa`R0`(o8$_kR5b4y?=|$%E08e+#$TaSnJ1*W+FGkjwm?&6W?sst! zo+{_ap}+AXety9CtQVlE5>Sd6Klda#A~L+FP>ebkpQ`#xBJPj2`odIJ>SxPcU_Rjw zA;ne2H2s|>VrgmVh5wBNcW*`3HOm&9*=WLRpA-}H4@GL@;|DF4a^&}p z^9u*(?@_D}Rw{WD58X3W_PZV}{cm3G0R;fl|2y_A#(PR1a&k#Gzkj@M=w$9Y^o9t{!scYE@bGr_Q)ugbtFDkP;Gz-$>NC>|=$rO%^(0pW{O$ z@pOIt>*OijzM>wqwgj-B#%QP(s?K%=XRH#F;o%WuJMZ;T9*EMw!VZ$#_GNKwX+f}9 zzck%Uu7B;V@V{IP2nxX!ZXaxFs_(M|9qy7Ybeh4X9MB+rrctspH78wTy4sV{VD%W~f2y!rGGl&%Lf_a74=5SkbI@&0CJ-YnK>| z${Ao|A51$Sxb@qPpRC&JMmm z2YSKi$e1i>#K-EJXsd{@}sG0|!1(;l+gN4p!RyBSIN8 zAg}ZV^AdE{46Iu%d7eoN35khSri5XJS#NKA2eYboTsEMk)PJ!S*ujnm@j+)gPyq-o z5x^cXU)*KL;w;dX@Rp$0{^PCI`Rri%@Ei!x&pMTF9Y`{O+l+{0^5MvzwLCuf4(XK& zq)4xkC}ENZRHq$o-!$bB|FF4Itr&+B(Ift>*!& zRfC4AUM5_4B!cvU?gfiI9*&K$SOU?r-M{JF zof7cf8+uO|{djFg%skp^v-H;ck9bf$2hxn*Oc@Rg4}VVF@x*wHisV4PkDpKT;w$Jw zUOB8OT*Y+FL&w7tLe?YB9hk52NlBO4M-EO>q5#Q9{57)` z!~ckB5>nWc?+-|KNnr~Antj&?(S&&riCN#^<-N-cfnL8#Uq3d+i*R@YAd z4gm6Xnib+>fpAFWyl8nAO)Sd<4@#57H&o;&`9K9+#)2-BA&!Go@WomD14?KHpQ$u$ z%KzZxv@KuzQ*d5kF#b?DHrKETGp%Pjzj9EE8aD?FCW7CmezZD5N^{T-H3lgUw5{&27 zfbN@`nwDEk(;Trs#$Ce4c)3L3O<+q8$tJIL8U%Ro0>ySJ7Og7)Saq<1C>;hHjpEzB zez@WWA6F+k>6~%~#ie#u3BsjJdZfK7?uXb zOh8>JpsOT&Kf?x@OT2c|z5x~J{vu738y6{Q0z_$5*>4## z7nXhcj?ZMRwYKpQ8hZB{Aw~$Ie(ZNI1*p7~TcmDd%s-sh(4HT6{Ufh`^&LR2MI)2X z#l^)LsPC+_wP#=s_D(8>-Vn2?-?3aqy0)oaJ5hD+dT-`?_^aR*gUpBk7nIw!nbp^HtA11;s2oX(-n8X`~#CIUGtPsRA*uyL92P$ zEV)YgW{;AhU~Kj7x!aZ1?&6e9qFN7IuT9jdlJXnOj~b?vi{Hkfx+xef7_eBr1ZJU> zFpbB0pk(y?D*ZQbvf5mR{MN5_QnN&WmfX_^T_?% zt0uN#Z81kN!S8kjUh?D*AE<}qi|$cIK-~FJnndYu^+ZA8Q1ZQVAa^AtAsp55q<;1( zC8dz6szX*fwbLbZolC!bDcmC~ASo-?fAeDtOCG*^J-s_4+bE9@punu5rqd^G%YGN^ zsP~?bidu}*kFgls*-e^m(yC3gN#~Ht! zJ9TvQ72m$*2J@@zCyL%dl>=*=AX%QE@u2||5J_C#JxLODHiyxJfuZ}=aP?{=gx6QN zi21EsNb$57?2v4g{j6|^3GOCypIJ;klfN$%s%R`{Ku+j8`{(#<`96fTLcNS|Nl}4D z$@`J5@eHp=;E8(NGTeRtiCw@sf0`26> z=Yz)Bb%})%IVtHivXg~Yixxu>5ebSqIt6K6P3AD=&bj({dR{?Y`_)i@0*0TJfvZX> z)BYz@Q)yYbC!joQA44K8o2#1!_ArqasxZVesottgAO|Wse>< z9ZlpRd`|Uu5!H7rhT!|1dwT|xgoHyv8(xLo$Y7ZPlgCkI$MvK(lpOLG%6t>wmVkF zaMX%s_S)N>Hl-rVBuRn3$NTmNuTYr!=A9Gg!y&2;=Q|%O66h(9L-o^*r>1?>b3J8uDe%vN2L9XfiU+a4=ys0SHLPy8f7cem?};~$@A51b(n8G2Fw9v-l= zan4pWSj;bo{Zsr;8*jhgrZ#Nu>F9XD^s=qsF;rW|#uA<#f2O8R|Ml^sV0XF4&KWxg z%e>s5gs?D={0WH^g$aD}q$iJoXGvli#2t?Ps&M+?{@mo}g!PjgM}a?yXmK20{rw4u zh_97TerqUbX>}ixl+0#8dJ8S>DkM~_Z3p7_!mJbQ@af6T3o$Vt`2P4Fu~I#y+V7f& z(8tR|W6mrjeKvir8S}NZHJ9^)WvJ&>ZEtq3g71ifWx15fM;H?ilhEw_h&HAB2s%Om z?k6ash!7Iu|M?TF0D!8^*16xF^{2g%Q$+3+pQ;jc{ODI?EY-Hm0vjdj!=}FWwM-FW zoX0KAk$(N{oqt(bcS3diq=ZKDbabHALT`Ek{<1XR{iPaj1xgzjG;o9|0SmO3`(Kh zxfK={iQMPUrPhLE+HG(j{>#XEsC9M8j8G3@l-OHkogc4sb)E}|P^96ZX>LPNk2V*P zwAx>RxY)^%$0*1~EU|T3z0g^U=gi~+<*%33r-3#2j3?S$?)ksDMj8Wz5P{C&?aXr!gl@AQn}rb z6;c}a2DxDA;*%8-)~wD?BpdOVREJ*WEPo`BjG3`MMp&*lKG4&{R4I=I9X)kR%O58v z_z6$Z)atOWCQ2f(qHYQsO_%85Sm9&OpCIOJlyT=HIV0hPNo}Os!kgaj;71#SXcZ+@ zf1L=~bc)v2R(J)iSXead%_M;3@qt8GZ#yH0QjNEoSLbZ|NPKswUcRid={1jDAH0Kr zO|4sY&w@u1)f=Y=lZQgXYB zk>7lTP_47uHVfef2{qCK7G`$nzk4b%0e(R2+5x}>_pPiHGwt@gv;On*{x^&v5Nd>E z*POJpk1V9Kk#_TtaHM!a;}=C-gJz|TlP;8s3=v2GTyU)&;9`kfcAQjh0)C3RV2 zA($ic*a3qym|<>p*6&WAlP$NqN;|t-qXSle5)>1==dZ%UbDM;it9wYq6-@NucG4pv ztSC%a{sD(yiEheiOwkjARvzdNCL$pE^EXCdee>rzQ@@VbvJGy3M^8_WT#&qF96w6L z(Z+P(D$NZ<4a$7Bqj}cM&QA45z>1~l`r>%=`c;T$cq*1!jAqNQx$1xZp4EJAQ{{l_ z^BH^r{I550aeq;ze`?4UxMdf0vim~$+LeFo>jV)LUQ)vYBjPnwRbh7CBJaC8I{{we zH%_G0_E&h`O6r$yv~1YbDPWaTJ~7J4Lx**nj9f5FKlT$Z28`1M`2^|Q>3aPYd3;Nv0*>~%ROA71e`N28LY41{YeLZMu=G@gF zLszZCh!YaPUaUv1bIpSJ?dv;{!GRH)$e_SrG5n01k5zoz;(#L9Dh>T!pFKhBeYj@S zs;D<)e#42RaazEkAp1s=g^?rQi-z`I+c#o~F=W~Gm<<&IBH{FtRU0;ttnU%=X1z}&1O>kPw%;h~|Ze%(B|5|_~IZtR(j*llP zKX!;c3vV&hk99sj)k{8JbGpe7?QlKWsvi`B*&C8N=${=yG`HtSR@@u)w+HYfMU=2b zH2fz1u*&!8M?^_UM2U@~T4k3lKCQ8_aOz!w{{CUdAuB=h1Ua1&Yp`8KWzXd7m4ilKGgJ%sBDYVsf)n&e!JexfH>e^^HuR z7}|JUPTAO5UBKY~Gr)%xv1EqB5;Jf2>e&1W`ddBWLb#Jf9FU0?=KgCd)^C%tRl)_BfP*TjUy)&zoQ^pmKw`a>h4cZYNEodWIrbcFvEkd%He z?3{y7XylQtSswk@yadvD-7_#&~2-NrO+q1;r@yz<(o5T=0G zGwc}*@3-3T-f1fR2DP8ee>o|x`M(;=c|q(7X6>O!C6`Z-d<;6AlgVnrs}_iRo2qc_ z0`mdlwU}c|Eq`b7H}mn;lF>+E-Mdif{2Jga-P?x(a)J)>XbWm>+kxkQMN(&*vsewXjn3F(bSZ* zDoQTB3~cZ1RZ&sCoJq>--s{_>lzHgYI}wAL5nCh)u}n^J-(#~=I0}nX7s`ioaitl$*EYk_`@qrM9@dR90TPDO%EB zo&37e1qa5;Fe-IH{`1+xj{B|L@{-V*u zUGlz?i`&@PIE|RR+vb!cb8(GJdyCmT$;dnUSf3D#3|5 zlq74#$4|enfUeB2rg?}DOXPFYpCa&sCAr$ku1Uhs=)HB_Z)z0$X;kz!a~*2x>>Qx6 zy|KP>%l?SRNcs|ugNLJz$}w5{*;Mv3T3q+d+5Y0!^sbfOV>5H}74v1ztn6%VOb4Rt zoSd}Vt2+Yzfx)lXIE3m>cJkSH(|g=m9$lT<#07p(Oh^=TJs~dD;&XTV`=9gH$Yhr( z#OBxY|LES6zcCzW+eVziP2Whl7j}3Chx*opl#X^wHB?lLS;ovtW?R9{P7@(1mIYr6 z`q?fm&Smy7^vkQl-^AU%>tnXs{gkB*>}+4Pqwq!?y!@qDwlq#y_e8e>9L z9r7HE-W%$Ehq(531$m|;r~iOWgFh@~-H9X7_SEmm{O2m?%Wn|eaLSt$k-#?9Ndz2X z?2fMB<7>)R|KI>CD{C6QD(BUF%#kK-8X8u@zpz=i`}@DKv+GUdTQ*<5rQ}+A_z|+g zUnFSQ*cwJoqK?AHdTrasW))h0ZJx3R38z3)sJ*$y^p8&(Wp2I8eI#5a>*3VoGj*$V zWpz_d6m?!r0RwP7zwfqv$@o!6bO`2ZQ_4~0ho~l|riYgHZTbMFS1x+c z=J}!BLzt;n?Es%gPXm?VjEpiIR&h}H zghB$y&3@IWj+jyZLd(@NzyBaFuFFPS%87_4-g2ogMMbip(PH*uUr~?-dLHX%Z?)b< zRd{;?dB1w)I2ACh0O?jXApO6%0M^+ETXB$DK)}1D0m;WR$rKM4TX`$T1ooER`;pLz ziT0T9IQutz8tvK@PzoN*e7rYY5m;JQMuy528WXCZBd-F!7(1)jjiu(A?4l@fUJQ&q zR?4sz{bQAN!B5ZxrkJVU0_sYto#{g;DiAOBD$pk7Z@t6&;7Z&i#y8_%p^@NXE81J= z0DhL(?;V~P^-fJ~e{SDE1}M1II(twsQ28~zA?C6K5+M5Y?iC{vULdZ+!q47;^r^NU zEZbzNA-G`QTc$q|bln)DM@MgT8;_5V7rFC@HB0ILuyU|s+U!zae}X=q<37uy34^G( zpdi~!B@IZ8aqFG{2n7I!*=ieNgo1S1cNHaY(_6VG-&#G{LFXdHX+G3}--eU)ex3gU z6wX(m77_e$+9rYmEyak+^*Ja5nM5r=|8%S>GjeXT3Sw=Mf}G9qoY66>MZT4uc>xSO z#GU{XgqhzX974?|<7Y4ZO+qW**o&S90avb9d!P0+q<;Bze!0WZz+0Z&(3X) zb2g5szsyLV!s)?D839jZ)mTWLj+C|a2gw&@9x0XC>kB@C0$ow5tRKs8+LeyR;Xr8{6nB26vQc=i__bfY3o zAJ~Zyx-q5cFABzwt1XlmAGC%>m&hvZ$qE6A@mzTNGrz`Fv`bPR| z$?#~PwLB-Kvhq(Y)V(dcUYyi8EEhv!aa?zz;OL=|KGlX9%z??DT+t~hDPbUgsZ!9o z`}3O2z4Dj~+m`4W!dISQK^?E0w1%m_&jb5!3*@}W4l~tmt{Y1or@MlXH%CNFd`YkI ztMRiE@>%Tv4jdt>Fc%jWNMIUwyFB%iQS$y{+V+IbGr2VtGUp2v6%mL``2-#UOTC6e)X7PPsf31n4LZ^)Bbl|eH1SXWJ`5mT z+qaE9-0|O^16QjZ>G8Un`;h7)O@5UOdWiTT5Q7;!Zw3ZgD!+Y`8%py-e1S>KPqXgk zq?^oaX0mE6xzMR6B1ycp`xa4(J$IE^Zma(SyKp$`1s+1Uc;BsKb2|-ysw4hkaJX6 zxCg$sez9;!zx#tr_RYM8I?UT_d#jIa4rH&M1=@Mg_!Gy>%uI6Idmn)aYyoVbAs$kz z(qnga)-0Bw=7%jyNr{n~`c+qx2(&UGLVtu45o0&a|8^z=>`x-(7J9j=omV*`I_@Ko zki#T+gM^}00ec+vD&TzeDpeTka(;t0sun# zll?oI`HgEV269QfD7CwE7{0V_ZOUWC<2E-}A>h(|udJrdz=D0q_hfgrnH(*a85}QbVJBlsYzW;Gl8{fl zb_j&{w?Y6?TbD!_7z+G+?*2nnS_^KY!onoes1RT3v1vm{c)U9#pS_h4cDcQ|*5PyB z*UKh1tE!eRl@BHa}ZZ zQl>1GXM;-+)Il0G2a_Cvi2Bmd&37Xsj+Kts&}7y%dCfpG_}?s|M8$=*xp85v1N$t& zA~fIld?4M|SA3RteI6ie+K?oF|8E=mdH2PlePo`eQ&Ypbd3LhAwI3t+>xjFAnxQ>f?#ndKpOK$j>JGv=1)45V=8 zz)A2KYccDfre>eYHQkGVufId?w17fv@eV$ljm@m`OLvP~wx2d0Ba63w7_8U0tE~GX zkb)Hi#pW8r)X%8*W4oEXy}je(6CB^^b6P*MLWuVZ=cXm^1<(0J}TVsm9g9*TF3VuJy|*zgIe#?ctP?S#^=w^wA=4{rPl?6E-mco zb{#$ws4Z9sP*J4Gx|}KMJRkyS$!qOwtfJgPQPAxSqU(#M|17qKR1vyGG`+uvXg54C z@ngwyS$cj6jlZ_c-$ki{NoNIKntm|K2Bt0F;tm3ezEa+JC)UQbWoKkD<~5V7mD~qh-Q&Bbx`zuIUB{2*vj$Ko6GFqN10uZDC%V4ifvry zpKezUjksN*n**rc%Eo?my!lkl9!A^NAXN~Jo(j{j*&O1&bnWkc5?Xi1gr6tDoUQBr zd`5DzE-Wmb7!RdG>tgd`jXbZukZ&0^dQ!7rdA+`&`{NLW+}I81D;&VoNP30$&&vn2 zjAJPTA3T)CKw3Ke(tvgU?zyrq{D%A;kqq~H@Gz6vz<+wYb|WO97orH&fj=2~OTlco zF_YX7zIt_TBE<+Lkn`B=q=f(;gF9D{3C-g*1tKOkj_LGxS&j|O<7(4`Qjrsc+AIPr zn6elDiXUC>dQl_YKOm;pDEc=Gdyd?_i-`(kQ>0Dja{~W4-u)4;5%BQ zTyucR&12IBP)4JQ6C;O;wuri_4_YWHa(_`&Q#0ZmFrU4-J~Q)x z*`c_ke6+uRK6_w2Ihl}6a~XHZU6LPB-_;zw+MCG0@Ztj?x*yH$l9qR>KH@qV@+L+u zEde%+kB3vpZHA~{pq8F8?xl$Ys1sVY8SP#^dp1;JEbmuj0K3iE3@@_Bl?3GGJv!Od zsdPGqjEtTH{y~LVpc;7XrYeBrfIcHH1ujln&gaa`{0y?1n(+;WKVsuPO%#jC$$hJu zAV1aNNpOSn7Pqz*E1b{HZ(#jsE=MJrUhC@&)IWa8N;lHbn1pp6C?8OC*xG(BgX|a% zh2TAkz>YsQm+v5X(?G=FvurRJ>?b~Nw%)RNTvE^0*sLD-1fm58A0Hn}efY%Umci*@yUP<8E8$ z*cg8)sPslk0*yQjfQp%n8dp>Ek4~2(48ldwZSCOnH{ffK=q+gVmN=S*hx$M#6_hz~O9bXq zx%-LYw;LO4p6?zVZ~_l&YQ%CR)3**&9R$r;am9n{BU3WsdZd6hGN{6Rwo`u%V4TT` z3E*kK-VQ$Gcp7<1oW;!BVpaNkS~YM^Cem%sRBm34myG4b2CN^?&7IrugG?U&2Y4fC z1nY{@+LAx&_N^a{o9}eFMnP;*ayW0fxhdLP_v;PZS^}>I)vX%KvN&fqH-TTDRR7Bg z@X#}tW2{v*HO=|v`yQ~IkL)|smBe$q7Rfo~#-lsr)v>oUo+9SS8BZA!s7$md++QS^ z^PjD^0BFe1@QKE&BM&{W<;TLBze1>vG7}T0{Swk7>@35hqc&V50Je==q*Z3a2Z5oM z;5V5&5S$?)z2zEPk9}oA1wDe(zqja?0IONu_sMq?WPybm9C6#r+!ouvh9L`&gm-6$ z2b;+;?#D-#G1SkB%maf1L(0PtMa$BWa_>jNft* zG~mWs^byLG3oauLh~{(Is|TNrqZ+ri1EkCXAaY-Jr90Lc5Rc?Ik8j{)u&)@t;k*O2 z!t%&XIO6z$5CP*Ma%p$Mc2P$! zI@5U3r%4z^kmjSJSF2%YpQ8pk&?$>Lr3~a^V`$_Jd53ja1gt`CQmg9d0?t;_(t%Nb zcv3iIl7?TZ-28F^zk0>@W3Ma|mm(-YQWQz^zdYR+HsQZ{?j4HU(DtbwRbgP(^ zt@60ic0RS+GET_r;dQtZz_$?0A>eT2Us1u8qUDkXuLg9DPF9*mr-oD2jxopS`8)tI zwo3yF=6x0pmIi52QPH12f9iHRAl*+<0BatH*_1#2#`-3pZdX?pq&B-d{ICXp+%#DX z4EXx>$y=4%FD1k-CpvqsRYj1AGrTzhOm1>H&f^D&LYq@_AVqS64ACWDm3lZ-?K59A zK$QTe#kf=!XjQ5*E;OptVq@*ir)S*f5bp%PmUb5oE#XvqO9{#F5TPNyRC~IhYrjOM z485gEFy%knY60r-2hk5THPOxfzCH|xg(V=!+>~pcK0-$;Dx}Dr!^OrXPX6^c&ky0@ z982MjLFak2*5CBu2b<7LiAt}%n%dYlR64FWI_^&if9Y)t4UZSj$&OuM|E?e|qq(JR z*j(>%k0rn(MGv41_zbwcIe_gkU#H4WkY__>7-k_G?>vTDH=IMt6}WuHw&9R(rhX2n#`}3zFOy02d*+0uGE( z*2vVxMl~`rK2wuV=Ofc+TXhJ;y?ae4t38-sTUwjhIXQWQNCPFaa123a(lCA(akMpF zQdERog@%S4%hnq~FGGV9$J-kbFquk9W@iAwKCZa9$SpWaxJctB7~aAJ#sEyCr>4@% zCEkZ_Xhd>J-lL=%0)(!vNzC`y^`)tX1SCGI#*T4h!LOYmPTjJykcW*@iP@Sr*#Lq1 zmX0$i$7}j?^w>-2o(iEaK-wNhltcFtx{Cd@LG|;D=2_6K@!h~cVDDbMc&R7vbyk5Cr0IvB;$6=F%5XgrGZv_~z~thn}Pm^whIAA>Hr&{Cv9iAvfGhLadV%qsnzAGw&C8P(LfQME#HWgw%(G+&w%hHQmUVNZl}}iB_weqyeE+~e z`0ajL&ZLZIby-QGwSTQZm-IODish z>v9vMeX6|0JN6f~rl-53B}(-ubVHBL zh3kjX&+6*<@ThN{K4RXVAbg=WB7JbZAUu4Go&)janJ6nc>ra4D5D1zGLULli>xY{g z>w1BmAkY-cNl6(6!xY4@2^W;GvIPcy?KcI-?WW#{iCkv*0t^BtPhiF5nXTrFUp+RUUYQG(AY%gk=mnyx|N4#y9guc8edFHL`zAO zos$;7q!r}AEU#X*Tr$$rY-+t5(Jg713UQ~q_C_mhu66+8@n#S+wAuSUte=#4c-0?Y zl72btShIC{^QONOx7Ng0kj6_5MydHE_a|iB^z>5MGISkJzb-YCVZt$*#T%uB~@?jMJ=C!@Nm?R59w$t9(QzDC@}fV(LHOW zg;1T85Z(N{eoc;kKK<5@(e+#LkR`MH?5sP4g?U%!|Z^zR@b1{Qtq zv~39vXXJu#xHGU87Ww&C=HgJ$(8={#eioA2YM zBML2gXJDFUsjT+A+Kj|8d!L3fXUPR9qnQtrP>+7m^AGFh0Em71AQ^DI_J-DS7fT*O zOaVeu0(F%cX##bdx&8K7u5!b2cV(YU^l^EkIVWQk?`@BJLe4kG_lYQ?Bc89n$SVizx*2&8KQE2PAk(mILHO~5BR@S3 zqR@S|7IY-K){YO(M>{$U_2xC^=iN3rb*))rua?ejlwS?QvGGAM!`dOs#Ut`%2y__-dGtepJ-4U zQDX&oA6o)!1c}Rt*S(4SEiElY_Zpu)qsGNqs?&b1{f1ghES<5Z_Wv5T zRw{jLb3Jq(DQML6mIO3vOCp4|oZx`s;tpyoPZ+$;FsdxCEP=&wc)0)g=;&J_7sNtn zf@s}vJ{7j5->L=LHFxD7LCla}gD$;R@iQh)^zYLD`R}42F>?U$xHVm~x*kEB6;J={ zxBjryQD|^sXrGO7Z{hfMnbEI^LF-vu#23y29nd2@Ag*}D!6D$Xl?6~0=-i+-)zoy7 zw>UL*Vco_Us5NN2$9HC;r~63G7PZm8*w>$?KB12I0z-o&Q-ngLf8m~!prCEt6p)Kv z1rO5R2a8fw_F5;^=|a`QN=u+?)hToBw=-3BwUj2F-NS=-=lNzPCa;%&{krGb6CV~D z`EzhR5YGXi_%wjC#|>!ZvVQF&-BdmF_QWv5@AO(*d!d70>qd9o{JsSD`&lvZ)sYS= zyy$RyVqSoZSSDep-T3hL^=Qc~_zWI+ohBONR0lz^o2 zNj7R+Ok+fJTy%6C?|P%7jIh{quw|dI0!9P}cLI(4hmU5S9}IXNsG|il->-B@FMxc) zUTskoA#H84s(Q@_z{;4(Mgy@WVAy!8y{K`ulK%X~VofACoCE#8{zK%}Wo>Z{jqXI} zyvCzB-Olmf*mG4$AxFHJ4RaSMDoDkMMMbRTWc`OnW6;*w)!zA^r1Twxp^*`YnLX67 z;J$;u$pF7aCzv2W^zA~LpB>}>4d~AyaAkvN1DIDp>-1UFfTN$NbmpW?oR{E7yaqC@ zR{=8jzI5wnyDKAu%zCxpNo>Amt#_+5kW8ckE@zF@fp5;wrSZYoJVuX)cr7Z5GpSx~ zcYQHVWC3Rp1^bubkmy7wmKN_`z$^Iv4Rz@t#A4u-N>-7h7-z^G5h;*mzT37aic?D2jd{- z`ud-ma^@PdKwn64A@j)Z(^MbD_>5HS>#Y3+Zle9wRY$H z@}>Sa@0fo4SeOl7Z#=Ak=9;i<(47B?I0Q2{vNe=dLsqY^??cvD7fbhg!uazu>SGA8 zZRX)oe%>GU2Eyh1Wo2GlbTk?!uD^s!*T>ttRsJmM6xL~pcXCfISLU({3Rdxi-QvLF z2xl`%6$2w31a+^?)(HxyfW(c(QPPS9R|u{uMYT8kSLjhCQbHeJ z8O+mN15*P8qTFIeR3yV#K5@bCv%vQ#uvII{$pLBfK!eSTBjI`{A^p3uo{*5f@ZH+= z=m2E+>;Y4H(yehuxC^&ID&-(p_gHrCBP>r(NZAdYuJ+ylra{BR^m4M&IojXRgWq3n~_)(6BwzA{Lj$4)_=Umr_3InAw897V}x-a{a1WZgl) zF?F_4>P|wN8km5Xy~Y=rt*1EKc!hXvXJ@DHa<^PBJJTEo0$>eI9l^RqI>^3rs% zc$KP0r;lK!((A!fi=pr6GM}okasI3NsJbnHqCM+P^APL5L3w;&;%-8s93|*rgQMFG zi^Gcc1+i&CI(82M8;kp}G7?IiN9AKs9*sS`-mbD^JWy-grmOhVO|s4W&;}Rhdt_fh zc`UbuN{apN%vHr>{e=b9zwUE;DX=A5S3L%qFO6($Q03#VI$Ay;b+dT;mbq#)$KJv= zI2QP6NsAd>ztqmojud`jC8eYNl1yBkM>=q^6q%11{olf20ILm*y0Sm`&Ydg^|M>Fo zG~ecI+(D?TJN^dyU^O2BW?f({7Glao?T2Kv7?5`E|om1>P&!9f5&Dwm-Z zhA$2e4{wEgkK)<0W}7J}s;Mz7dnttR7?Dg-SKrr;feoORsF>(X@Ku>xG5E+JQqS91 zO(qJY$AMNTSbZsQVCXkemBSM{F|q%j->{CD*t>Tem(x`s6ySL33$?CSiB5F)9^&BP zVI?kGasjjbgSQu3V=e1f#yhn){R91t#j3ertakdF;H87%Pl2@IvzYz7;6JBW90J?N zuW!(ymjuUQ;h9$h5;97JN@#gmQKkKAeoTb}5Kw>t2M5dc_3#eNxIxk!HT5>{!$+tJ zq}K3Gf|e}XVG{*^MODSj)uz4eGpdOU0d1tsG=hch1CY?*nMnyx3LUc;Y&@1*nwu#TjM-b{1OijN& zoHJ^xqVkW$wbWHmaM2_Q?7oZmPwJ$em2m6$w9e)dkLQY>ii&kOn_qG8;Cn4pjsypz z!SWT}hs3Kf#0~MDHDysJ=Q$ziIhlSx#$hjsD>uL1o9Cwko0D*wkjLwsl<(jr!NWjn z+y}9ze5~iVrS1G{(Cww@NJxl*iOT3C-Xfq7;0J<-zP^>*+^7!?Mo&m{M)K$FG(pa% zuHHFsx%X6I&C{|f?CJitbzJF>A3w6Pp4-l|fBp4K{cqr^xBfr!nT*7Rusj!}8tD`u z2%w3qcHNAEhUeZS4y2?))m%W6H`mu86niq5WWB@;j=G@5XA;7A#kUzb6tqksJN8r* z<05a1ABALyiHbV>8hUkwyxAbn)C%0S%f*r;#5S)hX8se~@WZ@zPw64f622~Pvx2^M zGdl-6kK9Gs)Dv~|J6{s|jyOq-oNs6NwPYF4N|T+ukHvE1AY+>e1~OI&%%^< ztewD}^|)#6(bHVNeiL>VNwDZ6`{@85p{|BX?Q#UL8!C-gc4qo^oqfUJ(u=9H zDvDipF|t5|(Lk4AA(4LAk8n>Ws6{bNPP-IfLXUuBud>^+g&6!h5s6V5+?ER3=8W3& zFf#Ljwn7IoRsOz~z%O8q>#lW}_XLy~w48Mns^F|7l zEC07%1_9QMeXj{H(LMV5I;T4~HwF?RA3lC;d z|0APQ^f4VaKq&Lg+uH+gHwllmcVYP6Tv!uZd?w^l^o&DaQxD`+EG#ZSs`_8o=Xbt( zq|5`-Y&u%7N>;O|!~fyKI>>b(ow2Mscj|rfo;uOCxQQyH_rWN+FESL)|LmIM(^Rn) zc1?bd{#sw>*UqkJ#uv|@YgX9CTK>G}sQ>{b5RQS4&@CAQJu9Go*fcjKdW)@$+T7n_(Nq8 zMH_HznX2Sz*VyHK%YQ?0V<2`!Da$DiS?YUW1IytIEVK7Zpe_hch%Dth=2P zPQyQ5o#}&JNUo>H=Dl;SdWpK0)-@zkulB@$wzdg?!B z60o=P&f8|HZ40#n%gjneuQ0}a7kAgkKZ*O-N4$EqgHkdxN5{s_prd8gst7ck0Axd^ z&;HTgp7!qwV|gE_Ie-m(^wZdvq_&5BPDq{>lW0)P2QCYX*;)n+er=lCqoY0G&|uKT zXVhAvZJ=7RcqkNF`ceh*QTTv4yAoH0G`5L)2pv!8OP{|#W@fi^?H?Tw(9O`z!}A9& zv$|;We>O09J8#-TYMf3vI9SMd&8N_@zC6^aak|;6q-9F9+5K`s4QB`lK~8sOE;W^3 zneNXPz95Xs?e}Xd2KI})}Qa^ zn>I>TGG%DUV{BK)6CIf@9p#S{xX0H!x3$g&Pgd2*j^qB; zIb`LiYiNA7{hV3VL*c;poa6~D4;>vPV{LY&q`Z9ZM60i}7^774^(7NFR@{#`u!<(c zCsblvz;YIigKtp2HWQOStHERmU-zI1JEET1R9X>x#)9S+vdwB7PDl_C04ewgoqXjc z_KPjkjrZ|f9e$b*L$@CU&iuGsO4m^?C@NwBMRN*8BUPigcq^=suDhWizrK0?46CE9 zZFOn1+S6US-S&E-6!fUj@Z{q=+XtYO|C3O;rHSu3NW$C>XNAc)@JU}JC4n+k-kT)k zsaxC%r&~1;Jq-;EyoHCbhT&W2j_3bl>aC-y+P?SULrN(~2}n264bmtb5-Lb{N+TU2 z2nt9`r<91&A>9HZjdVBCAuaqS_w#egzoX>m$n0|F9yO@q50J5|^ z?Nq=`7hSE{G~HNasG{4}%X_lx)j^$E{)q9`1#}B%vH8lvj;Ct(@?+m#VxroM+0WE_ zZnVCAw{DfrJC3Y{dvG65IxHjU`Wa z5yYw(sH%$73nj{CvqP4UWm12J#MtQX0^2=r9Od7LADOnT z*lIOZ=dbu0%G*MzLWS^?` zEl$iF33TN^PB*XhSU~o&l702}Ub^)a&CFe3>5d0^1n~9xk{}BrKgAtl0X7ni=oUJ{ zXzRNZ2d@Q&4u$;MJQNa=lOLm_v;4&FZr;+yy>B5FeuBr7Q#SyiC0x{*m6iPL{Lcnz zB_9$IY7ViH7RS>U}><2ugsPX(j@fGfO1PwiUdLD9s9LjkyWF!VmHU_fyQX*yHnRu7KLUMTnreT4|Gl_7 zH&+(0Iv)35i$Pq$0lyc4G6fltsc~0|72dIy0U0|<$dIWMh9Q}*H}4wO5_l{2Z8vlT z*gALNuJz8}j3Dq|bKC+N4Fzh_6%zcIALhkiHuKXjK{+{@M8ItU;>rP)v{AV-K7LFP zHr${y7NEDlH3kIbpuR@GxpEHV6!W3c!Pzpq`(Yh?d_08zySl-Vao6418RNE>Pk%o} z`|mqfh4?N#Ma4;{nC$;vdfJel|9z&coSfxq z>+JvCHzKL@9$@!SH=%xbj)M4{HTd7{fj@}4#)D4_j256dL@Y6lNblZ)&q9sYl>xYH z%cRNres<^o?^d$2fTP4SH@D-dk?J=?Hy<1Rseb^J5->fUsd=R|5PGv{-#1G$S|=UH zG7pxs(7;;B|6Fhz6#=pg%>Ug#Fk3-FJk`>IvA@*j%`K-wR=OSlJ_`#=0U&#=t;kXv z2>9cBK#NaGO0l-x#Q5J2N)Epi5ERsU{uCxGSUMCp-vyr8`7L%kJA@?IU?N`Kd|ep$ z@68^1l$haqlwrYb=f4R!!d`y`7d9surSJoSxP0L#2Kf}~XB1es25NV|d`X6MtgrvO zwV03S+Rm_v`S?as5|c4>?!lYPq74~l-Pbjhf`!~I> z*LdLRnUe)|>_2w_6AMer|IR*`{*R1~VyRJKk+>Z2e$G7_}3w3w{)YccAxJ{K21 z0aN5&3+(3%7&*F!yE{??CX&?t7)T+?6=ccVT=(IW0dd!x-^)+hOv)_!U3-3YJ$8Um z88BOb$@Jzo7JLF64XPjmACGH;l4RH0sE?c=zYqAIpfUCPjE%gJr-yrI^!Lz1-#>Ag zL}zr8VMqa&!l=^_AOUmApEruDpkS=$u@b!yngu|n9ng2DIwL7ll2X6}KsQrSih2ge z*B9kzO@cxA#Xzkq8tS9{)4?U++GGBA(SbRdK#1Sal)CQ^%iE--=hjxD<>~Dx>^L19 z08sD=0OK+pl@IBS;#mR@)6!$p?6_T-8G%po5VBzbWA`bAQL`_!ZR0s@=|*=#2=3j# z?rSO$>S_EzNBoc!E3Iikk$#tu1Z&Lya@>cL6Ig@Nqyi}v_wFm<#dI$Njx)}FJwv`X=3hS75c@Hfj)VXq z>7=f%q*NGRMQk9bDn=X;<{ooRfyy&}#V@LNUV*FOSNaV|Zg-uTZS1^u&=Vg0;F66B;5E%^84~ITuRC^Wr`bJVp zM7&i7lSgn@0M;q72d7?z8FxtA`-t#lA^S^crGE4CmE;#0HZVSBbh*$d<>pqud)LFz zCc64$yUu-|h9FHfV|&%!)HDz`Y2Eew=L##x=Njr8ZhyeBwXWdJe3$ei- ze2?r~ajb3j#AIW@%;lr&vRIMVCF!>qYwt{OA&k6785rz>7zH){LnO>e^{Ni*Ca;vR^M5{Z`H zj=ekA;Jwi*1C<)L0{8{w<}wiTfCj2Bg;!8`n;ii`>!ZVMrqD}4WDmqt3c6RxP4_%z z>jTR{DBWnjGgpvJg7h=)7fwB%4i1K)W8)`)yqA~T@1pYN_p50=o2oPok<_`)ej1ms zX=P;tYACH|!(=%{04l&QVaKT2FUj$>=fSTw{j*iWS}cH~MF)3cShl-u-=Hf z&ZoqB`-xv(-!{q%wpGgwM(u|)CSPAv{`r~PT&qqCI&eQx)=aCFfPY3DP zU%hHAK2F!K+fPRa0nFaX3Fr_n*qOl)gL0foGV1YkQ{)UVMK?j7*{RZDl-2Qn8K`Z*mD63!ir|G1`MYp%&}q(FUYHWLH()F|aZ-Lq%9w zpH)4@%%Yxt)bUwwPBMc{`HE2?ACEW(3GtbNYRyr|Z*!DgucGVcB$?sMPuX-tQhzo# z_ghaqckkc7zn`rs^Hv5jsbGrMQ6RNYV1WMd3*f=G|17UA8;JT}nW;sAn@VHi+ZDCT zcCnP+zD$kVp6quYGrueCt`24<3{~%Ri=+?+w$@i_&d4z)zGW{vcDswdw9^1baE`DS zM^#|rAbE`u1nwCK|7%XeMvOWEk>LO10_a3bya7G>tXex0<7}-zF0$Eo`rJjf+NTU=?K!@vLAIyF%ydUim9usn{cDHNL(#W9D=0s z4u#kos=V!)y6TRBEX;k(AWO{{AWFUB;(VGDNVM3LayS9!t2rwxs|%+-q_tk{Ed&O% zRM)W4H?;Lwa=!pFt?DZ`h^gKz{`98XeS2E?M~m@69LwqC`GW^=9%&R%SZvX}=>W6} zSbsC`E>0^KXOdN`N#q}*&E-RnCRk)BF+B6Zh)Uqh&ehF{6ygO8ghqzI^5CQIgEs7f zu4>hh@$v6nQz_kM`t{B-ss@yX;cW{!Ie02aLxY6Wgs7D$!2AJ(X|u650>p6o`V>ue zG<1O>QgkH52zK-!hpW&i1x3Z5esK*Dpc2;ciic_M6BD&F8hvA9V>?wy=Cssd z7;EC;U>9q#&_>2!>;|iJL-{qzO4uT0u}?XTFFAV?`wW z#jVO>y+)`C%VAm*WCDx?{tB`!f$JqXAeXcrGa(SM-M{=!`Udu zS#E_6S=Fyd_~vU|C)|HOXiW*PQfjNjzDo_V^oJmV2Yxi_w=OCvP?$L|!v|^X`3Z~% zG7H|X#h++T1P}A6F-%5EaY0x>pT_gcf`pOf0UP+AP1n(atoqQ|MI>0ceG-9y%F>L6 z#>b(-@v0s)dDE1^F=fswD*RH3F{v-bUXmC{XXPyEE|jMn&iNP2l}f)zdI6=1$5OZ} zU;f3ve}MfwefE3L;v4W1IT+o}6b*N)er}& z<|o9*o3NgPK5d9W94JxzBZBiyhd`SJo3?{giO9Y0K$xA&``~-wxA_Iek*vJf6se#l z*mrcv05c*`G$$!Pz0s+BxJ?nP$IALZM^^{^v!CuSSs6S!I#Wb5aN*MQ^Ne-dkq~9h zWr>e8bTp6=H#6ES%%C^(GxwpKzdY0mQYPt%KONV8k@3*;U`^&4M?E?k^vjE`f7I0> zOb{q$vXfKU)u1B&Ju=jKa&3q#^)6N#uJNJQ>0WvStKr?Cp?rrqD4<~wRb5eGGm>z6z$LPomX&q4 zN`;q0psK29bk>j1{p||Tim%hQG-_9gF|ZTI6BB{sgQ1fkf!v}d>V57yvTHwQ^YY~- zmG>IyX!{V_d=|#LchvGkxq+@F#!_foCcFCW5m+Wo$Fn6TvmLYET9UcUbu?LY3|R?5 z#EO$ArVTx2f>vrfM7x5!ZMer~ZWaRFsj0j!tICsO#e1t8U`5gN{A)>B73K2MBP=KK z@{)>Q;9v9eC+rQctQWP}Vg>BxmAQn1YX)S=gN;jQK#xg5LBa1juIA;h=ppKB)k})l zgVl28E*H30(?)M$&ax9?-9!KB*m!N-nCB-};*e4K;qR{(wWg8CpzAelW-b}f{D~czHJ+K{pS)cZW>AiHL(&vM-W7Irj!8TlHELzvjm$2oJn9R z4h%Noi3why95p#2-SsFpzYr*+M@cX~-}9)SPSv|VBmPjH}63Pmcfh|bH}NVpL?WEmOOK)X(>ipNAW!8QAU&Rn5vkVnDli_he4wU z4SpzN1eKisEErCD9{$^KZf|-rznBS(r2PDRhpDoT!ER{yu6=oic$pQV{3x{5pB|i1 zwYEiOJOpl92M-Bweh;rzi!=?Mr^ls=`nS9xEw^Y5V8$Wm1fCQ*2{Rr>xez(K-8Q7j zgCKfoNXj>eY~s5)Z!S?N)hkG#>r0#Yo1;&Md?y5j=@sP9_=Tl& z&n{)aWJc&kLD9kC0ko6wu^jS0y#X6D;2eqgZGFd1;Amxed&O^W(B!o9>qQ1l;5{~+ zQzHJM*JObKrpw5?kO+Q=eIRH*p{K8(mKwJ_uXexE>3a4b|A8Hck&y?yrkbRYo}OM; zrR^kp<>mv@GnO}GADOoEAt^NcC>(;t0DjqA|ASYDFAqr)-R2Adl2I^JhK3gOggH6% zco;W_w5A3jA%Z;WJs-NXA6Y_A1+T|gQ0WrbDdBES^{*XjUH%<&*pSsQ8G>HqNxD#@ zk+I};01Dx{fVZ#5-^JYi0f*@JX_K9VenY?Wn#Z(vW4lFNc2Z$XhLEHs2BJxZxTg)^ zG)$@)v|>@(=xvjet6;g^Zmw-LepH~De{lw}B@iso63r_VQCCx$UxD9aG(IuK%Ibe% zPv6cI_wnOIRXG|TJ^=x9>3l&!0RV7&W+jr;pyqab{b`AWWVTc@Ux`MGxzgOy{Ptf` zk`I?+NG(iu*s-@WF4c6oMEs|@jyeEhun zwLZd^V%J2>p|pH_Pk~2zbvuE8yzSz6_Z|u1W4+Olk;ihfKvC}k;{R;gJ5%7#*uHxj zWK!y}_}vLiZ1k#3&`>(3+`oQ^JxfjozL5O2Oec5hOJoEd1*wc`T{Cp7u>94Jestne ziFzGnj>uxN$Gar<2>St+1xSD;n=D##KjYrc1a>+vqq{iZyx{)3HBqevZqf9FrHO2` z4>4e42m`12(pV;#B$!p%T3In`Mw~VX35&pJ!v_RCo;5Y5av$!%DCXznd1p00pLEvV z&bA0dp`2QG76kC4M-W(_kO(coHbOI24ChTrqOvBhCJz>vzw&Sjj-gH_9nN5twm_up z#^eedvXCzur!vR|_{3g{@S{HlI1s?Y=tgui_G z@|_Z=!!C@0*s-*`mJV!Ck>UG=|NLao%yThrwn#pXgo4WV3SA#IHJMZupFHtDnqSy; zPQm~yY2woh-6`$s(53bTN1(|ZQ;16HHTwNi1o=~=yS%DKj3!?)|K@lB9ZP9Rg{#vm zyWOo;ld>-5WJ24v-@VV+h|4Fof=)f|X>Ewfa3}7%+EDW_cyQ9u>BB?nEJ@G;DaXtK zE>vx8b#9yJ{kJsfo5Y6TIqbjZPY+~YN-}ik2zj2Pm>fydVj^)YU>z~(4 z%NQ}P&A|mnA_({I(SaTb$?0YUfsA^+&($Z0gOx~|Ne@_>@%BheNr}Y=X&bny@aC(= zR)wiChntpmvFL)=wH(u0_z?tB1se}ro<^VGFE9}L!u|(C`gyZP(v6M1#V6a@4L-S_ zK20JWw7^I)Ka%R-J+{|j3nb`Ns!y65&oz#0O71lvNLI?}L~hc)iR zVI5LP0WPb(bOIg_HTkE?Mn*M$ZEXdHHF8W$e7Ogm+_rr$Aq2Viz93}$LHaxp+V3_; z47a|1?Ip7-Sn{KJ&%7t$-o1N(G#vqVw7p+2VyUD&x?=&7lzY~AxVe0`ga4*IbT`-^ z`-`=3`AoxN8BDzR`Ew&=CCN}|BtF=35+ItP5m}uP2_xp5^`1{j30U&*(mCJ# zgS#MfhC{NqJhi# zND!IgeX`m+d3zJn7~mSHh(xnBqcVzF3iaJAEP!RCA94CYNa&$z$_`|(Yi6l^x9^<< z$12o$8&_A3;WtCrECYF{;G)fTz#VeQyElUsrgp*U_MBy`LT%a$04@doo zjvibxB>yhbptFhEz}#vPulN!Xc|mIfz^rM0<&1!Z;)J%j5@Y!%XN zMtb@^)~nMkXCfk^jiy1k{i?^u>H|qpAAS66Y#!Vl6tw_x+{GqCi%@^PEzbhrefgv~>Q%!~$e!e1Zf4Ypz^OaLZ z^9>EXZ+*$8#XX&SZ(_8#w1ka?rAKY}E~ftv6drvX9B>tJ6;#9o#H}k=nnV@{;uCQ&bB+Ru9;~ZIj`w65`q$ zY`f+7?`T^a@fwa}fI7ry@3(PLP|Vor3hYX_zDxCMGv!jWG^^6>Uclwco zz>H;TX-ye(2v6anj5o{CjNR>)__adbq)kD@lcR}E3>(Pun#(vj8+u@5OXgPbzz{T2 znbj97hil-!qagWcl|cHE0Ae{I_wnrU$i$*dSe{BcM8<@4gb~lwdJV*87|Nq9m4!?WtqAr8S(M!;t7aFEP20i$K5A|S_ci$CEve3U8?DAd2g{eTlXSv z*$g2Ga~sITlCOzP``2@i^W7JV{?v`d`BN49UB{z6V`)F|iL zryz&uCg_C4sJO-A92AFUKKTB1S`y~#kyUwYr5@DSFBp5|pN*muEDmWJmXO<5 zgQmdN<`2AG^~)*rHI}?5&E6hI9v;`?xmCR>0)GztH^n5Sy{CDf?MN)Yvyz@}5d#Wm2?^^VXF0~h!9 z?cDYg4W2SYO^9%m_a#rGCXHxukTFjal!6U=eeBRvU4h#p6R?$d~8};QZ%=} zvE5g;>O|eB3|uMPG;uMtZ zu`&2dON%aL4i1lD_7S%<&-Mtv(Ug0+?wyT5CsZ+Meq__-#R;dOi~0EJz%hT z;lBIz>o*q66%SDZRku3~U*uNtH5HvhtKx}88Ad@eO}lIaSy|BV0tX6KKET~AP*2ah zkT{ZO@LLKrNTWx1dwEAEl;Q+yv!z4GR9InLLRa&iOw`gXL?W-lY+^K>;8)#hE^0L; zT?o(EZl3jp6DlOauRl%p(g2?M6ADo-n_r2rE=Yv3LGlLp)`JJI{^khkb(NHq9zl+L zjjTH^t_e{Ea2>{@>6Tf35y!^|T~p(~hrL+#R}TW=>gu}sD@ATOsNQo4otWTJSIQUu zG$_5JZwavR#dWT9ZxJmBHF*B}G2FvzG)OBXdo9u&Dosz=;C1HQwyGlWuWz2DC@05b zX_6oD`Y|%-;K2BMN&Bns1#a`d7N`0o+4B2iMbEUf{4uWaD2QJD8)XMv0X+hj!k~}= zz#LE_lXl{_8)@dL1~Qbd{o2@GsWcz9xIVk;O|g}gk%4@&M$2M@WvhR9lztnn9T4^c z?YKrb33>L9<}Tr10X|DWvNXCX-X(i2v7K;iL$T%Oxa(&u)$(Dg`g7X*mf+h|>QlFIm;^QMP(C!f zn)V$2mzPpu?Xuq7QZ_V%cwtGd?j=1(`1+-eYygw?paLDDqdV@EfjL+rcu8(ma!5-*Q(BwTL zA^?&@)jWX;>In#iJ_UTft(6H@F6MWQ*K&+YvXMLE1&52dAV7rL>6TXYQoib|ll7~% z`{t0u=CLwlegL7&3R+rY-x}_l*VzC>l;1?92~X)n$3%nDJ%l72;Wmm`+yqY?kB>H_ z#Kq&-nlr@x2(jMA`A*Sht&eoay4%lju(J#f{@xyIx(0x$o8SSov|#8r40TOHwV=6+ zo2qKxCipX`rYkFo2ZbonBg7?RsfAfsB8YC?w?w>-iHQO1&KCnaR-Qi3!UB4G%U{Wu za`>T-KYb<{TeQg7-n?P``$%{Wv^j^J#AMGizah7JM@ZfyVFEHMtlyl z)2%~g*RPSE!}-NJb?AtJ z-i9#ITaNH#tELHT7xNc3WylAAVup{`zn4ZybhwhgMgfr$iOCvumI{xulN3?}X2eA2 z%aNc-TL=v4dL``Zd$ZNul{f?bFa_UuNNUeJ(^5e9najsaN>8D&hR!VarQj1q<;faf zZ}PC*(TW1_pDLbn6?!`cW-VYDeSW+tH|OCC>Y!V4x17rqu8dXp+V)eDqW3qJ^0}8j z=P58`_^%$3UZWiFx8jV1n5nI;`pVSNFjl}69MiuCv>2pCbtGij`*%v+sQPObUMeBWROh{f`h616O z9R-{cyCGa+YGMMC$^Swb3*2fH^xK~-lOFo)4IGjBEti8C7F=Ak!xAvTz#cqvu->!j z>fhx(wo~KUFsNT|+^nSnQRPjk|40K9W^V3!U@pJoN`YgzsW||)$*n25gt4&~$OsJ7 zHvoJmido*-Z_9{Fbp6x*9&Fo2PRQ+17n|Cf=6PD+xug(tg}CqRPxYVP^q(9bGhPC~ zx11Yx@6cmTfD+vJw<2N-rP}o-8)YC3k)Bo7_g#wb zZ8!T9{V3$l)(j^hrg`P{ZD6GuN;DNT4$tcg@?Y>ujC&IfX?=nB9bWPY`N@YMrR=;;$)^oHwP_FCF6Ce2|D=Ta6SJD!b zYUbJt;9&k;ylyv-8GZpg&TBrxgo4st^YagQeM4X|xPjdZ1i*dYsPZ65>OW}C@p$ik z;5a9ly}o(X{b6cL%mB#|>}56@ybn~%JPKLB8CcnV``=#@{O>Qr;@NfkQpI%BKSW@l zE}p#6V`Q=DPdjYOVTBi#LK0SjKV|Yb+F~hti1$tc8D1oS?;di%XHHhFZwEWW_pNc^ z@(rVAC8@6nqk7;f@R}Y2T~br$;&|ItDQSHq{aU@eHf3I&}x+b?>F$HOw3%n zO_ADc5vHZz^@^ayO>gwm@9@yGcXn1(QTYJC2!#6>zI;kgm}{9+&daM?X=85b0O?_S zVMIR_JUuW46Y^vPnK~gndSoPANbsK)xYI+O+0)&}&Bya{tZ0UF zG+6S|4Q3_KQ0r6-0PI?5`1(`Ku3cN`cP_*|$h>jghhTjd4? zMOfaSKTYFe!nXs_9kkepEx{bb!t8UQAXH)(uauUmshb+;^DEER-st5?L_*Kp=%r_E@daG??9)>LxUTLv)M!J4h?Y0s&Qj^++F#(%%O_^}6$vQN__ z#ALN#<{mnbE!UsP5cdB1Nt#gil5+x^p{!o8UX8}H7aN;vw-8bC^h)RI`V^FvV8j`ryo^@cFklCp!!oCs0ztNHh0@*dlrN zD66gMcWOdPolEB(M!Hd$IQ6eJ;c5%n9IZq4nEG@dKw1!74nDv89(o#|^YVzD!PjI; zn%WOdm>)gL)C!MHx8AHZ=RFKXpzNtCFNY(q-K1n&#NF%faUMTK<*P%+_ozY-A3A$Z zcRjh=bFCxnJi@HVU8*hWHe!{fhQQ|MOE#=`CXMfMAn|F^r%c!sdG+UHmInds>R`Pl zS%cY{R~O@h+23@lM+FBWJ4j_ZIxPD$s!J=gL}gIO&>^t|_+lXpWMsW{o~{}E-c_GI zJyo7aO)3ZGW497~u~TktNC5$p>;(j}bJYnL%cTM`w1YTv8{&`9hb4ZZTpX{htk_SM zy&dZQ@ow1x2M0$soPTljr3S!TkRZ>OqBwXY6|%Xr~kIqpQ@q)J)eNJQv@am+0(Vqyxlq-*Qk3%-1z zGWZTQR9^2|p&fxKfKH_|Lq z{`J+2h(LwMP~6Eie7lXiXY&ejwaA)dTC*{^YJEjgxA zZDryMa*FN2+|5hRLl}ifVg({2cYdH$DNwsI_S?VoysmL!X}cT<2y`SptHg`!Ea&6D zI5^||`ZjfIOM#sxTHbAYT-bf|<)VM7_SWKjVr<$Yy}qNvsRq_Wwxrm!;m+aBmVXyH z%iAe}ag+4;m`$Hd+6RnT)kC4y{9+{K91LZg6=1{ z3kx~);^MO{Rr=CC$hjd3@89b`d=*^h{#UVU8IvG)^5YcOsd1fjK-7Uf4i(Qb@Kj4s z{o-Nx7fB`#IXhuKy0E^6;3(Fv=KF5E2k9r;+h#fWbM;PbEmboU!v00^pRsEfS3XY`;xK)Rv~!5~O+G-qa#=0XZ$OV%PUmv!$?J`qe9mDg z?r=;V8r5r2?e6rJ!C|hRlwa?U2m$Hch1F%{FPLvqx5$+=d24^(=jmGe^AS&*$E0hZ z>m9~{1~XojyBkeLq07Y`0B1hRLtI9AN}V@&D!e%O@pqG;^F#g!#GL2cA1iK)fmpxe zgY}lBeP)KKy6=r%`x>-ioEZ`)e|Ojq8QwoGvodZzU{GR_md%SNpTE2v^XR?bgi%wE&#}oubPai)R!u5H#mAU+M9ASJ|Fz_&01akE=$1} zmmyijDU7;G%-W-};Av~aKdT%lyvJGR`Ugj8w$bwu=>;3(@L*q2ZLJP%bPhdJEY{)T z*&%r0(yhIK3Nt1%6M(Lklh6(mT_x7>$8bOa<@YEZOuTfGlcVEl-)4v4LQba6suIx( z5$q1|nqjnt6eU*K2U)O~I*TkNUFif}4K@zdl(72?rx_ zm`H7{nBVEUIC=)gS|OoD64inM$o#JL`|i0Ee4ScTV%Aw@SLe1B#NbSZ{?{f!l9}+~ zcoi!%bJW?N->fw7WEV0QzkX|NILtPgY++#*6@xB_HS4eR!>;n8yV+Cz1l9?|x zjypbr?(W*O`3>|V~U;V`Jpu^!HIRM6xtFD|H*@+~%~S5{HcuXn}FmA)m{36^=G zT&q3zU{tOB#x$`!jF)Yq!r0VE4UZviqIp14PL9c-wiQ4n;7AwE)W+b$3_CH=%3)Vh z5qu=hkG3x$b{ioHv`MJW3JRHR~@uA`=yoRnm4VS)U@h-6jTyA5+u`zyE-7Hj{#Cu48+k{${FK!Y|Kw482I zlGH0v!>8XpOifL{hhVfzphlSX6^#^gN2q_qL}>#@Q@L<*Ol+uXo~fzHs}%gce}L

hfu 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 Qp1-c5peg@d)-3pc04%tW3jhEB literal 0 HcmV?d00001 diff --git a/src-control/digit_names.py b/src-control/digit_names.py new file mode 100755 index 0000000..8e04e52 --- /dev/null +++ b/src-control/digit_names.py @@ -0,0 +1,33 @@ +# -*- coding: utf-8 -*- + +import sys + +#Start 1st block +Language = "en" + +ENGLISH = {0: "zero", 1: "one", 2: "two", 3: "three", 4: "four", + 5: "five", 6: "six", 7: "seven", 8: "eight", 9: "nine"} +RUSSIAN = {0: "ноль", 1: "один", 2: "два", 3: "три", 4: "четыре", + 5: "пять", 6: "шесть", 7: "семь", 8: "восемь", 9: "девять"} +#End 1st block + +def main(): + if len(sys.argv) == 1 or sys.argv[1] in {"-h", "--help"}: + print("usage: {0} [en|ru] number".format(sys.argv[0])) + sys.exit() + + args = sys.argv[1:] + if args[0] in {"en", "ru"}: + global Language + Language = args.pop(0) + print_digits(args.pop(0)) + + +def print_digits(digits): + dictionary = ENGLISH if Language == "en" else RUSSIAN + for digit in digits: + print(dictionary[int(digit)], end=" ") + print() + + +main()