Как извлечь корень в python
Содержание:
- Вещественные числа (float)
- Печать чисел в Style
- Логические операции с десятичным модулем
- Использование модуля pickle на своих объектах
- Условные операторы
- Программа на Python с векторизацией и построением графиков
- Конвертация типов числа в Python
- Копирование
- Что такое структура данных в языке программирования Python
- Представление своих классов
- Функции и реализация
- Как посчитать сумму введенных чисел?
- Тригонометрические функции в Python
- Решение задач
- Модуль Decimal
- Функция sqrt() — квадратный корень
- Комплексные числа (complex)
- Различия между списком и генератором
- Пример: разделение строки по классу
- Арифметические функции в Python
- Возведение в степень (**)
- Функция экспоненты exp() в Python
Вещественные числа (float)
Вещественные числа поддерживают те же операции, что и целые. Однако (из-за представления чисел в компьютере) вещественные числа неточны, и это может привести к ошибкам:
Для высокой точности используют другие объекты (например Decimal и Fraction)).
Также вещественные числа не поддерживают длинную арифметику:
Простенькие примеры работы с числами:
Дополнительные методы
float.as_integer_ratio() — пара целых чисел, чьё отношение равно этому числу.
float.is_integer() — является ли значение целым числом.
float.hex() — переводит float в hex (шестнадцатеричную систему счисления).
classmethod float.fromhex(s) — float из шестнадцатеричной строки.
Помимо стандартных выражений для работы с числами (а в Python их не так уж и много), в составе Python есть несколько полезных модулей.
Модуль math предоставляет более сложные математические функции.
Модуль random реализует генератор случайных чисел и функции случайного выбора.
Печать чисел в Style
Для отображения чисел пользователю необходимо вставить числа в строку. Вы можете сделать это с помощью f-строк, заключив переменную, присвоенную номеру, фигурными скобками:
Эти фигурные скобки поддерживают простой язык форматирования, который можно использовать для изменения внешнего вида значения в окончательной отформатированной строке.
Например, чтобы отформатировать значение n в приведенном выше примере до двух десятичных знаков, замените содержимое фигурных скобок в строке f с :
Двоеточие () после переменной означает, что все, что находится после нее, является частью спецификации форматирования. В этом примере спецификация форматирования – .
в округляет число до двух десятичных знаков, а указывает Python отображать как число с фиксированной точкой. Это означает, что число отображается ровно с двумя десятичными знаками, даже если исходное число имеет меньше десятичных знаков.
Когда , результат равен . Как и , Python округляет связи даже при форматировании чисел внутри строк. Итак, если вы замените на , то результат будет :
Чтобы округлить до одного десятичного знака, замените на :
Когда вы форматируете число как фиксированную точку, оно всегда отображается с указанным вами точным количеством десятичных знаков:
Вы можете вставить запятые, чтобы сгруппировать целую часть больших чисел тысячами с помощью параметра :
Чтобы округлить до некоторого числа десятичных знаков, а также сгруппировать по тысячам, поставьте перед в вашей спецификации форматирования:
Спецификатор полезен для отображения значений валюты:
Еще одна полезная опция – , которая используется для отображения процентов. Параметр умножает число на 100 и отображает его в формате с фиксированной точкой, за которым следует знак процента.
Параметр всегда должен стоять в конце спецификации форматирования, и его нельзя смешивать с параметром . Например, отображает число в процентах с точностью до одного десятичного знака:
Мини-язык форматирования является мощным и обширным. Вы видели здесь только основы. Для получения дополнительной информации ознакомьтесь с .
Логические операции с десятичным модулем
Decimal содержит набор встроенных функций для выполнения логических операций с десятичными числами, таких как AND, OR, XOR и т. Д.
- Функция logical_and(): выполняет операцию логического И над двумя десятичными числами и возвращает результат.
- Функция logical_or(): выполняет операцию логического ИЛИ над двумя десятичными числами и возвращает результат.
- Функция logical_xor(): выполняет логическую операцию XOR над двумя десятичными числами и возвращает результат.
#Syntax for logical_and() function- decimal1.logical_and(decimal2) #Syntax for logical_or() function- decimal1.logical_or(decimal2) #Syntax for logical_xor() function- decimal1.logical_xor(decimal2)
Пример:
import decimal as d valx = d.Decimal(1001) valy = d.Decimal(1111) print("Value 1: ",valx) print("Value 2: ",valy) AND = valx.logical_and(valy) print("The logical AND value of the two decimals: ",AND) OR = valx.logical_or(valy) print("The logical OR value of the two decimals: ",OR) XOR = valx.logical_xor(valy) print("The logical XOR value of the two decimals: ",XOR)
Выход:
Value 1: 1001 Value 2: 1111 The logical AND value of the two decimals: 1001 The logical OR value of the two decimals: 1111 The logical XOR value of the two decimals: 110
Использование модуля pickle на своих объектах
протокол
Сериализация собственных объектов.
-
Если вы хотите, чтобы после десериализации вашего класса был вызыван , вы можете определить , который должен вернуть кортеж аргументов, который будет отправлен в . Заметьте, что этот метод работает только с классами старого стиля.
-
Для классов нового стиля вы можете определить, какие параметры будут переданы в во время десериализации. Этот метод так же должен вернуть кортеж аргументов, которые будут отправлены в .
-
Вместо стандартного атрибута , где хранятся атрибуты класса, вы можете вернуть произвольные данные для сериализации. Эти данные будут переданы в во время десериализации.
-
Если во время десериализации определён , то данные объекта будут переданы сюда, вместо того чтобы просто записать всё в . Это парный метод для : когда оба определены, вы можете представлять состояние вашего объекта так, как вы только захотите.
-
Если вы определили свой тип (с помощью Python’s C API), вы должны сообщить Питону как его сериализовать, если вы хотите, чтобы он его сериализовал. вызывается когда сериализуется объект, в котором этот метод был определён. Он должен вернуть или строку, содержащую имя глобальной переменной, содержимое которой сериализуется как обычно, или кортеж. Кортеж может содержать от 2 до 5 элементов: вызываемый объект, который будет вызван, чтобы создать десериализованный объект, кортеж аргументов для этого вызываемого объекта, данные, которые будут переданы в (опционально), итератор списка элементов для сериализации (опционально) и итератор словаря элементов для сериализации (опционально).
-
Иногда полезно знать версию протокола, реализуя . И этого можно добиться, реализовав вместо него . Если реализован, то предпочтение при вызове отдаётся ему (вы всё-равно должны реализовать для обратной совместимости).
Условные операторы
Python поддерживает дополнительный метод принятия решений, называемую условным выражением. (Он также упоминается как условный оператор или тернарный оператор в различных местах документации Python).
В своей простейшей форме синтаксис условного выражения выглядит следующим образом:
<expr1> if <conditional_expr> else <expr2>
Это отличается от форм операторов , перечисленных выше, потому что это не управляющая структура направляет поток выполнения программы. Он действует скорее как оператор, определяющий выражение. В приведенном выше примере сначала вычисляется . Если истина, то выражение вычисляется как . Если ложь, то выражение вычисляется как .
Обратите внимание на не очевидный порядок: сначала вычисляется среднее выражение, и на основе этого результата возвращается одно из выражений на концах. Вот несколько примеров, которые, надеюсь, помогут прояснить ситуацию:
raining = False print("Let's go to the", 'beach' if not raining else 'library') raining = True print("Let's go to the", 'beach' if not raining else 'library') age = 12 s = 'minor' if age < 21 else 'adult' s 'yes' if ('qux' in ) else 'no'
Примечание: условное выражение Python аналогично синтаксису ? : , используемому многими другими языками-C, Perl и Java. На самом деле, оператор ?: обычно называют тернарным оператором в этих языках, что, вероятно, является причиной того, что условное выражение Python иногда называют тернарным оператором Python.
Обычно условное выражение используется для выбора назначения переменной. Например, предположим, что вы хотите найти большее из двух чисел. Конечно, есть встроенная функция max (), которая делает именно это (и многое другое), что вы могли бы использовать. Но предположим, вы хотите написать свой собственный код с нуля.
Вы можете использовать стандартный оператор с предложением :
if a > b: m = a else: m = b
Но условный оператор короче и, возможно, более читабельнее:
m = a if a > b else b
Не забывайте, что условное выражение ведет себя как синтаксическое выражение. Его можно использовать как часть более длинного выражения. Условное выражение имеет более низкий приоритет, чем практически все остальные операторы, поэтому для его группировки необходимы круглые скобки.
В следующем примере оператор + связывается более плотно, чем условное выражение, поэтому сначала вычисляются +x и y + 2, а затем условное выражение. Скобки во втором случае не нужны и результат не меняется:
x = y = 40 z = 1 + x if x > y else y + 2 z z = (1 + x) if x > y else (y + 2) z
Если вы хотите, чтобы условное выражение было вычислено первым, вам нужно окружить его группирующими скобками. В следующем примере сначала вычисляется (x, если x > y, иначе y). В результате получается y, который равен 40, поэтому присваивается z 1 + 40 + 2 = 43:
x = y = 40 z = 1 + (x if x > y else y) + 2 z
Если вы используете условное выражение как часть более крупного выражения, вероятно, будет хорошей идеей использовать группирующие скобки для уточнения, даже если они не нужны.
Условные выражения также используют оценку короткого замыкания, как и составные логические выражения. Части условного выражения не вычисляются, если в этом нет необходимости.
В выражении , если иначе :
Если <conditional_expr> правда, <expr1> и <expr2> не вычисляется.
Если <conditional_expr> имеет значение false, то возвращается <expr2> и <expr1> не вычисляется.
Вы можете проверить это, используя термины, которые вызвали бы ошибку:
'foo' if True else 1/0 1/0 if False else 'bar'
В обоих случаях условия 1/0 не оцениваются, поэтому никаких исключений не возникнет.
Условные выражения также могут быть объединены вместе, как своего рода альтернативная структура , как показано здесь:
s = ('foo' if (x == 1) else 'bar' if (x == 2) else 'baz' if (x == 3) else 'qux' if (x == 4) else 'quux' ) s
Неясно, имеет ли это какое-либо существенное преимущество перед соответствующим оператором , но это синтаксически правильно для Python.
Программа на Python с векторизацией и построением графиков
Вернемся к задаче, описывающей вертикальное положение \( y \) мяча после
подбрасывания. Предположим, что нас интересуют значения \( y \) в
каждую миллисекунду первой секунды полета. Это требует повторения
вычисления \( y = v_0 t — 0.5 g t^2 \) тысячу раз.
Также построим график зависимости \( y \) от \( t \) на отрезке
\( \). Построение такого графика на компьютере подразумевает
рисование прямых отрезков между точками кривой, поэтому нам
понадобится много точек, чтобы создать визуальный эффект гладкой
кривой. Тысячи точек, которые мы вычислим, нам будет достаточно для
этого.
Реализацию таких вычислений и построения графика может быть
реализовано следующим сценарием (ball_plot.py):
# -*- coding: utf-8 -*- from numpy import linspace import matplotlib.pyplot as plt v0 = 5 g = 9.81 t = linspace(, 1, 1001) y = v0*t - 0.5*g*t**2 plt.plot(t, y) plt.xlabel(u't (с)') plt.ylabel(u'y (м)') plt.show() def height(t): h = v0*t - 0.5*g*t**2 return h h = lambda t: v0*t - 0.5*g*t**2
Замечание
В нашем сценарии для символьных аргументов мы использовали префикс
(например, ), чтобы указать, что
символы содержатся в кодировке UTF8.
Данный сценарий строит график зависимости вертикального положения мяча
от времени (см. рис. :numref:`%s`). Отметим, что строки для
вычисления из сценария ball.py из раздела
мало изменены, но значение
вычисляется для тысячи точек.
Рассмотрим различия рассматриваемого сценария от предыдущих. Первое
отличие это строки, которые могли выглядеть следующим образом:
from numpy import * from matplotlib.pyplot import *
Мы видим, что является модулем Python. Этот модуль содержит
огромный функционал для математических вычислений, а модуль
реализует возможности для построения двумерных
графиков. Приведенные выше строки представляют быстрый способ загрузки
всего функционала, связанного с вычислениями и построением
графиков. Однако, фактически мы используем только несколько функций в
нашем сценарии: , , и
. Многие разработчики считают, что мы должны импортировать
только то, что нам нужно, а не весь возможный функционал:
from numpy import linspace from matplotlib.pyplot import plot, xlabel, ylabel
Другие предлагают способ импорта, когда используется префикс для
функций модуля
import numpy as np import matplotlib.pyplot as plt ... t = np.linspace(, 1, 1001) ... plt.plot(x,y)
Мы будем использовать все три способа. В нашем сценарии мы
использовали два из них.
from numpy import linspace import matplotlib.pyplot as plt
Рисунок 1: График, построенный с помощью нашего сценария.
Функция принимает три аргумента и, в общем случае,
вызывается следующим образом:
linspace(start, stop, n)
Функция генерирует равноотстоящих координат,
начинающихся со значения , и заканчивающихся
. Выражение создает 1001 координату
от 0 до 1 включительно. Математически это означает, что отрезок
\( \) разбивается на 1000 равных отрезков и значения координат
в этом случае вычисляются следующим образом: \( t_i = i/1000,\ i = 0, 1,
\ldots, 1000 \).
Функция возвращает объект класса ,
т.е. некоторый набор чисел (массив). При выполнении арифметических операций с
такими объектами, на самом деле эти операции осуществляются для каждого
элемента массива. В результате получается аналогичный массив из 1001
элемента, который сохраняется в переменную . Таким образом
также является массивом.
Такой подход вычисления нескольких чисел в одну строку называется
векторизацией. Этот способ очень удобен, так как сокращает не только
количество кода, но и время вычислений по сравнению с использованием
циклов или .
Команды для построения графиков достаточно просты:
1. означает построение графика зависимости от
2. помещает текст на оси .
3. помещает текст на оси .
Конвертация типов числа в Python
Python может конвертировать начальный тип числа в другой указанный тип. Данный процесс называется «преобразованием». Python может внутренне конвертировать число одного типа в другой, когда в выражении присутствуют смешанные значения. Такой случай продемонстрирован в следующем примере:
Python
3 + 5.1
1 | 3+5.1 |
Вывод
Shell
8.1
1 | 8.1 |
В вышеприведенном примере целое число 3 было преобразовано в вещественное число 3.0 с плавающей точкой. Результатом сложения также является число с плавающей точкой (или запятой).
Однако иногда вам необходимо явно привести число из одного типа в другой, чтобы удовлетворить требования параметра функции или оператора. Это можно сделать с помощью различных встроенных функций Python.
Например, чтобы преобразовать целое число в число с плавающей точкой, мы должны вызвать функцию , как показано ниже:
Python
a = 12
b = float(a)
print(b)
1 2 3 |
a=12 b=float(a) print(b) |
Вывод
Shell
12.0
1 | 12.0 |
Целое число типа было преобразовано в вещественное число типа . также можно конвертировать в следующим образом:
Python
a = 12.65
b = int(a)
print(b)
1 2 3 |
a=12.65 b=int(a) print(b) |
Вывод
Shell
12
1 | 12 |
Вещественное число было преобразовано в целое через удаление дробной части и сохранение базового числа
Обратите внимание, что при конвертации значения в подобным образом число будет усекаться, а не округляться вверх
Заключение
Библиотека Math предоставляет функции и константы, которые можно использовать для выполнения арифметических и тригонометрических операций в Python. Библиотека изначально встроена в Python, поэтому дополнительную установку перед использованием делать не требуется. Для получения дополнительной информации можете просмотреть официальную документацию.
Копирование
-
Определяет поведение для экземпляра вашего класса. возвращает поверхностную копию вашего объекта — это означает, что хоть сам объект и создан заново, все его данные ссылаются на данные оригинального объекта. И при изменении данных нового объекта, изменения будут происходить и в оригинальном.
-
Определяет поведение для экземпляров вашего класса. возвращает глубокую копию вашего объекта — копируются и объект и его данные. это кэш предыдущих скопированных объектов, он предназначен для оптимизации копирования и предотвращения бесконечной рекурсии, когда копируются рекурсивные структуры данных. Когда вы хотите полностью скопировать какой-нибудь конкретный атрибут, вызовите на нём с первым параметром .
Что такое структура данных в языке программирования Python
Структуры данных в Python служат для написания программ, которые могут быть как простыми, так и достаточно сложными. Они бывают линейные, нелинейные и специфические.
К линейным структурам данных Python можно отнести массивы, матрицы, стек, очередь, связанный список. К нелинейным график, двоичное дерево, кучу, хэш-таблицу. Специфическими являются кортежи, словари, списки.
Также структуры данных в Питоне классифицируются как базовые, встроенные, динамические, упорядоченные, простейшие, собственные, общие, связанные.
Основные типы данных в Python это числа целые, с плавающей точкой, комплексные, строки, булев тип, тип none, исключения, байты, файлы, множества, функции, кортежи, словари, списки, строки.
Представление своих классов
Определяет поведение функции , вызванной для экземпляра вашего класса.
Определяет поведение функции , вызыванной для экземпляра вашего класса. Главное отличие от в целевой аудитории. больше предназначен для машинно-ориентированного вывода (более того, это часто должен быть валидный код на Питоне), а предназначен для чтения людьми.
Определяет поведение функции , вызыванной для экземпляра вашего класса. похож на , но возвращает строку в юникоде. Будте осторожны: если клиент вызывает на экземпляре вашего класса, а вы определили только , то это не будет работать. Постарайтесь всегда определять для случая, когда кто-то не имеет такой роскоши как юникод.
Определяет поведение, когда экземпляр вашего класса используется в форматировании строк нового стиля. Например, приведёт к вызову . Это может быть полезно для определения ваших собственных числовых или строковых типов, которым вы можете захотеть предоставить какие-нибудь специальные опции форматирования.
Определяет поведение функции , вызыванной для экземпляра вашего класса. Метод должен возвращать целочисленное значение, которое будет использоваться для быстрого сравнения ключей в словарях. Заметьте, что в таком случае обычно нужно определять и тоже. Руководствуйтесь следующим правилом: подразумевает .
Определяет поведение функции , вызванной для экземпляра вашего класса. Должна вернуть True или False, в зависимости от того, когда вы считаете экземпляр соответствующим True или False.
Определяет поведение функции , вызванной на экземпляре вашего класса. Этот метод должен возвращать пользователю список атрибутов
Обычно, определение не требуется, но может быть жизненно важно для интерактивного использования вашего класса, если вы переопределили или (с которыми вы встретитесь в следующей части), или каким-либо другим образом динамически создаёте атрибуты.
Определяет поведение функции , вызыванной на экземпляре вашего класса. Метод должен вернуть размер вашего объекта в байтах
Он главным образом полезен для классов, определённых в расширениях на C, но всё-равно полезно о нём знать.
Функции и реализация
Различные арифметические операции могут выполняться с десятичными или числовыми данными для улучшения результата.
Мы можем определить числа с десятичной запятой, используя как показано ниже.
Синтаксис:
import decimal variable = decimal.Decimal(decimal-number)
Кроме того, мы можем контролировать значение точности результатов чисел с десятичной запятой, используя встроенную функцию десятичного модуля — .
Синтаксис:
decimal.getcontext().prec = precision value
Описанные ниже функции помогают нам выполнять арифметические операции с десятичной запятой эффективно и с большой скоростью.
Как посчитать сумму введенных чисел?
В команде input() можно передавать подсказки.
w = int(input(«Введите первое число: «)) q = int(input(«Введите второе число: «)) summa=w+q print(summa)
Введите первое число: 6 Введите второе число: 7 13
Копирование материалов разрешается только с указанием автора (Михаил Русаков) и индексируемой прямой ссылкой на сайт (http://myrusakov.ru)!
Добавляйтесь ко мне в друзья : http://vk.com/myrusakov.Если Вы хотите дать оценку мне и моей работе, то напишите её в моей группе: http://vk.com/rusakovmy.
Если Вы не хотите пропустить новые материалы на сайте,то Вы можете подписаться на обновления: Подписаться на обновления
Если у Вас остались какие-либо вопросы, либо у Вас есть желание высказаться по поводу этой статьи, то Вы можете оставить свой комментарий внизу страницы.
Порекомендуйте эту статью друзьям:
Если Вам понравился сайт, то разместите ссылку на него (у себя на сайте, на форуме, в контакте):
Она выглядит вот так:
BB-код ссылки для форумов (например, можете поставить её в подписи):
Тригонометрические функции в Python
Модуль math в Python поддерживает все тригонометрические функции. Самые популярные представлены ниже:
- : Возвращает синус в радианах;
- : Возвращает косинус в радианах;
- : Возвращает тангенс в радианах;
- : Возвращает инвертированный синус. Аналогичным образом работают и ;
- : Конвертирует угол из радиан в градусы;
- : Конвертирует угол из градусов в радианы.
Рассмотрим следующий пример:
Python
import math
angle_In_Degrees = 62
angle_In_Radians = math.radians(angle_In_Degrees)
print(‘Значение угла:’, angle_In_Radians)
print(‘sin(x) равен:’, math.sin(angle_In_Radians))
print(‘tan(x) равен:’, math.tan(angle_In_Radians))
print(‘cos(x) равен:’, math.cos(angle_In_Radians))
1 2 3 4 5 6 7 8 9 |
importmath angle_In_Degrees=62 angle_In_Radians=math.radians(angle_In_Degrees) print(‘Значение угла:’,angle_In_Radians) print(‘sin(x) равен:’,math.sin(angle_In_Radians)) print(‘tan(x) равен:’,math.tan(angle_In_Radians)) print(‘cos(x) равен:’,math.cos(angle_In_Radians)) |
Вывод
Shell
Значение угла: 1.0821041362364843
sin(x) равен: 0.8829475928589269
tan(x) равен: 1.8807264653463318
cos(x) равен: 0.46947156278589086
1 2 3 4 |
Значениеугла1.0821041362364843 sin(x)равен0.8829475928589269 tan(x)равен1.8807264653463318 cos(x)равен0.46947156278589086 |
Обратите внимание, что вначале мы конвертировали значение угла из градусов в радианы для осуществления дальнейших операций
Решение задач
1. Дано положительное число N. Вывести все числа от 0 до N с помощью цикла while.
2. Дано положительное число N. Вывести все числа от N до 0 с помощью цикла while. Пример:
Ввод: N = 10
Вывод: 10
9
8
7
6
…
0
3. Даны два положительных числа K и N (K
4. Даны положительные числа A и B (A > B). На отрезке длины A размещено максимально возможное количество отрезков длины B (без наложений). Не используя операции умножения и деления, найти длину незанятой части отрезка A (взятие остатка A % B)
5. Даны положительные числа A и B (A > B). На отрезке длины A размещено максимально возможное количество отрезков длины B (без наложений). Не используя операции умножения и деления, найти количество отрезков B, размещенных на отрезке A (деление нацело A // B)
6. Дано положительное число N. Найти сумму всех четных чисел от 0 до N с помощью цикла while.
7. Даны два положительных числа K и N (K нечетных чисел от K до N с помощью цикла while.
8. Дано положительное число N. Найти факториал числа N. Факториалом числа называется произведение всех чисел от 1 до N. Например, факториал числа 5 равен 5! = 1*2*3*4*5 = 120, 2! = 1*2 = 2, 9! = 1*2*3*4*5*6*7*8*9 = 362880
9. Дано целое число N (> 0). Если оно является степенью числа 3, то вывести YES, если не является — вывести NO.
10. Дано целое число N (> 0). Найти двойной факториал N: N!! = N * (N-2) * (N-4)* …. Для решения этой задачи посмотрите на задачу 2
Модуль Decimal
Синтаксис
Decimal обеспечивает поддержку правильного округления десятичной арифметики с плавающей точкой.
, в отличие от , имеет ряд преимуществ:
- работает так же, как школьная арифметика;
- десятичные числа представлены точно (в отличие от float, где такие числа как 1.1 и 5.12 не имеют точного представления);
- точность десятичного модуля Decimal можно изменять (с помощью );
Точность
Контекстом в Deciaml можно управлять, устанавливая свои значения. Например, для того, чтобы управлять точностью Decimal, необходимо изменить параметр контекста (от англ. precision – точность):
Округление
Округление осуществляется с помощью метода . В качестве первого аргумента – объект Decimal, указывающий на формат округления:
Важно: если точность округления установлена в , а формат округления , возникнет ошибка:
Чтобы избежать ее, необходимо поменять точность округления, как было сделано в примере выше:
Помимо первого параметра, quantize() принимает в качестве второго параметра стратегию округления:
- – округление в направлении бесконечности (Infinity);
- – округляет в направлении минус бесконечности (- Infinity);
- – округление в направлении нуля;
- – округление до ближайшего четного числа. Число 4.9 округлится не до 5, а до 4 (потому что 5 – не четное);
- – округление до ближайшего нуля;
- – округление от нуля;
- – округление от нуля (если последняя цифра после округления до нуля была бы 0 или 5, в противном случае к нулю).
Помните, что как округление, так и точность вступают в игру только во время арифметических операций, а не при создании самих десятичных дробей
Функция sqrt() — квадратный корень
Функция sqrt() вычисляет и возвращает значение квадратного корня из переданного десятичного числа.
Синтаксис:
decimal.Decimal(decimal-number).sqrt()
Пример:
import decimal as d d.getcontext().prec = 3 val = d.Decimal(122.20) sqrt = val.sqrt() print("Decimal Number: ",val) print("Square root of the decimal number: ",sqrt)
Выход:
Decimal Number: 122.2000000000000028421709430404007434844970703125 Square root of the decimal number: 11.1
Снова обратите внимание, как объявленное значение содержит полное десятичное число, в то время как вычисленное значение соответствует нашему набору точности из 3 цифр
Комплексные числа (complex)
В Python встроены также и комплексные числа:
Также для работы с комплексными числами используется также модуль cmath.
В программировании мы всегда взаимодействуем с данными, которые не являются какой-то абстрактной субстанцией. Все данные разделяются по определенному типу. На предыдущих уроках мы узнали, про строки, списки, словари и о логическом типе данных. Сегодня, поговорим о самом базовом типе данных в Python — числах.
Почему нельзя свалить все данные в одну общую кучу и не заморачиваться с каждым типом по отдельности? Допустим, мы присвоили переменной a цифру 5: a = 5. А теперь представьте, что никакого разделения по типу данных нет. Так что находится в переменной: число или строка? Если 10 — это число, то с ним можно произвести математические действия. А если это строка, то мы имеем дело с текстом и тогда Python задействует совсем другие методы.
# объединение строк (конкатенация) d = ’10’ f = ‘негритят’ d + ‘ ‘ + f ’10 негритят’
Ключевой момент: У каждого типа данных свои методы.
Цифра 100 написанная без кавычек, относится к числовому типу данных. А цифра ‘100’ в кавычках — к строковому типу. С помощью синтаксиса, мы сообщаем Python, какой у нас тип данных. Числа в Python делятся на два вида: целое число и вещественное.
Различия между списком и генератором
В следующих примерах будет создан список и генератор, чтобы увидеть их отличия. Сначала создадим простой список и проверим его тип:
При запуске этого кода, программа вернёт результат «list».
Теперь давайте переберём все элементы в списке squared_list.
Приведенный выше сценарий вернёт следующие результаты:
Теперь создадим генератор и выполнить ту же задачу:
Генератор создаётся подобно коллекции списка, но вместо квадратных скобок нужно использовать круглые скобки. Приведенный выше сценарий вернёт значение «generator» как тип переменной squared_gen. Теперь давайте переберём элементы генератора с помощью цикла for.
Выход будет:
Выходные данные такие же, как у списка. Так в чем же разница? Одно из главных отличий заключается в том, как в список и генератор хранят элементы в памяти. Списки хранят все элементы в памяти сразу, тогда как генераторы «создают» каждый элемент на лету, отображая их, а затем перемещаются к следующему элементу, удаляя предыдущий элемент из памяти.
Один из способов проверить это, узнать длину как списка, так и генератора, который только что создали. Функции len(squared_list) вернет 5, а len(squared_gen) выдаст ошибку отсутствия длины у генератора. Кроме того, список можно перебирать столько раз, сколько захотите, но генератор можно перебирать только один раз. Для повторной итерации необходимо создать генератор снова.
Пример: разделение строки по классу
Классы регулярных выражений – это классы, охватывающие группу символов. Мы будем использовать один из таких классов, \d, который соответствует любой десятичной цифре.
В этом примере мы также будем использовать +, который соответствует одному или нескольким предыдущим символам.
Регулярное выражение ‘\d +’ соответствует одной или нескольким десятичным цифрам. В этом примере мы будем использовать это регулярное выражение для разделения строки на фрагменты, разделенные одной или несколькими десятичными цифрами.
import re #a string str = 'foo635bar4125mango2apple21orange' #split with regular expression chunks = re.split('\d+',str) print(chunks)
Вывод:
Мы узнали, как повторно упаковать строку для разделения с помощью регулярных выражений.
Вы можете разделить строку пробелом в качестве разделителя в Python с помощью метода String.split().
В этом руководстве мы узнаем, как разделить строку пробелом в Python с помощью методов String.split() и re.split().
В этом примере мы возьмем строку, содержащую слова, элементы или фрагменты, разделенные пробелом. Затем мы разделим строку по пробелу с помощью метода String.split(), который возвращает список.
str = '63 41 92 81 69 70' #split string by single space chunks = str.split(' ') print(chunks)
Вывод:
Арифметические функции в Python
Арифметические функции используются для представления чисел в различных формах и осуществления над ними математических операций. Далее представлен перечень самых популярных арифметических функций:
- : округление определенного числа вверх;
- : возвращает модуль (абсолютное значение) указанного числа;
- : округление определенного числа вниз;
- : получение наибольшего общего делителя чисел и ;
- : возвращает сумму всех элементов итерируемого объекта;
- : возвращает (e^x)-1;
- : когда значение слишком мало, вычисление может привести к значительной потери в точности. может вернуть вывод с полной точностью.
В следующем примере показано использование перечисленных выше функций:
Python
import math
num = -4.28
a = 14
b = 8
num_list =
x = 1e-4 # Малое значение x
print(‘Число:’, num)
print(‘Округление числа вниз:’, math.floor(num))
print(‘Округление числа вверх:’, math.ceil(num))
print(‘Модуль числа:’, math.fabs(num))
print(‘Наибольший общий делитель a и b: ‘ + str(math.gcd(a, b)))
print(‘Сумма элементов списка: ‘ + str(math.fsum(num_list)))
print(‘e^x (при использовании функции exp()) равно:’, math.exp(x)-1)
print(‘e^x (при использовании функции expml()) равно:’, math.expm1(x))
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 |
importmath num=-4.28 a=14 b=8 num_list=10,8.25,75,7.04,-86.23,-6.43,8.4 x=1e-4# Малое значение x print(‘Число:’,num) print(‘Округление числа вниз:’,math.floor(num)) print(‘Округление числа вверх:’,math.ceil(num)) print(‘Модуль числа:’,math.fabs(num)) print(‘Наибольший общий делитель a и b: ‘+str(math.gcd(a,b))) print(‘Сумма элементов списка: ‘+str(math.fsum(num_list))) print(‘e^x (при использовании функции exp()) равно:’,math.exp(x)-1) print(‘e^x (при использовании функции expml()) равно:’,math.expm1(x)) |
Вывод
Python
Число: -4.28
Округление числа вниз: -5
Округление числа вверх: -4
Модуль числа: 4.28
Наибольший общий делитель a и b: 2
Сумма элементов списка: 16.029999999999998
e^x (при использовании функции exp()) равно: 0.0001000050001667141
e^x (при использовании функции expml()) равно: 0.00010000500016667084
1 2 3 4 5 6 7 8 |
Число-4.28 Округлениечиславниз-5 Округлениечиславверх-4 Модульчисла4.28 Наибольшийобщийделительaиb2 Суммаэлементовсписка16.029999999999998 e^x(прииспользованиифункцииexp())равно0.0001000050001667141 e^x(прииспользованиифункцииexpml())равно0.00010000500016667084 |
К числу других математических функций относятся:
- : принимает два вещественных аргумента, возводит первый аргумент в степень, значением которой является второй аргумент, после чего возвращает результат. К примеру, эквивалентно выражению ;
- : возвращает квадратный корень определенного числа.
Примеры данных методов представлены ниже:
Возведение в степень
Python
math.pow(3, 4)
1 | math.pow(3,4) |
Вывод
Shell
81.0
1 | 81.0 |
Квадратный корень
Python
math.sqrt(81)
1 | math.sqrt(81) |
Вывод
Shell
9.0
1 | 9.0 |
Возведение в степень (**)
Нетипичный оператор для большинства других языков программирования. Тем он и удобен. Парная «звёздочка» (**) выполняет классическое математическое возведение числа «a» в степень «b»:
И показатель степени, и основание могут быть отрицательными:
И дробными:
Операндов у возведения в степень также может быть несколько. В таком случае, оператор «**» работает, как право-ассоциативный (т.е. операции выполняются справа-налево):
В завершении — про приоритет операций. Если в выражении используются разные операторы, то порядок их выполнения будет следующим:
- возведение в степень;
- умножение, деление, целочисленное деление и деление по модулю;
- сложение и вычитание.
Функция экспоненты exp() в Python
Библиотека Math в Python поставляется с функцией , которую можно использовать для вычисления значения . К примеру, — экспонента от . Значение равно .
Метод может быть использован со следующим синтаксисом:
Python
math.exp(x)
1 | math.exp(x) |
Параметр может быть положительным или отрицательным числом. Если не число, метод возвращает ошибку. Рассмотрим пример использования данного метода:
Python
import math
# Инициализация значений
an_int = 6
a_neg_int = -8
a_float = 2.00
# Передача значений методу exp() и вывод
print(math.exp(an_int))
print(math.exp(a_neg_int))
print(math.exp(a_float))
1 2 3 4 5 6 7 8 9 10 11 |
importmath an_int=6 a_neg_int=-8 a_float=2.00 print(math.exp(an_int)) print(math.exp(a_neg_int)) print(math.exp(a_float)) |
Вывод
Shell
403.4287934927351
0.00033546262790251185
7.38905609893065
1 2 3 |
403.4287934927351 0.00033546262790251185 7.38905609893065 |
Мы объявили три переменные и присвоили им значения с различными числовыми типами данных. Мы передали значения методу для вычисления их экспоненты.
Мы также можем применить данный метод для встроенных констант, что продемонстрировано ниже:
Python
import math
print(math.exp(math.e))
print(math.exp(math.pi))
1 2 3 4 |
importmath print(math.exp(math.e)) print(math.exp(math.pi)) |
Вывод
Shell
15.154262241479262
23.140692632779267
1 2 |
15.154262241479262 23.140692632779267 |
При передаче не числового значения методу будет сгенерирована , как показано далее:
Python
import math
print(math.exp(«20»))
1 2 3 |
importmath print(math.exp(«20»)) |
Вывод
Shell
Traceback (most recent call last):
File «C:/Users/admin/mathe.py», line 3, in <module>
print (math.exp(«20»))
TypeError: a float is required
1 2 3 4 |
Traceback(most recent call last) File»C:/Users/admin/mathe.py»,line3,in<module> print(math.exp(«20»)) TypeErrorafloatisrequired |
Как видно из примера выше, генерируется ошибка .