pyth_01_calc
Заметка 1. Выражения и тип.
курса Математический практикум по Питону.
Шокуров Антон В.
shokurov.anton.v@yandex.ru
http://машинноезрение.рф
Версия 0.21

Аннотация

Вводятся базовые элементы питона (Python версии 3.xx): арифметические и логические выражения, понятие о типе (int, float, bool, str, type) и о его явном/неявном преобразование. Рассматривается и функция печати print. Понятие объекта (на примере, complex), операции над ним и его методы. Также вводится тернарная оператор. Вводится понятие модуля на примере библиотеки math.

Это предварительная версия! Любые замечания приветствуются.

Простые вычисления

Работа с консолью.

Мы таким способом общаемся с компьютером. Все началось с консоли файловой системы, потом всякие мат программы: Maple, ...

Программа предствляется в виде блоков, содержащиш некий код с пояснениями. Предполягается постепенное построение программы, т.е. не сразу все пишется, а за несколько этапов. Промежуточный результат выводится и на основании его пишется новый блок.

Так в целом проще чем срузе писать код, который учитывает все возможные случаи.

Далее идет пример блока (с коментарием).

Вычисления как на калькуляторе

Базовые арифметические операции

В питоне можно выполнять вычисления как на калькуляторе.

Над числами доступны стандартные арифметические операции: +, -, * и /.

Обычное деление:

Также доступны вычисления над целыми числами, так называемые целочисленные вычисления.

Действует правило округление "вниз" (как и для положительных чисел) -- берется нижняя граница.

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

Возведение в степень

Один из немногих языков, где операция возведения в степень является встроенной (в сам язык).

Сложные выражения

Упр. Найди корни квадратного уравнения для заданных коэффициентов. Например, для уравнения x^2 - 5x + 4=0. Подставь их в выражение задающее квадратное уравнение (должен получиться 0).

Вычеты

Деление с остатком

Важно для программирования как такового. Например, для взятия каждого второго элемента из множества.

"Парной" операцией к целочисленному делению (//) является вычисление остатока от деления:

Пусть $a, b \in \mathbb{Z}$(множество целых чисел). При этом пока считается, что $b > 0$.

Напомню, что если $r \in \mathbb{Z}$ остаток от деления $a$ на $b$, то имеет место представление: \begin{equation*} a=r + k*b, \end{equation*} где $k \in \mathbb{Z}$. Также должно быть выполнено: \begin{equation*} 0 \leq r < b. \end{equation*} В согласии с данным:

В случае отрицательного делителя ($b < 0$), остаток, считается, тоже должен быть отрицательным, т.е. \begin{equation*} b < r \leq 0. \end{equation*} Последнее связано с тем, что делитель определяет класс эквивалентности между целыми числами. Операция остаток отображает произвольное число на его класс.

Деление с остатком традиционно вводят для целых чисел. Но ничто не мешает её определить аналогичным образом и для вещественных.

Тип выражения

С каждым выражением связан его тип. В зависимости от него могут вариьероваться поведение других частей программы.

Определение типа

Фактически сначала вычисляется зачение выражение, что и определяет его тип.

Так, сначала вычисляется значение

Потом тип данного числа

Тип типа...

Он называется type

Преобразование типов

Можно принудительно (явно) изменить тип выражения.

Неявное преобразование типа

Обычно выполняется неявное преобразование типа.

В этом смысле нужно быть предельно аккуратным при написании выражений. Может произойти нежелательное преобразование типа.

Явное преобразование типа

Можно выполнить явное преобразование типа.

и оно же в вещественном представлении.

На будущее... это фактически вызов конструктора нового объекта.

Можно наоброт. Из вещественного получить целое.

Замечу, что:

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

Математические функции

Вприципе этого должно быть достаточно. И любое вычисление можно сделать. Например, для вычисления синуса вспоимнить нужный ряд и вычислить. Последнее не очень продуктивно. Зачем так поступать? Ведь скорее всего код для вычисления синуса уже кем-то написан. Лучше воспользоватся чем-то готовым.

Библиотечные функции

Для расширения возможностей естественно необходимо применять сторонний код, а именно библиотеки. В следующем блоке показано как это делается (вызываются библиотечные функции) на примере библиотеки math: это библиотека для работы с векторами, матрицами. Она же применяется для вычисления стандартных функций: тригонометрических, экспонента, логарифм, степень и др.

Библиотека Math

Math относится к стандартным библиотекам идущим вместе с питоном.

Ну раз так, то можно и так

Следует отметить, то как функция называется: не сама по себе (sin), а с префиксом "math.". Последнее связано с тем, что функция sin из библиотеки math. Последнее сделано, чтобы функции из разных библиотек не перепутались: не перекрыли друг друга при одинаковом названии.

В языках программирования, в частности, в питоне применение функции называется вызовом.

Имеется множество библиотечных функций.

Но, название math длинное. Есть расширение данной команды для загрузки библиотеки и присвоение ей сокращенного имени.

Теперь можно использовать сокращенное название mt вместо полного math.

Используется префикс np так как она была загружена в систему с сокращенным названием mt. Поэтому такое обозначение.

Итого, в math существуют тригонометрические функции: sin, cos, tan, и их обратные: asin, acos, atan. Полный список можно посмотреть в документации.

https://docs.python.org/3/library/math.html

Вызов по значению

При вызове функции сначала вычисляются значения всех её аргументов, а потом эти значения подаются вызываемой функции. Отсуюда термин "вызов по значению". Подчеркну, что сами выражения не доступны вызываемой функции. Доступно только значение.

Если вдруг не понятно, на всякий случай упомину и случай функция от фукнции:

Упр. Реши уравнение sin(ax+b)=c при заданных значений a, b и c. Например, при c=1, b=pi/2, a=2

Логическое выражение

К вычислимым выражениям относятся не только арифметические, но и логичекие.

Неравенства

Неравенства и булевский тип

Например, можно сложить два числа, а можно вычислить истинность утверждения, что первое число больше второго.

Проверяем истинность того, что первое число больше второго.

Помимо строгих неравенств имеются и нестрогие.

Проверка на не/равенство

Ну у конечно проверка на равенство

Проверяется по сути.

Но

Проверка на неравенство:

Практика

Четное ли число

Сложные логические выражения

Над логическими значениями доступны свои операции. Они менее известны, поэтому дадим некоторое пояснение. Следующие операции дву-арные (т.е. имеют два аргумента)

Для вычисления над логическими выражениями существует и унарная операция:

Практика

Проверка на нечетность

С арифметическими выражениями

Итого, можно применить их с арифметическими выражениями.

Практика

Более практичные примеры связаны с проверкой принадлежности числа интервалу

Аналогично.

Внимание!!

В отличие от многих языков программировния питон поддерживает сложные логические неравенства.

Приоритет операций

У арифметических операций (+,-,*,/) тоже есть приоритет. Но он проходится в школе.

Как и всегда для логических выражений между операциями существуют приоритеты (У И выше приоритет чем у ИЛИ). Но лучше всегда ставить скобки.

Другая расстановка скобок.

Преобразование типа с bool

Из bool в число

Можно и из булевского получить целое. Есть соглашение на данный счет.

Благодаря этому например можно такие вычисления делать

Из числа в bool

Но и число можно превратить в булевское значение.

Упражнения. Вычислить абсолютное значение числа использую смесь логических и арифметических выражений.

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

Позволяет в зависимости от истинности выражения вернуть разные зачения.

Например, если число отрицательное, то вернуть -1, иначе 0.

Без else нельзя. Оператор единая сущность включающая как if, так и else.

Можно строить и цепочки.

Возвращать можно конечно и другие типы данных. Например, текстовые строки.

Текстовый тип

Создание

Строчки текста задаются в кавычках (либо одинарных либо двойных)

Применение

Тогда можно такую условную конструкцию написать.

Проверка того является ли -1 корнем.

Проверка рабочего времени.

В задачах на проверку на четность.

Операторы

Вычисление длины строки

Длина строки, т.е. количество символом в её представлении.

Для чисел не срабатывает

Арифметические операции над строками

Строки можно складывать.

Последнее показывает, что идентичные по виду операции могут отличатся по функционалу для объектов иных типов.

Умножать нельзя.

как и вычитать.

Доступна операция умножения, но...

Вывод printом

Функция print

Красивый вывод осуществляется функций print, где аргументы печатаются подряд.

print это функция!

Использование другого разделителя вместо пробела.

Подмена символа конца строки

Но так не сработает...

Печать текстовых строк.

Могли бы и сделав разделяющий символ между элементами равным пустой строке.

Специальные символы

'\n' -- Новая строка

'\t' -- Табуляция

Переделаем вывод с табуляцией.

В одну строчку

Можно и наоборот сделать так что отдельные printы печатали в одной строке. Для этого символ в конце строки нужно заменить. По умолчанию это \n, т.е. переход на новую.

А так по умолчанию.

Упражнение Написать программу рисующую табличку:

Упорядочивание

Вместо операции + можно применить и другие. Например, операцию меньше, больше. Строчки можно сравнивать посредством логических операций в алфавитном порядке.

Проверка на равенство по сути, т.е. как строчки в обычном поимании.

Сохраненное значение

Возьмем некоторое выражение

Замечу, что предыдущий результат вычисления сохраняется в сущности _.

Тогда им можно воспользоватся. Как в математике, в выражении вместо _ будет подставлено само значение.

Например, так можно вычислить корни отмеченного уравнения.

Объект comples

Введем понятие об объекте на примере комплексных чисел. Напомню, что оно сотоит из вещественной и мнимой части.

Создаем комплекскное число в явном виде. Часть языка питон.

Над комлексными числами имеются стандартные арифметические операции.

Вызовем квадратной корень библиотечной функцией из math.

Библиотека честно пишет про область определения, что мол отрицательные числа не входят.

А с комплексными числами она не умеет работать.