Работа с модулями: создание, подключение инструкциями import и from
Содержание:
- 3 Логарифмические функции
- Функция экспоненты exp() в Python
- Константы и специальные значения
- Тригонометрические функции
- Тригонометрические функции в Python
- Целые числа (int)
- Вычисление квадратного корня в Python с помощью модуля cmath
- math[править]
- Манипуляции с изображениями и видео
- Игра в кости с использованием модуля random в Python
- Использование Python itertools.chain() для объединения итераций
- Число с плавающей запятой
- Конвертация типов числа в Python
- Звук
- Арифметические операции
- Приоритеты операторов
- Функции для последовательностей
- Зачем нужны функции getstate() и setstate() ?
- Возведение в степень (**)
- Веб-разработка
- Степени, логарифмирование, экспоненцирование
- Комбинации элементов между собой
3 Логарифмические функции
Модуль предоставляет нам следующие функции для вычисления логарифмических значений чисел с десятичной запятой:
- decimal.ln();
- decimal.log10().
Функция возвращает значение натурального десятичного числа, как показано ниже.
decimal.Decimal(decimal-number).ln()
Функция decimal.log10() используется для вычисления значения журнала по основанию 10 переданного ей десятичного числа.
decimal.Decimal(decimal-number).log10()
Пример:
import decimal as d d.getcontext().prec = 2 val = d.Decimal(122.20) log = val.ln() print("Natural log value of the decimal number: ",log) log_10 = val.log10() print("Log value with base 10 of the decimal number: ",log_10)
Выход:
Natural log value of the decimal number: 4.8 Log value with base 10 of the decimal number: 2.1
Функция экспоненты 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 |
Как видно из примера выше, генерируется ошибка .
Константы и специальные значения
- math.pi
- Возвращает значение математической константы \(\pi\) с точностью, которая зависит от конкретной платформы.
- math.e
- Возвращает значение математической константы \(e\) с точностью, которая зависит от конкретной платформы.
- math.inf
- Возвращает положительную бесконечность, значение которое является типом float и может присутствовать в математических выражениях.
Данное значение можно получить с помощью команды . А что бы получить отрицательную бесконечность достаточно добавить перед командой унарный оператор :
Доступно в Python начиная с версии 3.5.
- math.nan
- Возвращает значение «не число» которое является типом float и может присутствовать в математических выражениях. Равносильно команде .
Доступно в Python начиная с версии 3.5.
- math.isinf(x)
- Возвращает True в случаях, когда x является отрицательной или положительной бесконечностью, иначе возвращает False.
- math.isnan(x)
- Возвращает True если x является nan, иначе возвращает False.
- math.isfinite(x)
- Возвращает False если x является либо nan, либо inf или -inf, во всех остальных случаях возвращается True.
Тригонометрические функции
Тригонометрические функции для комплексного числа также доступны в модуле .
import cmath a = 3 + 4j print('Sine:', cmath.sin(a)) print('Cosine:', cmath.cos(a)) print('Tangent:', cmath.tan(a)) print('ArcSin:', cmath.asin(a)) print('ArcCosine:', cmath.acos(a)) print('ArcTan:', cmath.atan(a))
Вывод:
Sine: (3.853738037919377-27.016813258003936j) Cosine: (-27.034945603074224-3.8511533348117775j) Tangent: (-0.0001873462046294784+0.999355987381473j) ArcSin: (0.6339838656391766+2.305509031243477j) ArcCosine: (0.9368124611557198-2.305509031243477j) ArcTan: (1.4483069952314644+0.15899719167999918j)
Тригонометрические функции в 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 |
Обратите внимание, что вначале мы конвертировали значение угла из градусов в радианы для осуществления дальнейших операций
Целые числа (int)
В Python любое число, состоящее из десятичных цифр без префикса, интерпретируется как десятичное число типа
Целые числа в Python представлены только одним типом – PyLongObject, реализация которого лежит в longobject.c, а сама структура выглядит так:
Любое целое число состоит из массива цифр переменной длины, поэтому в Python 3 в переменную типа может быть записано число неограниченной длины. Единственное ограничение длины – это размер оперативной памяти.
Целые числа могут записываться не только как десятичные, но и как двоичные, восьмеричные или шестнадцатеричные. Для этого перед числом нужно написать символы:
- 0b (0B) – для двоичного представления;
- 0o (0O) – для восьмеричного представления;
- 0x (0X) – для шестнадцатеричного представления.
Вычисление квадратного корня в Python с помощью модуля cmath
Модуль cmath используется для вычисления квадратного корня в python из Действительного или сложного числа.
Вышеприведенные два метода прекрасно работают для всех положительных вещественных чисел. Но для отрицательных или комплексных чисел это можно сделать следующим образом.
<Пример: Вычисление квадратного корня из числа с помощью math
Выход:
В этой программе мы используем функцию sqrt() в href=”https://docs.python.org/2/library/cmath.html”>cmath (комплексная математика) модуль
Обратите внимание, что мы также использовали функцию eval() вместо float() для преобразования комплексного числа. Кроме того, обратите внимание на то, как форматируются выходные данные
href=”https://docs.python.org/2/library/cmath.html”>cmath (комплексная математика) модуль. Обратите внимание, что мы также использовали функцию eval() вместо float() для преобразования комплексного числа. Кроме того, обратите внимание на то, как форматируются выходные данные.
math[править]
Модуль math всегда доступен и обеспечивает доступ к математическим функциям.
Данные функции неприменимы к комплексным числам, для работы с комплексными числами имеются функции с теми же именами в модуле cmath.
Модуль содержит следующие функции. Во всех случаях, кроме особо оговоренных, функции возвращают число типа float.
Теоретико-численные функции и функции представленияправить
-
math.ceil
Возвращает округленное x как ближайшее целое значение типа float, большее или равное x (округление «вверх»).
(x)
-
math.copysign
Возвращает число x со знаком числа y. На платформе, поддерживающей знак нуля copysign(1.0, -0.0) даст -1.0.
(x, y)
-
math.fabs
Возвращает абсолютное значение (модуль) числа x. В Python есть встроенная функция abs, но она возвращает модуль числа с тем же типом, что число, здесь же всегда float abs (fabs).
(x)
-
math.factorial
Возвращает факториал целого числа x, если x не целое возбуждается ошибка ValueError.
(x)
-
math.floor
В противоположность ceil(x) возвращает округленное x как ближайшее целое значение типа float, меньшее или равное x (округление «вниз»).
(x)
-
math.fmod
Аналогична функции fmod(x, y) библиотеки C. Отметим, что это не то же самое, что выражение Python x%y. Желательно использовать при работе с объектами float, в то время как x % y больше подходит для int.
(x, y)
-
math.frexp
Представляет число в экспоненциальной записи x=m∗2e{\displaystyle x=m*2^{e}} и возвращает мантиссу m (действительное число, модуль которого лежит в интервале от 0.5 до 1) и порядок e (целое число) как пару чисел (m, e). Если x=0, то возвращает (0.0, 0)
(x)
-
math.fsum
Возвращает float сумму от числовых элементов итерируемого объекта.
(iterable)
-
math.isinf
Проверяет, является ли float объект x плюс или минус бесконечностью, результат соответственно True или False.
(x)
-
math.isnan
Проверяет, является ли float объект x объектом NaN (not a number).
(x)
-
math.ldexp
Возвращает значение x∗2i{\displaystyle x*2^{i}}, то есть осуществляет действие, обратное функции math.frexp(x).
(x, i)
-
math.modf
Возвращает часть, идущую после запятой и целую часть от float числа. Оба результата сохраняют знак исходного числа x и представлены типом float.
(x)
-
math.trunc
Возвращает целую часть числа x в виде int объекта.
(x)
Степенные и логарифмические функцииправить
-
math.exp
Возвращает ex{\displaystyle e^{x}}.
(x)
-
math.log
При передаче функции одного аргумента x, возвращает натуральный логарифм x. При передаче двух аргументов, второй берется как основание логарифма.
(x)
-
math.log1p
Возвращает натуральный логарифм от x+1.
(x)
-
math.log10
Возвращает десятичный логарифм x.
(x)
-
math.pow
Возвращает xy{\displaystyle x^{y}}.
(x, y)
-
math.sqrt
Квадратный корень (square root) из x.
(x)
Тригонометрические функцииправить
-
math.acos
Возвращает арккосинус x, в радианах.
(x)
-
math.asin
Возвращает арксинус x, в радианах.
(x)
-
math.atan
Возвращает арктангенс x, в радианах.
(x)
-
math.atan2
Возвращает atan(y/x), в радианах. Результат лежит в интервале . Вектор, конец, которого задается точкой (x, y) образует угол с положительным направлением оси x. Поэтому эта функция имеет более общее назначение, чем предыдущая. Например и atan(1), и atan2(1, 1) дадут в результате pi/4, но atan2(-1, -1) это уже -3*pi/4.
(y, x)
-
math.cos
Возвращает косинус x, где x выражен в радианах.
(x)
-
math.hyp
Возвращает евклидову норму, то есть sqrt(x**2+y**2). Удобно для вычисления гипотенузы (hyp) и длины вектора.
(x, y)
-
math.sin
Возвращает синус x, где x выражен в радианах.
(x)
-
math.tan
Возвращает тангенс x, где x выражен в радианах.
(x)
Радианы в градусы и наоборотправить
-
math.degrees
Конвертирует значение угла x из радиан в градусы.
(x)
-
math.radians
Конвертирует значение угла x из градусов в радианы.
(x)
Гиперболические функцииправить
Смысл ясен из названий и соответствует стандартным обозначениям англоязычной литературы:
- math.acosh(x)
- math.asinh(x)
- math.atanh(x)
- math.cosh(x)
- math.sinh(x)
- math.tanh(x)
Манипуляции с изображениями и видео
Python это очень мощный язык; с его помощью
можно решать многие задачи, например,
работать с изображениями. Стандартная
библиотека не имеет встроенного
функционала для этих целей, но следующие
модули вам помогут.
Python Imaging Library (PIL). PIL добавляет в интерпретатор Python возможность обработки изображений. Эта библиотека поддерживает много форматов файлов и предоставляет хороший функционал для работы с графикой.
Gdmodule. Это интерфейс для библиотеки GD, созданной Томасом Баутелом.
VideoCapture. Win32-расширение для доступа к таким видеоустройствам, как веб-камеры (USB) и ТВ-карты.
MoviePy. Библиотека Python для редактирования видео: обрезка, склейка, вставка надписей, нелинейное редактирование, обработка видео и создание пользовательских эффектов.
pyscreenshot. Кроссплатформенный модуль, позволяющий делать скриншоты без установки сторонних библиотек.
Игра в кости с использованием модуля random в Python
Далее представлен код простой игры в кости, которая поможет понять принцип работы функций модуля random. В игре два участника и два кубика.
- Участники по очереди бросают кубики, предварительно встряхнув их;
- Алгоритм высчитывает сумму значений кубиков каждого участника и добавляет полученный результат на доску с результатами;
- Участник, у которого в результате большее количество очков, выигрывает.
Код программы для игры в кости Python:
Python
import random
PlayerOne = «Анна»
PlayerTwo = «Алекс»
AnnaScore = 0
AlexScore = 0
# У каждого кубика шесть возможных значений
diceOne =
diceTwo =
def playDiceGame():
«»»Оба участника, Анна и Алекс, бросают кубик, используя метод shuffle»»»
for i in range(5):
#оба кубика встряхиваются 5 раз
random.shuffle(diceOne)
random.shuffle(diceTwo)
firstNumber = random.choice(diceOne) # использование метода choice для выбора случайного значения
SecondNumber = random.choice(diceTwo)
return firstNumber + SecondNumber
print(«Игра в кости использует модуль random\n»)
#Давайте сыграем в кости три раза
for i in range(3):
# определим, кто будет бросать кости первым
AlexTossNumber = random.randint(1, 100) # генерация случайного числа от 1 до 100, включая 100
AnnaTossNumber = random.randrange(1, 101, 1) # генерация случайного числа от 1 до 100, не включая 101
if( AlexTossNumber > AnnaTossNumber):
print(«Алекс выиграл жеребьевку.»)
AlexScore = playDiceGame()
AnnaScore = playDiceGame()
else:
print(«Анна выиграла жеребьевку.»)
AnnaScore = playDiceGame()
AlexScore = playDiceGame()
if(AlexScore > AnnaScore):
print («Алекс выиграл игру в кости. Финальный счет Алекса:», AlexScore, «Финальный счет Анны:», AnnaScore, «\n»)
else:
print(«Анна выиграла игру в кости. Финальный счет Анны:», AnnaScore, «Финальный счет Алекса:», AlexScore, «\n»)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 |
importrandom PlayerOne=»Анна» PlayerTwo=»Алекс» AnnaScore= AlexScore= diceOne=1,2,3,4,5,6 diceTwo=1,2,3,4,5,6 defplayDiceGame() «»»Оба участника, Анна и Алекс, бросают кубик, используя метод shuffle»»» foriinrange(5) #оба кубика встряхиваются 5 раз random.shuffle(diceOne) random.shuffle(diceTwo) firstNumber=random.choice(diceOne)# использование метода choice для выбора случайного значения SecondNumber=random.choice(diceTwo) returnfirstNumber+SecondNumber print(«Игра в кости использует модуль random\n») foriinrange(3) # определим, кто будет бросать кости первым AlexTossNumber=random.randint(1,100)# генерация случайного числа от 1 до 100, включая 100 AnnaTossNumber=random.randrange(1,101,1)# генерация случайного числа от 1 до 100, не включая 101 if(AlexTossNumber>AnnaTossNumber) print(«Алекс выиграл жеребьевку.») AlexScore=playDiceGame() AnnaScore=playDiceGame() else print(«Анна выиграла жеребьевку.») AnnaScore=playDiceGame() AlexScore=playDiceGame() if(AlexScore>AnnaScore) print(«Алекс выиграл игру в кости. Финальный счет Алекса:»,AlexScore,»Финальный счет Анны:»,AnnaScore,»\n») else print(«Анна выиграла игру в кости. Финальный счет Анны:»,AnnaScore,»Финальный счет Алекса:»,AlexScore,»\n») |
Вывод:
Shell
Игра в кости использует модуль random
Анна выиграла жеребьевку.
Анна выиграла игру в кости. Финальный счет Анны: 5 Финальный счет Алекса: 2
Анна выиграла жеребьевку.
Анна выиграла игру в кости. Финальный счет Анны: 10 Финальный счет Алекса: 2
Алекс выиграл жеребьевку.
Анна выиграла игру в кости. Финальный счет Анны: 10 Финальный счет Алекса: 8
1 2 3 4 5 6 7 8 9 10 |
Игравкостииспользуетмодульrandom Аннавыигралаигрувкости.ФинальныйсчетАнны5ФинальныйсчетАлекса2 Аннавыигралаигрувкости.ФинальныйсчетАнны10ФинальныйсчетАлекса2 Аннавыигралаигрувкости.ФинальныйсчетАнны10ФинальныйсчетАлекса8 |
Вот и все. Оставить комментарии можете в секции ниже.
Использование Python itertools.chain() для объединения итераций
Метод Python генерирует итератор из нескольких итераций.
Это просто связывает все итераторы вместе в одну последовательность и возвращает единственный итератор для этой объединенной последовательности.
Синтаксис этого метода следующий
iterator = itertools.chain(*sequence)
Давайте посмотрим на простой пример.
import itertools list1 = list2 = dict1 = {'site': 'AskPython', 'url': 'https://askpython.com'} # We can combine lists and dicts (iterables) into a single chain for item in itertools.chain(list1, list2, dict1): print(item)
Здесь мы используем итератор напрямую, перебирая его, используя
Выход
hello from AskPython 10 20 30 40 50 site url
Хотя мы получаем содержимое наших списков правильно, значения словаря не отображаются.
Чтобы исправить это, мы могли бы использовать для получения кортежа пар .
import itertools list1 = list2 = dict1 = {'site': 'AskPython', 'url': 'https://askpython.com'} # We can combine lists and dicts (iterables) into a single chain for item in itertools.chain(list1, list2, dict1.items()): print(item)
Выход
hello from AskPython 10 20 30 40 50 ('site', 'AskPython') ('url', 'https://askpython.com')
Теперь у нас также есть напечатанные значения.
Число с плавающей запятой
Число с плавающей запятой содержит десятичные точки. Он может быть положительным или отрицательным.
Мы можем использовать функцию float(), чтобы получить представление объекта с плавающей запятой. В объекте должен быть реализован метод __float __(), который возвращает число с плавающей запятой.
x = 10.50 print(x) print(type(x)) x = float("10.50") print(x) print(type(x)) class Data: id = 0.0 def __init__(self, i): self.id = i def __float__(self): return float(self.id) d = Data(10.50) x = float(d) print(x) print(type(x)) d = Data(10) x = float(d) print(x) print(type(x))
Вывод:
10.5 <class 'float'> 10.5 <class 'float'> 10.5 <class 'float'> 10.0 <class 'float'>
String обеспечивает реализацию метода __float __(). Вот почему мы можем легко преобразовать строку в float.
Если объект не реализует метод __float __(), мы получаем сообщение об ошибке как:
TypeError: float() argument must be a string or a number, not 'Data'
Если метод объекта __float __() не возвращает число с плавающей запятой, мы получаем сообщение об ошибке как:
TypeError: Data.__float__ returned non-float (type int)
Мы также можем определить число с плавающей запятой в экспоненциальной нотации, используя «e» или «E». Здесь число после «E» обозначает степень до 10.
x = 10.5e2 print(x) x = 10.5E2 print(x)
Выход:
1050.0 1050.0
Пояснение: 10,5E2 = 10,5 * pow (10, 2) = 10,5 * 100 = 1050,0
Конвертация типов числа в 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 довольно
просто.
pySonic. Python-враппер для высокопроизводительной кроссплатформенной звуковой библиотеки FMOD.
PyMedia. Модуль Python для манипуляций с файлами WAV, MP3, Ogg, AVI, DivX, DVD, CD-DA и др. Позволяет анализировать, демультиплексировать и мультиплексировать, декодировать и кодировать все поддерживаемые форматы. Может компилироваться для Windows, Linux и Cygwin.
PMIDI. Библиотека PMIDI служит оберткой для библиотеки Windows MIDI Streams, обеспечивая возможность использования последней в Python. Благодаря PMIDI разработчики могут на лету генерировать в своем коде синтезированные музыкальные последовательности, чтобы они проигрывались для пользователей.
Mutagen. Модуль для обработки метаданных аудио. Поддерживает аудиофайлы FLAC, M4A, Musepack, MP3, Ogg FLAC, Ogg Speex, Ogg Theora, Ogg Vorbis, True Audio и WavPack.
Арифметические операции
Подобно действительным числам, комплексные числа также можно складывать, вычитать, умножать и делить. Давайте посмотрим, как мы могли бы это сделать в Python.
a = 1 + 2j b = 2 + 4j print('Addition =', a + b) print('Subtraction =', a - b) print('Multiplication =', a * b) print('Division =', a / b)
Выход:
Addition = (3+6j) Subtraction = (-1-2j) Multiplication = (-6+8j) Division = (2+0j)
ПРИМЕЧАНИЕ. В отличие от действительных чисел, мы не можем сравнивать два комплексных числа. Мы можем сравнивать только их действительную и мнимую части по отдельности, поскольку это действительные числа. Приведенный ниже фрагмент доказывает это.
>>> a (4+3j) >>> b (4+6j) >>> a < b Traceback (most recent call last): File "<stdin>", line 1, in <module> TypeError: '<' not supported between instances of 'complex' and 'complex'
Приоритеты операторов
Consider this expression:
>>> 20 + 4 * 10 60
There is ambiguity here. Should Python perform the addition first and then multiply the sum by ? Or should the multiplication be performed first, and the addition of second?
Clearly, since the result is , Python has chosen the latter; if it had chosen the former, the result would be . This is standard algebraic procedure, found universally in virtually all programming languages.
Всем операторам, которые поддерживает язык, присваивается приоритет. В выражении все операторы с наивысшим приоритетом выполняются первыми. Как только эти результаты получены, выполняются операторы следующего наивысшего приоритета. Так продолжается до тех пор, пока выражение не будет полностью оценено. Все операторы с одинаковым приоритетом выполняются в порядке слева направо.
Вот порядок приоритета операторов Python, которые вы видели до сих пор, от низшего к высшему:
Оператор
Описание
низший приоритет
Логическое ИЛИ
Логическое И
Логическое НЕ
, , , , , , ,
сравнения, идентификация
побитовое ИЛИ
побитовое ИСКЛЮЧАЮЩЕЕ ИЛИ
побитовое И
,
битовый сдвиг
,
сложение, вычитание
, , ,
умножение, деление, окруляющее деление, остаток от деления
, ,
плюс, минус, побитовый минус
наивысший приоритет
возведение в степень
Операторы в верхней части таблицы имеют самый низкий приоритет, а операторы в нижней части таблицы имеют самый высокий. Любые операторы в одной строке таблицы имеют одинаковый приоритет.
Понятно, почему умножение выполняется первым в приведенном выше примере: умножение имеет более высокий приоритет, чем сложение.
Аналогично, в приведенном ниже примере сначала возводится в степень , что равно , а затем выполняется умножение в порядок слева направо():
>>> 2 * 3 ** 4 * 5 810
Приоритеты операторов могут быть переопределены с помощью скобок. Выражения в скобках всегда выполняются в первую очередь, перед выражениями, которые не заключены в скобки. Таким образом, происходит следующее:
>>> 20 + 4 * 10 60 >>>(20 + 4) * 10 240
>>> 2 * 3 ** 4 * 5 810 >>> 2 * 3 **(4 * 5) 6973568802
В первом примере сначала вычисляется , затем результат умножается на . Во втором примере сначала вычисляется , затем значение увеличивается до этой степени, а затем результат умножается на .
Нет ничего плохого в том, чтобы свободно использовать круглые скобки, даже если они не нужны для изменения порядка оценки. Фактически, это считается хорошей практикой, потому что это может сделать код более читабельным, и это освобождает читателя от необходимости вызывать Приоритеты операторов из памяти. Учтите следующее:
(a < 10) and(b > 30)
Здесь круглые скобки совершенно не нужны, поскольку операторы сравнения имеют более высокий приоритет, чем , и в любом случае выполнялись бы первыми. Но некоторые могут считать намерение версии в скобках более очевидным, чем эта версия без скобок:
a < 10 and b > 30
С другой стороны, вероятно, есть те, кто предпочел бы последнее; это вопрос личных предпочтений. Дело в том, что вы всегда можете использовать круглые скобки, если считаете, что это делает код более читабельным, даже если в них нет необходимости менять порядок вычислений.
Функции для последовательностей
random.choice(seq)Возвращает случайный элемент из непустой последовательности . Если пуст, возникает ошибка .
Копировать
random.choices(population, weights=None, *, cum_weights=None, k=1)Возвращает список элементов размером , выбранных из с заменой. Если пуст, возникает ошибка .
Копировать
Если задана последовательность , выбор производится в соответствии с относительным весом. В качестве альтернативы, если задана последовательность , выбор производится в соответствии с совокупными весами (возможно, вычисляется с использованием ).
Например, относительный вес эквивалентны кумулятивному весу . Внутренне относительные веса преобразуются в кумулятивные перед выбором, поэтому поставка кумулятивного веса экономит время.
Если ни , ни не указаны, выбор производится с равной вероятностью. Если задана последовательность веса, она должна быть такой же, как и последовательность . возникает, если не правильно указан аргумент или .
или могут использовать любой тип чисел, который взаимодействует со значением , возвращаемым функцией (который включает целые числа, числа с плавающей точкой и фракции, но исключает десятичные числа).
random.shuffle(x)Перемешивает последовательность на месте.Необязательный аргумент — функция 0-аргумента, возвращающая случайное значение float в ; по умолчанию это функция .
Копировать
Чтобы перемешать неизменяемую последовательность и вернуть новый перемешанный список, используйте .
Обратите внимание, что даже для небольшого общее количество перестановок может увеличиваться сильнее, чем период большинства генераторов случайных чисел.Это означает, что большинство перестановок длинной последовательности никогда не могут быть выполнены. Например, последовательность длиной 2080 элементов является самой большой, которая может вписываться в период генератора случайных чисел «Мерсин Твистер»
random.sample(population, k)Возвращает список длиной из уникальных элементов, выбранных из последовательности или множества. Используется для случайной выборки без замены.
Копировать
Это новый список, содержащий элементы из последовательности, оставляя исходную последовательности неизменной. Новый список находится в порядке выбора, так что все суб-срезы будут также случайными последовательностями.
Это позволяет победителям розыгрышей (при выборке) делиться на главный приз, второе место и далее.
Участники не должны быть hashable или уникальными. Если последовательность содержит повторы, то каждое вхождение является возможным выбором в выборке.
Что бы выбрать одно число из ряда чисел, используйте объект в качестве аргумента. Это простое решение для выборки из большой последовательности: .
Если размер выборки больше длины последовательности, возникает ошибка .
Зачем нужны функции getstate() и setstate() ?
Если вы получили предыдущее состояние и восстановили его, тогда вы сможете оперировать одними и теми же случайными данными раз за разом. Помните, что использовать другую функцию random в данном случае нельзя. Также нельзя изменить значения заданных параметров. Сделав это, вы измените значение состояния .
Для закрепления понимания принципов работы и в генераторе случайных данных Python рассмотрим следующий пример:
Python
import random
number_list =
print(«Первая выборка «, random.sample(number_list,k=5))
# хранит текущее состояние в объекте state
state = random.getstate()
print(«Вторая выборка «, random.sample(number_list,k=5))
# Восстанавливает состояние state, используя setstate
random.setstate(state)
#Теперь будет выведен тот же список второй выборки
print(«Третья выборка «, random.sample(number_list,k=5))
# Восстанавливает текущее состояние state
random.setstate(state)
# Вновь будет выведен тот же список второй выборки
print(«Четвертая выборка «, random.sample(number_list,k=5))
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 |
importrandom number_list=3,6,9,12,15,18,21,24,27,30 print(«Первая выборка «,random.sample(number_list,k=5)) state=random.getstate() print(«Вторая выборка «,random.sample(number_list,k=5)) random.setstate(state) print(«Третья выборка «,random.sample(number_list,k=5)) random.setstate(state) print(«Четвертая выборка «,random.sample(number_list,k=5)) |
Вывод:
Shell
Первая выборка
Вторая выборка
Третья выборка
Четвертая выборка
1 2 3 4 |
Перваявыборка18,15,30,9,6 Втораявыборка27,15,12,9,6 Третьявыборка27,15,12,9,6 Четвертаявыборка27,15,12,9,6 |
Как можно заметить в результате вывода — мы получили одинаковые наборы данных. Это произошло из-за сброса генератора случайных данных.
Возведение в степень (**)
Нетипичный оператор для большинства других языков программирования. Тем он и удобен. Парная «звёздочка» (**) выполняет классическое математическое возведение числа «a» в степень «b»:
И показатель степени, и основание могут быть отрицательными:
И дробными:
Операндов у возведения в степень также может быть несколько. В таком случае, оператор «**» работает, как право-ассоциативный (т.е. операции выполняются справа-налево):
В завершении — про приоритет операций. Если в выражении используются разные операторы, то порядок их выполнения будет следующим:
- возведение в степень;
- умножение, деление, целочисленное деление и деление по модулю;
- сложение и вычитание.
Веб-разработка
Python это популярный язык для веб-разработки.
Все пакеты Python, перечисленные в этом
разделе, делают жизнь веб-разработчика
гораздо проще.
Beautiful Soup. Библиотека Python для быстрого парсинга HTML- и XML-файлов.
scrape. Модуль Python для веб-браузинга и скрапинга.
mechanize. Очень полезный модуль, благодаря которому вы получаете эмулятор браузера для взаимодействия с веб-страницами.
libgmail. Обеспечивает доступ к гугловскому сервису Gmail.
Google Maps. Благодаря этому модулю можно использовать веб-сервисы платформы Google Maps в своем приложении на Python.
Requests позволяет невероятно легко отсылать HTTP/1.1-запросы.
Selenium. При помощи этого модуля разработчики могут программными методами открывать веб-страницы, заполнять поля, кликать по кнопкам и отсылать формы.
pyquery позволяет делать jQuery-запросы в XML-документах. API этой библиотеки максимально приближен к jQuery. Для быстрой манипуляции с XML и HTML pyquery использует LXML.
Степени, логарифмирование, экспоненцирование
- math.pow(x, y)
- Возвращает x в степени y.
В ситуациях или данная функция всегда возвращает \(1\) даже если x равен NaN, Inf или -Inf. Однако, если x и y являются конечными числами, причем x отрицательное, а y не целое, то будет вызвано исключение ValueError:
- math.sqrt(x)
- Возвращает квадратный корень числа x.
- math.log(x)
- Если указано только число x, то возвращается натуральный логарифм данного числа. Если указано число x и основание base, то возвращается логарифм числа по указанному основанию.
По сути, команда равносильна команде :
- math.log10(x)
- Возвращает десятичный логарифм числа x, вычисление которого происходит немного точнее, чем .
- math.log2(x)
- Возвращает двоичный логарифм числа x, вычисление которого происходит немного точнее, чем .
- math.log1p(x)
- Возвращает натуральный логарифм от x увеличенного на \(1\) (), значение которого расчитывается более точно, особенно для небольших чисел x.
- math.exp(x)
- Возвращает .
- math.expm1(x)
- Возвращает , которое вычисляется значительно точнее, чем , особенно для небольших чисел x.
Комбинации элементов между собой
В библиотеке есть еще одна функция, связанная с перестановками и комбинациями, называемая . Эта функция является разновидностью функции , с той небольшой разницей, что она включает комбинации элементов между собой.
import itertools values = com = itertools.combinations_with_replacement(values, 2) for val in com: print(*val)
Выход:
1 1 1 2 1 3 1 4 2 2 2 3 2 4 3 3 3 4 4 4
Мы можем видеть четкое отличие вышеприведенного вывода от вывода с теми же параметрами при передаче в функцию .
Есть комбинации чисел, как будто их несколько экземпляров в списке. В основном это происходит потому, что, когда мы выбираем элемент из списка, вышеуказанная функция снова помещает то же значение, чтобы получить комбинации.
Еще пример. Наша задача — отобразить перестановку заданной строки. Здесь решаем эту проблему в python, используя перестановки встроенных функций (итерируемые).
Input : string = 'XYZ' Output : XYZ XZY YXZ YZX ZXY ZYX
Алгоритм
Step 1: given string. Step 2: Get all permutations of string. Step 3: print all permutations.
Пример кода
from itertools import permutations def allPermutations(str1): # Get all permutations of string 'ABC' per = permutations(str1) # print all permutations print("Permutation Of this String ::>") for i in list(per): print (''.join(i)) # Driver program if __name__ == "__main__": str1 = input("Enter the string ::>") allPermutations(str1)
Вывод
Enter the string ::> abc Permutation Of this String ::> abc acb bac bca cab cba