Как выполнять математические действия с помощью операторов python 3
Содержание:
- Операторы присваивания
- Вспомогательные методы
- Вычисления
- Когда использовать Decimal и Fraction?
- Целые числа (int)
- Округление при работе с числами ограниченной точности
- Способы округления чисел
- Системы счисления
- Сравнения
- Тригонометрия
- Встроенные функции
- Разделение строки с использованием разделителя
- Использование модуля pickle на своих объектах
- Операции сравнения
- Методы вещественных чисел
- Решение реальной задачи с использованием sqrt
- Абсолютная величина
- Комплексные числа[править]
Операторы присваивания
Наиболее распространённым оператором присваивания является знак равенства (=). Он присваивает переменной слева значение справа. К примеру, в выражении v = 23 переменной v было присвоено значение 23.
В программировании часто используются составные операторы присваивания, которые выполняют операцию со значением переменной, а затем присваивают этой переменной полученное новое значение. Составные операторы объединяют арифметический оператор с оператором =. Например:
Составной оператор += выполнил сложение, а затем присвоил переменной w, значение, полученное в результате сложения.
Составные операторы часто используются в циклах.
Это позволяет автоматизировать процесс умножения чисел в заданном диапазоне.
В Python есть составные операторы присваивания для каждой математической операции:
Операторы присваивания позволяют постепенно увеличить или уменьшить значение, а также автоматизировать некоторые вычисления.
Вспомогательные методы
К ним относят:
• float.as_integer_ratio() — это пара целых чисел int, отношение которых равно этому числу;
• float.is_integer() — функция определят, является ли данное значение целым числом;
• float.hex() — функция переводит float в 16-тиричную систему счисления, то есть в hex;
• classmethod float.fromhex(s) — функцию используют для получения float из 16-тиричной строки.
Кроме стандартных выражений, в Python есть и специальные полезные модули. Например, модуль math позволяет выполнять более сложные арифметические функции:
>>> >>> import math >>> math.pi 3.141592653589793 >>> math.sqrt(85) 9.219544457292887
А вот модуль random запускает генератор случайных чисел, позволяя реализовать функции случайного выбора:
>>> >>> import random >>> random.random() 0.75849839767373282
Вычисления
Вычисления пределов
Для вычисления пределов в SymPy предусмотрен очень простой синтаксис, а именно . Например, если вы хотите вычислить предел функции , где , то надо написать .
sym.limit(sym.sin(x) / x, x, 0) # результат 1
Также можно вычислять пределы, которые стремятся к бесконечности.
sym.limit(x, x, sym.oo) # результат oo sym.limit(1 / x, x, sym.oo) # результат 0 sym.limit(x ** x, x, 0) # результат 1
Дифференцирование
Для дифференцирования выражений в есть функция . Ниже даны примеры ее работы.
sym.diff(sym.sin(x), x) # результат cos(?) sym.diff(sym.sin(2 * x), x) # результат 2cos(2?) sym.diff(sym.tan(x), x)
Проверим результат последней функции при помощи определения производной через предел.
sym.limit((sym.tan(x + y) - sym.tan(x)) / y, y, 0)
Результат тот же.
Также при помощи этой же функции могут быть вычислены производные более высоких порядков. Синтаксис функции будет следующим: . Ниже приведено несколько примеров.
sym.diff(sym.sin(2 * x), x, 1) # результат 2cos(2?) sym.diff(sym.sin(2 * x), x, 2) # результат −4sin(2?) sym.diff(sym.sin(2 * x), x, 3) # результат −8cos(2?)
Разложение в ряд
Для разложения выражения в ряд Тейлора используется следующий синтаксис: .
sym.series(sym.cos(x), x)
sym.series(1/sym.cos(x), x)
Интегрирование
В SymPy реализована поддержка определенных и неопределенных интегралов при помощи функции . Интегрировать можно элементарные, трансцендентные и специальные функции. Интегрирование осуществляется с помощью расширенного алгоритма Риша-Нормана. Также используются различные эвристики и шаблоны. Вот примеры интегрирования элементарных функций:
sym.integrate(sym.sin(x), x) # результат −cos(?) sym.integrate(sym.log(x), x) # результат ?log(?)−?
Также несложно посчитать интеграл и от специальных функций. Возьмем, например, функцию Гаусса:
sym.integrate(sym.exp(-x ** 2) * sym.erf(x), x)
Результат вычисления можете посмотреть сами. Вот примеры вычисления определенных интегралов.
sym.integrate(x**3, (x, -1, 1)) # результат 0 sym.integrate(sym.sin(x), (x, 0, sym.pi / 2)) # результат 1 sym.integrate(sym.cos(x), (x, -sym.pi / 2, sym.pi / 2)) # результат 2
Также можно вычислять определенные интегралы с бесконечными пределами интегрирования (несобственные интегралы).
sym.integrate(sym.exp(-x), (x, 0, sym.oo)) # результат 1
Решение уравнений
При помощи можно решать алгебраические уравнения с одной или несколькими переменными. Для этого используется функция .
sym.solveset(x ** 4 - 1, x) # результат {−1,1,−?,?}
Как можно заметить, первое выражение функции приравнивается к и решается относительно . Также возможно решать некоторые уравнения с трансцендентными функциями.
sym.solveset(sym.exp(x) + 1, x) # результат {?(2??+?)|?∈ℤ}
Системы линейных уравнений
способна решать широкий класс полиномиальных уравнений. Также при помощи данной библиотеки можно решать и системы уравнений. При этом переменные, относительно которых должна быть разрешена система, передаются в виде кортежа во втором аргументе функции , которая используется для таких задач.
solution = sym.solve((x + 5 * y - 2, -3 * x + 6 * y - 15), (x, y)) solution, solution # результат (-3, 1)
Факторизация
Другим мощным методом исследования полиномиальных уравнений является факторизация многочленов (то есть представление многочлена в виде произведения многочленов меньших степеней). Для этого в предусмотрена функция , которая способна производить факторизацию очень широкого класса полиномов.
f = x ** 4 - 3 * x ** 2 + 1 sym.factor(f)
sym.factor(f, modulus=5)
Булевы уравнения
Также в реализована возможность решения булевых уравнений, что по сути означает проверку булевого выражения на истинность. Для этого используется функция .
sym.satisfiable(x & y) # результат {x: True, y: True}
Данный результат говорит нам о том, что выражение будет истинным тогда и только тогда, когда и истинны. Если выражение не может быть истинным ни при каких значениях переменных, то функция вернет результат .
sym.satisfiable(x & ~x) # результат False
Когда использовать Decimal и Fraction?
Потребность в максимальной точности расчетов на практике чаще всего возникает в отраслях и ситуациях, где некорректно выбранная точность расчетов может обернуться серьезными финансовыми потерями:
- Обмен валют. Особенно если этот процесс подразумевает не просто конвертацию евро в рубли, тенге или иную валюту, а выполнение более сложных операций.
- Масштабируемые расчеты. К примеру, на фабрике начинают готовить печенье по бабушкиному рецепту, в котором упоминается «1/3 столовой ложки» определенного ингредиента. Сколько именно литров или миллилитров составит эта треть, если применять ее не к одной порции печенья, а к промышленным масштабам? А сколько это составит в пересчете на «неродную» систему мер, то есть фунтов или унций?
- Работа с иррациональными числами. Если вы планируете запускать спутник или возводить энергетическую станцию, точность расчетов необходимо задать еще до того, как вы приступите к самым первым вычислениям. И оповестить об этом всех, кто имеет хоть какое-то отношение к проекту.
Таким образом, этих двух модулей должно быть достаточно, чтобы помочь вам выполнять общие операции как с десятичными, так и с дробными числами. Как мы уже говорили, вы можете использовать эти модули вместе с математическим модулем для вычисления значения всех видов математических функций в желаемом формате.
Модуль Decimal незаменим, если нужно считать деньги: с его помощью вы сможете подсчитать точную сумму, вплоть до копеек.
Fraction считает просто и честно: любители онлайн-игр приспособили его для подсчетов в игровой математике.
Целые числа (int)
В Python любое число, состоящее из десятичных цифр без префикса, интерпретируется как десятичное число типа
Целые числа в Python представлены только одним типом – PyLongObject, реализация которого лежит в longobject.c, а сама структура выглядит так:
Любое целое число состоит из массива цифр переменной длины, поэтому в Python 3 в переменную типа может быть записано число неограниченной длины. Единственное ограничение длины – это размер оперативной памяти.
Целые числа могут записываться не только как десятичные, но и как двоичные, восьмеричные или шестнадцатеричные. Для этого перед числом нужно написать символы:
- 0b (0B) – для двоичного представления;
- 0o (0O) – для восьмеричного представления;
- 0x (0X) – для шестнадцатеричного представления.
Округление при работе с числами ограниченной точности
Реальные физические величины всегда измеряются с некоторой конечной точностью, которая зависит от приборов и методов измерения и оценивается максимальным относительным или абсолютным отклонением неизвестного истинного значения от измеренного, что в десятичном представлении значения соответствует либо определённому числу значащих цифр, либо определённой позиции в записи числа, все цифры после (правее) которой являются незначащими (лежат в пределах погрешности измерения). Сами измеренные параметры записываются с таким числом знаков, чтобы все цифры были надёжными, возможно, последняя — сомнительной. Погрешность при математических операциях с числами ограниченной точности сохраняется и изменяется по известным математическим законам, поэтому когда в дальнейших вычислениях возникают промежуточные значения и результаты с больши́м числом цифр, из этих цифр только часть являются значимыми. Остальные цифры, присутствуя в значениях, фактически не отражают никакой физической реальности и лишь отнимают время на вычисления. Вследствие этого промежуточные значения и результаты при вычислениях с ограниченной точностью округляют до того количества знаков, которое отражает реальную точность полученных значений. На практике обычно рекомендуется при длинных «цепочных» ручных вычислениях сохранять в промежуточных значениях на одну цифру больше. При использовании компьютера промежуточные округления в научно-технических приложениях чаще всего теряют смысл, и округляется только результат.
Так, например, если задана сила 5815 гс с точностью до грамма силы и длина плеча 1,40 м с точностью до сантиметра, то момент силы в кгс по формуле M=(mg)⋅h{\displaystyle M=(mg)\cdot h}, в случае формального расчёта со всеми знаками, окажется равным: 5,815 кгс • 1,4 м = 8,141 кгс•м. Однако если учесть погрешность измерения, то мы получим, что предельная относительная погрешность первого значения составляет 1/5815 ≈ 1,7•10−4, второго — 1/140 ≈ 7,1•10−3, относительная погрешность результата по правилу погрешности операции умножения (при умножении приближённых величин относительные погрешности складываются) составит 7,3•10−3, что соответствует максимальной абсолютной погрешности результата ±0,059 кгс•м! То есть в реальности, с учётом погрешности, результат может составлять от 8,082 до 8,200 кгс•м, таким образом, в рассчитанном значении 8,141 кгс•м полностью надёжной является только первая цифра, даже вторая — уже сомнительна! Корректным будет округление результата вычислений до первой сомнительной цифры, то есть до десятых: 8,1 кгс•м, или, при необходимости более точного указания рамок погрешности, представить его в виде, округлённом до одного-двух знаков после запятой с указанием погрешности: 8,14 ± 0,06 кгс•м.
Округление рассчитанного значения погрешности
Обычно в окончательном значении рассчитанной погрешности оставляют только первые одну-две значащие цифры. По одному из применяемых правил, если значение погрешности начинается с цифр 1 или 2(по другому правилу — 1, 2 или 3), то в нём сохраняют две значащих цифры, в остальных случаях — одну, например: 0,13; 0,26; 0,3; 0,8. То есть каждая декада возможных значений округляемой погрешности разделена на две части. Недостаток этого правила состоит в том, что относительная погрешность округления изменяется значительным скачком при переходе от числа 0,29 к числу 0,3. Для устранения этого предлагается каждую декаду возможных значений погрешности делить на три части с менее резким изменением шага округления. Тогда ряд разрешённых к употреблению округлённых значений погрешности получает вид:
- 0,10; 0,12; 0,14; 0,16; 0,18;
- 0,20; 0,25; 0,30; 0,35; 0,40; 0,45;
- 0,5; 0,6; 0,7; 0,8; 0,9; 1,0.
Однако при использовании такого правила последние цифры самого результата, оставляемые после округления, также должны соответствовать приведённому ряду.
Пересчёт значений физических величин
Пересчёт значения физической величины из одной системы единиц в другую должен производиться с сохранением точности исходного значения. Для этого исходное значение в одних единицах следует умножить (разделить) на переводной коэффициент, часто содержащий большое количество значащих цифр, и округлить полученный результат до количества значащих цифр, обеспечивающего точность исходного значения. Например, при пересчёте значения силы 96,3 тс в значение, выраженное в килоньютонах (кН), следует умножить исходное значение на переводной коэффициент 9,80665 (1 тс = 9,80665 кН). В результате получается значение 944,380395 кН, которое необходимо округлить до трёх значащих цифр. Вместо 96,3 тс получаем 944 кН.
Способы округления чисел
Для округления чисел придумано много способов, они не лишены недостатков, однако часто используются для решения задач. Разберёмся в тонкостях каждого из них.
Если используется стандартная библиотека math, то в начале кода её необходимо подключить. Сделать это можно, например, с помощью инструкции: .
math.ceil() – округление чисел в большую сторону
Функция получила своё имя от термина «ceiling», который используется в математике для описания числа, которое больше или равно заданному.
Любая дробь находится в целочисленном интервале, например, 1.2 лежит между 1 и 2. Функция определяет, какая из границ интервала наибольшая и записывает её в результат округления.
Пример:
math.ceil(5.15) # = 6 math.ceil(6.666) # = 7 math.ceil(5) # = 5
Важно помнить, что функция определяет наибольшее число с учётом знака. То есть результатом округления числа -0.9 будет 0, а не -1.
math.floor() – округление чисел в меньшую сторону
Функция округляет дробное число до ближайшего целого, которое меньше или равно исходному. Работает аналогично функции , но с округлением в противоположную сторону.
Пример:
math.floor(7.9) # = 7 math.floor(9.999) # = 9 math.floor(-6.1) # = -7
math.trunc() – отбрасывание дробной части
Возвращает целое число, не учитывая его дробную часть. То есть никакого округления не происходит, Python просто забывает о дробной части, приводя число к целочисленному виду.
Примеры:
math.trunc(5.51) # = 5 math.trunc(-6.99) # = -6
Избавиться от дробной части можно с помощью обычного преобразования числа к типу int. Такой способ полностью эквивалентен использованию .
Примеры:
int(5.51) # = 5 int(-6.99) # = -6
Нормальное округление
Python позволяет реализовать нормальное арифметическое округление, использовав функцию преобразования к типу int.
И хотя работает по другому алгоритму, результат её использования для положительных чисел полностью аналогичен выводу функции floor(), которая округляет числа «вниз». Для отрицательных аналогичен функции ceil().
Примеры:
math.floor(9.999) # = 9 int(9.999) # = 9 math.ceil(-9.999) # = -9 int(-9.999) # = -9
Чтобы с помощью функции int() округлить число по математическим правилам, необходимо добавить к нему 0.5, если оно положительное, и -0.5, если оно отрицательное.
Тогда операция принимает такой вид: int(num + (0.5 if num > 0 else -0.5)). Чтобы каждый раз не писать условие, удобно сделать отдельную функцию:
def int_r(num): num = int(num + (0.5 if num > 0 else -0.5)) return num
Функция работает также, как стандартная функция округление во второй версии Python (арифметическое округление).
Примеры:
int_r(11.5) # = 12 int_r(11.4) # = 11 int_r(-0.991) # = -1 int_r(1.391) # = 1
round() – округление чисел
round() – стандартная функция округления в языке Python. Она не всегда работает так, как ожидается, а её алгоритм различается в разных версиях Python.
В Python 2
Во второй версии Python используется арифметическое округление. Оно обладает постоянно растущей погрешностью, что приводит к появлению неточностей и ошибок.
Увеличение погрешности вызвано неравным количеством цифр, определяющих, в какую сторону округлять. Всего 4 цифры на конце приводят к округлению «вниз», и 5 цифр к округлению «вверх».
Помимо этого, могут быть неточности, например, если округлить число 2.675 до второго знака, получится число 2.67 вместо 2.68. Это происходит из-за невозможности точно представить десятичные числа типа «float» в двоичном коде.
В Python 3
В третьей версии Python используется банковское округление. Это значит, что округление происходит до самого близкого чётного.
Такой подход не избавляет от ошибок полностью, но уменьшает шанс их возникновения и позволяет программисту добиться большей точности при вычислениях.
Примеры:
round(3.5) # = 4 round(9.5) # = 10 round(6.5) # = 6 round(-6.5) # = -6 round(-7.5) # = -8
Но если вам по каким то причинам нужно округление как в Python 2, то можно воспользоваться функцией написанной нами выше на основе приведения к целому числу.
Округление до сотых
У функции есть ещё один аргумент. Он показывает до какого количества знаков после запятой следует округлять. Таким образом, если нам надо в Python округлить до сотых, этому параметру следует задать значение 2.
Пример округления до нужного знака:
round(3.555, 2) # = 3.56 round(9.515,1) # = 9.5 round(6.657,2) # = 6.66
Системы счисления
Python поддерживает десятичные, двоичные, восьмеричные и шестнадцатеричные целые числа, причем не накладывается никаких ограничений на величину (длину) числа, лишь бы хватило памяти для его хранения.
Десятичные целые числа создаются, как обычно, с помощью десятичных цифр:
причем, в десятичной системе счисления ни одно число, кроме нуля не может начинаться с цифры \(0\), что в общем-то и ежу понятно, но это значит что отбрасывания незначащих нулей не происходит, а их наличие приводит к ошибке:
Двоичные числа состоят из префикса (или ) и двоичных цифр: \(0\) и \(1\):
Восьмеричные числа начинаются с префикса () и могут содержать только восьмиричные цифры: \(0\), \(1\), \(2\), \(3\), \(4\), \(5\), \(6\) и \(7\):
Шестнадцатеричные числа начинаются с префикса () и могут содержать как все десятичные цифры, так и символы латинского алфавита: (или ), которые в данном случае выступают в роли цифр:
В языках со строгой типизацией необходимо указывать как тип числа, так и то, что создаваемый объект сам является числом. Но в Python такой необходимости нет, интерпретатор сам, на основе анализа , способен понять что перед ним: число или нет, целое или вещественное, восьмеричное или двоичное.
Кстати, благодаря встроенной функции мы можем перевести в десятичную систему счисления, любое число представленное в другой системе счисления с основанием меньшим \(37\). Интересующее число указывается в виде строки в первом аргументе, а система счисления в котором оно представлено в виде целого числа во втором аргументе:
Сравнения
Операторы сравнения используются для сравнения двух значений. Результатом всегда является логическое значение — или .
Список операторов сравнения:
- ==: возвращает True, если оба значения равны.
- ! =: возвращает True, если оба операнда не равны.
- >: возвращает True, если левый операнд больше правого.
- <: возвращает True, если левый операнд меньше правого.
- > =: возвращает True, если левое значение больше или равно правому.
- <=: возвращает True, если левое значение меньше или равно правому значению.
Давайте посмотрим на пример.
x = 10 y = 20 print(f'equals = {x == y}') print(f'not equals = {x != y}') print(f'greater than = {x > y}') print(f'less than = {x < y}') print(f'greater than or equal to = {x >= y}') print(f'less than or equal to = {x <= y}')
Вывод:
Эти операторы работают и со строками. Строка считается большей, чем другая строка, если она идет после нее лексикографически. Например, «Привет» больше, чем «Привет» при лексикографическом сравнении.
Тригонометрия
В Python можно работать с углами, радианами, косинусами, синусами, тангенсами и т.д. Конвертация радиан в градусы происходит через функцию :
>>> pi = math.pi >>> math.degrees(pi) 1 80.0 >>> math.degrees(pi/2) 90.0 >>> math.degrees(pi/4) 45.0 >>> math.degrees(pi/3) 59.99999999999999 >>> math.degrees(pi/6) 29.999999999999996
В двух последних случаях счетчик не дошел до 60.0 и 30.0 градусов, соответственно. Для этого можно воспользоваться округлением, рассмотренным выше.
Для конвертации градусов в радианы используется функция :
>>> math.radians(180) 3.141592653589793 >>> math.radians(60) 1.0471975511965976
Тригонометрические функции принимают в качестве аргументов значение в радианах:
>>> math.cos(pi) -1.0 >>> math.sin(pi/2) 1.0 >>> math.sin(pi) 1.2246467991473532e-16 >>> math.tan(pi/4) 0.9999999999999999
Полный список тригонометрических функций можно посмотреть в официальной документации Python [].
Встроенные функции
Для операции округления в Python есть встроенные функции – и
round
– округляет число (number) до ndigits знаков после запятой. Это стандартная функция, которая для выполнения не требует подключения модуля math.
По умолчанию операция проводится до нуля знаков – до ближайшего целого числа. Например:
Чтобы получить целый показатель, результат преобразовывают в .
Синтаксически функция вызывается двумя способами.
- – это округление числа до целого, которое расположено ближе всего. Если дробная часть равна 0,5, то округляют до ближайшего четного значения.
- – данные округляют до знаков после точки. Если округление проходит до сотых, то равен «2», если до тысячных – «3» и т.д.
int
– встроенная функция, не требующая подключения дополнительных модулей. Её функция – преобразование действительных значений к целому путем округления в сторону нуля. Например
Для положительных чисел функция аналогична функции , а для отрицательных – аналогично . Например:
Чтобы число по int преобразовать по математическим правилам, нужно выполнить следующие действия.
- Если число положительное, добавить к нему 0,5.
- Если число отрицательное, добавить -0,5.
Синтаксически преобразование оформляется так:
Разделение строки с использованием разделителя
Python может разбивать строки по любому разделителю, указанному в качестве параметра метода . Таким разделителем может быть, например, запятая, точка или любой другой символ (или даже несколько символов).
Давайте рассмотрим пример, где в
качестве разделителя выступает запятая
и точка с запятой (это можно использовать
для работы с CSV-файлами).
print("Python2, Python3, Python, Numpy".split(',')) print("Python2; Python3; Python; Numpy".split(';'))
Результат:
Как видите, в результирующих списках
отсутствуют сами разделители.
Если вам нужно получить список, в
который войдут и разделители (в качестве
отдельных элементов), можно разбить
строку по шаблону, с использованием
регулярных выражений (см. ). Когда вы берете шаблон в
захватывающие круглые скобки, группа
в шаблоне также возвращается как часть
результирующего списка.
import re sep = re.split(',', 'Python2, Python3, Python, Numpy') print(sep) sep = re.split('(,)', 'Python2, Python3, Python, Numpy') print(sep)
Результат:
Если вы хотите, чтобы разделитель был частью каждой подстроки в списке, можно обойтись без регулярных выражений и использовать list comprehensions:
text = 'Python2, Python3, Python, Numpy' sep = ',' result = print(result)
Результат:
Использование модуля pickle на своих объектах
протокол
Сериализация собственных объектов.
-
Если вы хотите, чтобы после десериализации вашего класса был вызыван , вы можете определить , который должен вернуть кортеж аргументов, который будет отправлен в . Заметьте, что этот метод работает только с классами старого стиля.
-
Для классов нового стиля вы можете определить, какие параметры будут переданы в во время десериализации. Этот метод так же должен вернуть кортеж аргументов, которые будут отправлены в .
-
Вместо стандартного атрибута , где хранятся атрибуты класса, вы можете вернуть произвольные данные для сериализации. Эти данные будут переданы в во время десериализации.
-
Если во время десериализации определён , то данные объекта будут переданы сюда, вместо того чтобы просто записать всё в . Это парный метод для : когда оба определены, вы можете представлять состояние вашего объекта так, как вы только захотите.
-
Если вы определили свой тип (с помощью Python’s C API), вы должны сообщить Питону как его сериализовать, если вы хотите, чтобы он его сериализовал. вызывается когда сериализуется объект, в котором этот метод был определён. Он должен вернуть или строку, содержащую имя глобальной переменной, содержимое которой сериализуется как обычно, или кортеж. Кортеж может содержать от 2 до 5 элементов: вызываемый объект, который будет вызван, чтобы создать десериализованный объект, кортеж аргументов для этого вызываемого объекта, данные, которые будут переданы в (опционально), итератор списка элементов для сериализации (опционально) и итератор словаря элементов для сериализации (опционально).
-
Иногда полезно знать версию протокола, реализуя . И этого можно добиться, реализовав вместо него . Если реализован, то предпочтение при вызове отдаётся ему (вы всё-равно должны реализовать для обратной совместимости).
Операции сравнения
Для сравнения чисел, доступно \(8\) операций сравнения, причем все они имеют одинаковый приоритет:
№ | Операция | Результат | Замечание |
---|---|---|---|
1 | True если x меньше y, иначе False | ||
2 | True если x меньше или равно y, иначе False | ||
3 | True если x больше y, иначе False | ||
4 | True если x больше или равно y, иначе False | ||
5 | True если x равно y, иначе False | ||
6 | True если x не равно y, иначе False | ||
7 | True если x и y это один и тот же объект, иначе False | ||
8 | True если x и y это не один и тот же объект, иначе False |
Важно: приоритет операций сравнения ниже математических и побитовых операций.
Наряду с оператором сравнения значений чисел и , в Python имеются операторы и , которые позволяют выяснить, являются сравниваемые значения одним и тем же объектом или нет. Например:
Не смотря на то, что значения a и b равны, в памяти компьютера они хранятся как разные объекты:
Однако, придумать для данного оператора сколь-нибудь полезное практическое применение, относительно математических операций я не могу.
В Python сравнение является эквивалентным т.е. сравнения связаные оператором в произвольные цепочки могут быть записаны в более компактной форме. Выполнение таких выражений начинается слева направо и останавливается как только будет получено первое значение False. Это означает, что если в выражении сравнение вернет False то сравнение выполняться не будет.
Методы вещественных чисел
Вещественные числа – это объекты, которые обладают следующими методами:
- float.as_integer_ratio()
- возвращает пару целых чисел (кортеж), первое из которых равно числителю а второе всегда положительному знаменателю обыкновенной дроби, значение которой точно совпадает с указанным исходным числом типа float:
Появление таких больших чисел связано с тем, что числа типа float на самом деле не являются десятичными дробями, и хранятся в памяти с небольшой погрешностью:
- float.is_integer()
- возвращает True если дробная часть числа равна \(0\) и False если нет:
Python позволяет преобразовывать вещественные числа из десятичной системы счисления в шестнадцатеричную и обратно. Создание вещественных чисел из их шестнадцатеричного представления, позволяет избежать погрешности которая неминуемо возникает при переводе десятичных чисел в двоичное представление. Шестнадцатеричные вещественные числа в Python задаются строкой вида:
где – это необязательный знак, который может быть как или ; – и – целая и дробная части которые должны обязательно содержать хотя бы по одной цифре, – уже знакомый нам префикс, обозначающий шестнадцатеричные числа и – экспонента в виде десятичного целого числа со знаком или без.
Показатель степени является степенью двойки, например, перевод числа из шестнадцатеричной системы счисления в десятичную будет выглядеть следующим образом:
Применение обратного преобразования дает другую шестнадцатеричную строку, которая, однако, представляет тоже самое число:
- float.hex()
- возвращает представление числа в шестнадцатеричной системе счисления:
- classmethod float.fromhex(s)
- метод класса для преобразования шестнадцатеричной строки s в число типа float:
Решение реальной задачи с использованием sqrt
Корень – дитя геометрии. Когда Пифагор доказал свою знаменитую теорему, людям тут же захотелось вычислять стороны треугольников, проверять прямоту внешних углов и сооружать лестницы нужной длины.
Соотношение a2 + b2 = c2, где «a» и «b» – катеты, а «c» – гипотенуза – естественным образом требует извлекать корни при поиске неизвестной стороны. Python-а под рукой у древних греков и вавилонян не было, поэтому считать приходилось методом приближений. Жизнь стала проще, но расчет теоремы Пифагора никто не отменял и в XXI веке.
Решим задачку про вышку сотовой связи. Заказчик требует рассчитать высоту сооружения, чтобы радиус покрытия был 23 километра. Мы неспешно отходим на заданное расстояние от предполагаемого места строительства и задумчиво смотрим под ноги. В голове появляются очертания треугольника с вершинами:
- Ваше местоположение;
- Центр Земли;
- Пиковая высота вышки;
Модель готова, приступаем к написанию кода:
Расчёт выполнен, результат заказчику предоставлен. Можно идти пить чай и радоваться тому, что теперь ещё больше людей смогут звонить родным и сидеть в интернете.
Абсолютная величина
Встроенная функция abs() возвращает абсолютную величину указанного числа. В математике абсолютная величина, или модуль числа – это неотрицательное число, выражающее расстояние от этого числа до нуля. Например, абсолютная величина 15 – это 15, а -75 – число 75. Абсолютная величина 0 равна 0.
Абсолютная величина – важный аспект вычислений и анализа.
Рассмотрим такой пример: вам нужно проехать 58 км, вместо этого вы проехали 93 км. Чтобы узнать, сколько км осталось, нужно вычесть из расстояния (58 км) количество километров, которое вы проехали (93 км). В данном случае в результате будет отрицательное число. Но проехать отрицательное количество километров невозможно. Попробуйте решить эту задачу с помощью abs():
Без функции abs() в результате получится -35, отрицательное число. Функция abs() возвращает положительное число, так как абсолютная величина всегда представлена положительным числом или нулём.
Например:
Функция abs() используется в тех ситуациях, когда результат не может быть отрицательным числом.
Комплексные числа[править]
Пусть x2 = 2. Большинство из нас будут способны найти первый корень x=2{\displaystyle x={\sqrt {2}}}. Более продвинутые в математике заметят, что имеется и второй корень x=−2{\displaystyle x=-{\sqrt {2}}}. Но встретившись с выражением x2 = -2 решение смогут найти лишь немногие люди, знакомые с комплексными числами. Если вы только собираетесь стать ученым, настоятельно советуем познакомиться сейчас с этими замечательными числами перед тем, как изучить дальнейшие примеры, на которых вы сможете проверить свои новые знания.
Комплексная арифметика в Pythonправить
Python поддерживает расчеты с комплексными числами. Мнимая часть записывается через j, вместо i в математике. Комплексное число 2-3i соответственно будет записано как 2-3j. Ниже показан простой сеанс работы с комплексными числами и примеры простой комплексной арифметики:
>>> u = 2.5 + 3j # создаем комплексное >>> v = 2 # а это целое >>> w = u + v # комплексное + целое >>> w (4.5+3j) >>> a = -2 >>> b = 0.5 >>> s = a + b*1j # complex из двух float >>> s = complex(a, b) # другой способ >>> s (-2+0.5j) >>> s*w # complex*complex (-10.5-3.75j) >>> sw # complex/complex (-0.25641025641025639+ 0.28205128205128205j)
Кроме того объект типа complex легко может быть разложен на реальную и мнимую части и для него может быть найдено сопряженное (conjugate) число:
>>> s.real -2.0 >>> s.imag 0.5 >>> s.conjugate() (-2-0.5j)
Комплексные функции Pythonправить
Для работы с функциями комплексных переменных следует использовать специальную библиотеку — cmath:
>>> from cmath import sin, sinh >>> r1 = sin(8j) >>> r1 1490.4788257895502j >>> r2 = 1j*sinh(8) >>> r2 1490.4788257895502j