{ "cells": [ { "cell_type": "markdown", "metadata": {}, "source": [ "\n", "# Арифметические операции\n", "\n", " \n", "**С.В. Лемешевский** (email: `sergey.lemeshevsky@gmail.com`), Институт математики НАН Беларуси\n", "\n", "Date: **Feb 19, 2020**\n", "\n", "Язык Python , благодаря наличию огромного количества библиотек для решения\n", "разного рода вычислительных задач, является конкурентом таким пакетам как Matlab и\n", "Octave. Запущенный в интерактивном режиме, он, фактически, превращается в\n", "мощный калькулятор. В этой главе речь пойдет об арифметических операциях,\n", "доступных в данном языке.\n", "\n", "Как было сказано в предыдущей главе, посвященной типам и модели данных\n", "Python, в этом языке существует три встроенных числовых типа данных:\n", "* целые числа (`int`);\n", "\n", "* вещественные числа (`float`);\n", "\n", "* комплексные числа (`complex`).\n", "\n", "Если в качестве операндов некоторого арифметического выражения используются\n", "только целые числа, то результат тоже будет целое число. Исключением является\n", "операция деления, результатом которой является вещественное число.\n", "При совместном использовании целочисленных и вещественных переменных, результат\n", "будет вещественным.\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "# Арифметические операции с целыми и вещественными числами\n", "
\n", "\n", "Все эксперименты будем проводить в Python, запущенном в интерактивном\n", "режиме.\n", "\n", "\n", "**Сложение.** Складывать можно непосредственно сами числа ..." ] }, { "cell_type": "code", "execution_count": 1, "metadata": { "collapsed": false }, "outputs": [], "source": [ "3 + 2" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "либо переменные, но они должны предварительно быть проинициализированы." ] }, { "cell_type": "code", "execution_count": 2, "metadata": { "collapsed": false }, "outputs": [], "source": [ "a = 3\n", "b = 2\n", "a + b" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Результат операции сложения можно присвоить другой переменной..." ] }, { "cell_type": "code", "execution_count": 3, "metadata": { "collapsed": false }, "outputs": [], "source": [ "a = 3\n", "b = 2\n", "c = a + b\n", "print (c)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "либо ей же самой, в таком случае можно использовать полную или сокращенную\n", "запись, полная выглядит так:" ] }, { "cell_type": "code", "execution_count": 4, "metadata": { "collapsed": false }, "outputs": [], "source": [ "a = 3\n", "b = 2\n", "a = a + b\n", "print (a)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "сокращенная так:" ] }, { "cell_type": "code", "execution_count": 5, "metadata": { "collapsed": false }, "outputs": [], "source": [ "a = 3\n", "b = 2\n", "a += b\n", "print (a)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Все перечисленные выше варианты использования операции сложения могут быть\n", "применены для всех нижеследующих операций.\n", "\n", "**Вычитание.**" ] }, { "cell_type": "code", "execution_count": 6, "metadata": { "collapsed": false }, "outputs": [], "source": [ "4 - 2" ] }, { "cell_type": "code", "execution_count": 7, "metadata": { "collapsed": false }, "outputs": [], "source": [ "a = 5\n", "b = 7\n", "a - b" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "**Деление.**" ] }, { "cell_type": "code", "execution_count": 8, "metadata": { "collapsed": false }, "outputs": [], "source": [ "9 / 3" ] }, { "cell_type": "code", "execution_count": 9, "metadata": { "collapsed": false }, "outputs": [], "source": [ "a = 7\n", "b = 4\n", "a / b" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "**Получение целой части от деления.**" ] }, { "cell_type": "code", "execution_count": 10, "metadata": { "collapsed": false }, "outputs": [], "source": [ "9 // 3" ] }, { "cell_type": "code", "execution_count": 11, "metadata": { "collapsed": false }, "outputs": [], "source": [ "a = 7\n", "b = 4\n", "a // b" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "**Получение дробной части от деления.**" ] }, { "cell_type": "code", "execution_count": 12, "metadata": { "collapsed": false }, "outputs": [], "source": [ "9 % 5" ] }, { "cell_type": "code", "execution_count": 13, "metadata": { "collapsed": false }, "outputs": [], "source": [ "a = 7\n", "b = 4\n", "a % b" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "**Возведение в степень.**" ] }, { "cell_type": "code", "execution_count": 14, "metadata": { "collapsed": false }, "outputs": [], "source": [ "5**4" ] }, { "cell_type": "code", "execution_count": 15, "metadata": { "collapsed": false }, "outputs": [], "source": [ "a = 4\n", "b = 3\n", "a ** b" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "\n", "\n", "\n", "\n", "# Работа с комплексными числами\n", "
\n", "\n", "Для создания комплексного числа можно использовать функцию `complex(a, b)`, в\n", "которую, в качестве первого аргумента, передается действительная часть, в качестве\n", "второго – мнимая. Либо записать число в виде `a + bj`.\n", "\n", "Рассмотрим несколько примеров.\n", "\n", "Создание комплексного числа." ] }, { "cell_type": "code", "execution_count": 16, "metadata": { "collapsed": false }, "outputs": [], "source": [ "z = 1 + 2j\n", "print(z)" ] }, { "cell_type": "code", "execution_count": 17, "metadata": { "collapsed": false }, "outputs": [], "source": [ "x = complex ( 3 , 2 )\n", "print (x)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Комплексные числа можно складывать, вычитать, умножать, делить и возводить в\n", "степень." ] }, { "cell_type": "code", "execution_count": 18, "metadata": { "collapsed": false }, "outputs": [], "source": [ "x + z" ] }, { "cell_type": "code", "execution_count": 19, "metadata": { "collapsed": false }, "outputs": [], "source": [ "x - z" ] }, { "cell_type": "code", "execution_count": 20, "metadata": { "collapsed": false }, "outputs": [], "source": [ "x * z" ] }, { "cell_type": "code", "execution_count": 21, "metadata": { "collapsed": false }, "outputs": [], "source": [ "x / z" ] }, { "cell_type": "code", "execution_count": 22, "metadata": { "collapsed": false }, "outputs": [], "source": [ "x ** z" ] }, { "cell_type": "code", "execution_count": 23, "metadata": { "collapsed": false }, "outputs": [], "source": [ "x ** 3" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "У комплексного числа можно извлечь действительную и мнимую части." ] }, { "cell_type": "code", "execution_count": 24, "metadata": { "collapsed": false }, "outputs": [], "source": [ "x = 3 + 2j\n", "x.real" ] }, { "cell_type": "code", "execution_count": 25, "metadata": { "collapsed": false }, "outputs": [], "source": [ "x.imag" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Для получения комплексносопряженного число необходимо использовать метод\n", "`conjugate()`." ] }, { "cell_type": "code", "execution_count": 26, "metadata": { "collapsed": false }, "outputs": [], "source": [ "x.conjugate()" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "\n", "\n", "\n", "\n", "# Битовые операции\n", "
\n", "\n", "В Python доступны битовые операции, их можно производить над целыми числами.\n", "\n", "**Побитовое И (AND).**" ] }, { "cell_type": "code", "execution_count": 27, "metadata": { "collapsed": false }, "outputs": [], "source": [ ">>> p = 9\n", ">>> q = 3\n", ">>> p & q\n", "1" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "**Побитовое ИЛИ (OR).**" ] }, { "cell_type": "code", "execution_count": 28, "metadata": { "collapsed": false }, "outputs": [], "source": [ ">>> p | q\n", "11" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "**Побитовое Исключающее ИЛИ (XOR).**" ] }, { "cell_type": "code", "execution_count": 29, "metadata": { "collapsed": false }, "outputs": [], "source": [ ">>> p ^ q\n", "10\n", "Инверсия.\n", ">>> ~ p\n", "- 10" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "**Сдвиг вправо и влево.**" ] }, { "cell_type": "code", "execution_count": 30, "metadata": { "collapsed": false }, "outputs": [], "source": [ ">>> p << 1\n", "18\n", ">>> p >> 1\n", "4" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "\n", "\n", "\n", "\n", "# Представление чисел в других системах счисления\n", "
\n", "\n", "В своей повседневной жизни мы используем десятичную систему исчисления, но\n", "при программирования, очень часто, приходится работать с шестнадцатеричной,\n", "двоичной и восьмеричной.\n", "\n", "**Представление числа в шестнадцатеричной системе.**" ] }, { "cell_type": "code", "execution_count": 31, "metadata": { "collapsed": false }, "outputs": [], "source": [ ">>> m = 124504\n", ">>> hex(m)\n", "'0x1e658'" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "**Представление числа в восьмеричной системе.**" ] }, { "cell_type": "code", "execution_count": 32, "metadata": { "collapsed": false }, "outputs": [], "source": [ ">>> oct(m)\n", "'0o363130'" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "**Представление числа в двоичной системе.**" ] }, { "cell_type": "code", "execution_count": 33, "metadata": { "collapsed": false }, "outputs": [], "source": [ ">>> bin(m)\n", "'0b11110011001011000'" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "\n", "\n", "\n", "\n", "# Библиотека (модуль) `math`\n", "
\n", "\n", "В стандартную поставку Python входит библиотека math , в которой содержится\n", "большое количество часто используемых математических функций.\n", "\n", "Для работы с данным модулем его предварительно нужно импортировать." ] }, { "cell_type": "code", "execution_count": 34, "metadata": { "collapsed": false }, "outputs": [], "source": [ "import math" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Рассмотрим наиболее часто используемые функции.\n", "\n", "**Функция `math.ceil(x)`.**\n", "\n", "Возвращает ближайшее целое число большее, чем `x`." ] }, { "cell_type": "code", "execution_count": 35, "metadata": { "collapsed": false }, "outputs": [], "source": [ ">>> math.ceil( 3.2 )\n", "4" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "**Функция `math.fabs(x)`.**\n", "\n", "Возвращает абсолютное значение числа." ] }, { "cell_type": "code", "execution_count": 36, "metadata": { "collapsed": false }, "outputs": [], "source": [ ">>> math.fabs(-7)\n", "7.0" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "**Функция `math.factorial(x)`.**\n", "\n", "Вычисляет факториал `x`." ] }, { "cell_type": "code", "execution_count": 37, "metadata": { "collapsed": false }, "outputs": [], "source": [ ">>> math.factorial( 5 )\n", "120" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "** Функция `math.floor(x)`.**\n", "\n", "Возвращает ближайшее целое число меньшее, чем `x`." ] }, { "cell_type": "code", "execution_count": 38, "metadata": { "collapsed": false }, "outputs": [], "source": [ ">>> math.floor( 3.2 )\n", "3" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "**Функция `math.exp(x)`.**\n", "Вычисляет `e**x`." ] }, { "cell_type": "code", "execution_count": 39, "metadata": { "collapsed": false }, "outputs": [], "source": [ ">>> math.exp( 3 )\n", "20.08553692318766" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "**Функция `math.log2(x)`.**\n", "Логарифм по основанию `2`.\n", "\n", "**Функция `math.log10(x)`.**\n", "\n", "Логарифм по основанию 10.\n", "\n", "**Функция `math.log(x[, base])`.**\n", "\n", "По умолчанию вычисляет логарифм по основанию `e`, дополнительно можно указать\n", "основание логарифма." ] }, { "cell_type": "code", "execution_count": 40, "metadata": { "collapsed": false }, "outputs": [], "source": [ ">>> math.log2( 8 )\n", "3.0\n", ">>> math.log10( 1000 )\n", "3.0\n", ">>> math.log( 5 )\n", "1.609437912434100\n", ">>> math.log( 4 , 8 )\n", "0.666666666666666" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "**Функция `math.pow(x, y)`.**\n", "\n", "Вычисляет значение `x` в степени `y`." ] }, { "cell_type": "code", "execution_count": 41, "metadata": { "collapsed": false }, "outputs": [], "source": [ ">>> math.pow( 3 , 4 )\n", "81.0" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "**Функция `math.sqrt(x)`.**\n", "\n", "Корень квадратный от `x`." ] }, { "cell_type": "code", "execution_count": 42, "metadata": { "collapsed": false }, "outputs": [], "source": [ ">>> math.sqrt( 25 )\n", "5.0" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "**Тригонометрические функции, их мы оставим без примера.**\n", "\n", "* `math.cos(x)`\n", "\n", "* `math.sin(x)`\n", "\n", "* `math.tan(x)`\n", "\n", "* `math.acos(x)`\n", "\n", "* `math.asin(x)`\n", "\n", "* `math.atan(x)`\n", "\n", "И напоследок пару констант.\n", "* `math.pi` — число $\\pi$.\n", "\n", "* `math.e` — число $e$.\n", "\n", "Помимо перечисленных, модуль `math` содержит ещё много различных\n", "функций, за более подробной информацией можете обратиться eна\n", "официальный сайт ().\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "" ] } ], "metadata": {}, "nbformat": 4, "nbformat_minor": 2 }