Работа с числами в python

Тригонометрические функции

math.sin(x)
Возвращает синус угла x значение которого задано в радианах.
math.cos(x)
Возвращает косинус угла x значение которого задано в радианах.
math.tan(x)
Возвращает тангенс угла x значение которого задано в радианах.

При определенных значениях углов тангенс должен быть равен либо \(-\infty\) либо \(+\infty\), скажем \(\tan (3\pi/2) = +\infty\), a \(\tan (-\pi/2) = -\infty\), но вместо этого мы получаем либо очень большие либо очень маленькие значения типа float:

math.asin(x)
Возвращает арксинус значения x, т.е. такое значение угла y (выраженного в радианах) при котором .
math.acos(x)
Возвращает арккосинус значения x, т.е. возвращает такое значение угла y (выраженного в радианах) при котором .
math.atan(x)
Возвращает арктангенс значения x, т.е. возвращает такое значение угла y (выраженного в радианах) при котором .
math.atan2(y, x)
Возвращает арктангенс значения x/y, т.е. возвращает такое значение угла z (выраженного в радианах) при котором .

Однако, данная функция, в отличие от функции , способна вычислить правильный квадрвнт в котором должно находиться значение результата. Это возможно благодаря тому, что функция принимает два аргумента – это координаты точки, которая является концом отрезка начатого в начале координат

Сам по себе, угол между этим отрезком и положительным направлением оси абцисс не несет информации о том где располагается конец этого отрезка, что приводит к одинаковому значению арктангенса, для разных отрезков, но функция позволяет избежать этого, что бывает очень важно в целом ряде задач:

math.hypot(x, y)
Вычисляет значение гипотенузы по заданным значениям катетов x и y. Данная функция равносильна команде .

Использование itertools.tee() для клонирования последовательностей

Есть еще одна полезная функция под названием , которая клонирует последовательность и производит две последовательности.

cloned1, cloned2 = itertools.tee(original_sequence)

Это основано на команде Linux tee, которая клонирует свои выходные данные.

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

import itertools

single_iterator = itertools.islice(itertools.count(), 3)
cloned1, cloned2 = itertools.tee(single_iterator)

for num in cloned1:
    print('cloned1: {}'.format(num))
for num in cloned2:
    print('cloned2: {}'.format(num))

Выход

cloned1: 0
cloned1: 1
cloned1: 2
cloned2: 0
cloned2: 1
cloned2: 2

Действительно, мы могли видеть две клонированные последовательности с одинаковыми выходами.

Гиперболические функции

math.sinh(x)
Возвращает гиперболический синус угла x заданного в радианах.
math.cosh(x)
Возвращает гиперболический косинус угла x заданного в радианах.
math.tanh(x)
Возвращает гиперболический тангенс угла x заданного в радианах.
math.asinh(x)
Возвращает гиперболический арксинус значения x, т.е. возвращает такое значение угла y (заданного в радианах) при котором .
math.acosh(x)
Возвращает гиперболический арккосинус значения x, т.е. возвращает такое значение угла y (заданного в радианах) при котором .
math.atanh(x)
Возвращает гиперболический арктангенс значения x, т.е. возвращает такое значение угла y (заданного в радианах) при котором .

Модули

Система модулей позволяет вам логически организовать ваш код на Python. Группирование кода в модули значительно облегчает процесс написания и понимания программы.
Говоря простым языком, модуль в Python это просто файл, содержащий код на Python. Каждый модуль в Python может содержать переменные, объявления классов и функций.
Кроме того, в модуле может находиться исполняемый код.

Вы можете использовать любой питоновский файл как модуль в другом файле, выполнив в нем команду . Команда в Python обладает
следующим синтаксисом:

import math
# Используем функцию sqrt из модуля math
print (math.sqrt(9))
# Печатаем значение переменной pi, определенной в math
print (math.pi)

Важно знать, что модуль загружается лишь однажды, независимо от того, сколько раз он был импортирован. Это препятствует цикличному выполнению содержимого модуля

Команда позволяет вам импортировать не весь модуль целиком, а только определенное его содержимое. Например:


# Импортируем из модуля math функцию sqrt
from math import sqrt
# Выводим результат выполнения функции sqrt.
# Обратите внимание, что нам больше незачем указывать имя модуля
print (sqrt(144))
# Но мы уже не можем получить из модуля то, что не импортировали
print (pi) # Выдаст ошибку

Выражение не импортирует весь модуль, а только предоставляет доступ к конкретным объектам, которые мы указали.

В Python так же возможно импортировать всё (переменные, функции, классы) за раз из модуля, для этого используется конструкция . Например:

from math import *
 
# Теперь у нас есть доступ ко всем функция и переменным, определенным в модуле math
 
print (sqrt(121))
print (pi)
print (e)

Однако это конструкцию следует использовать с осторожностью, поскольку при импортировании нескольких модулей можно запутаться в своем собственном коде

Практическая работа. Создание собственного модуля

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

from math import pi, pow
 
def rectangle(a, b):
    return round(a * b, 2)
 
def triangle(a, h):
    return round(0.5 * a * h, 2)
 
def circle(r):
    return round(pi * pow(r, 2), 2) 

Здесь также иллюстрируется принцип, что один модуль может импортировать другие. В данном случае импортируются функции из модуля .

Поместите данный код в отдельный файл square.py. Однако куда поместить сам файл?

Когда интерпретатор Питона встречает команду импорта, то просматривает на наличие файла-модуля определенные каталоги. Их перечень можно увидеть по содержимому :

>>> import sys
>>> sys.path
['', '/usr/lib/python35.zip', 
'/usr/lib/python3.5', 
'/usr/lib/python3.5/plat-x86_64-linux-gnu',
'/usr/lib/python3.5/lib-dynload', 
'/home/pl/.local/lib/python3.5/site-packages',
'/usr/local/lib/python3.5/dist-packages', 
'/usr/lib/python3/dist-packages']

Это список адресов в Linux. В Windows он будет несколько другим. Первый элемент – пустая строка, что обозначает текущий каталог, то есть то место, где сохранена сама программа, импортирующая модуль. Если вы сохраните файл-модуль и файл-программу в одном каталоге, то интерпретатор без труда найдет модуль.

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

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

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

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

Манипуляции с изображениями и видео

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

Python Imaging Library (PIL). PIL добавляет в интерпретатор Python возможность обработки изображений. Эта библиотека поддерживает много форматов файлов и предоставляет хороший функционал для работы с графикой.

Gdmodule. Это интерфейс для библиотеки GD, созданной Томасом Баутелом.

VideoCapture. Win32-расширение для доступа к таким видеоустройствам, как веб-камеры (USB) и ТВ-карты.

MoviePy. Библиотека Python для редактирования видео: обрезка, склейка, вставка надписей, нелинейное редактирование, обработка видео и создание пользовательских эффектов.

pyscreenshot. Кроссплатформенный модуль, позволяющий делать скриншоты без установки сторонних библиотек.

Комбинации элементов между собой

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

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

Функция compare()

Функция сравнивает два числа с десятичной запятой и возвращает значения в зависимости от условий следующим образом:

  • Возвращает -1, если первое десятичное число меньше второго десятичного числа.
  • Возвращает 1, если первое десятичное число больше второго десятичного числа.
  • Возвращает 0, если оба значения десятичной точки равны.

Пример:

import decimal as d

valx = d.Decimal(122.20)
valy = d.Decimal(123.01)

print("Value 1: ",valx)
print("Value 2: ",valy)

compare = valx.compare(valy)
print(compare)

Выход:

Value 1:  122.2000000000000028421709430404007434844970703125
Value 2:  123.0100000000000051159076974727213382720947265625
-1

Число Пи из библиотеки math

Первой важной математической константой является число Пи (π). Оно обозначает отношение длины окружности к диаметру, его значение 3,141592653589793

Чтобы получить к нему доступ, сначала импортируем библиотеку math следующим образом:

Python

import math

1 importmath

Затем можно получить доступ к константе, вызывая :

Python

math.pi

1 math.pi

Вывод

Shell

3.141592653589793

1 3.141592653589793

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

Python

import math

radius = 2
print(‘Площадь окружности с радиусом 2 равна:’, math.pi * (radius ** 2))

1
2
3
4

importmath

radius=2

print(‘Площадь окружности с радиусом 2 равна:’,math.pi*(radius**2))

Вывод

Shell

Площадь окружности с радиусом 2 равна: 12.566370614359172

1 Площадьокружностисрадиусом2равна12.566370614359172

Мы возвели радиус во вторую степень и умножили значение на число Пи, как и следовало сделать в соответствии с формулой πr2.

Зачем нужны функции 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

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))

Вывод:

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

Как можно заметить в результате вывода — мы получили одинаковые наборы данных. Это произошло из-за сброса генератора случайных данных.

Фаза (аргумент)

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

Угол между вектором и действительной осью определяется как или комплексного числа.

Формально это определяется как:

фаза (число) = arctan (мнимая_часть / действительная_часть)

где функция arctan является обратной математической функцией tan.

В Python мы можем получить фазу комплексного числа, используя модуль для комплексных чисел. Мы также можем использовать функцию и получить фазу из ее математического определения.

import cmath
import math

num = 4 + 3j

# Using cmath module
p = cmath.phase(num)
print('cmath Module:', p)

# Using math module
p = math.atan(num.imag/num.real)
print('Math Module:', p)

Вывод:

cmath Module: 0.6435011087932844
Math Module: 0.6435011087932844

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

import cmath
import numpy as np

num = 4 + 3j

# Using cmath module
p = cmath.phase(num)
print('cmath Module in Radians:', p)
print('Phase in Degrees:', np.degrees(p))

Вывод:

cmath Module in Radians: 0.6435011087932844
Phase in Degrees: 36.86989764584402

Как отфильтровать элементы с помощью takewhile() и drop while()

Мы можем использовать Python для фильтрации элементов последовательности, если условие . Если условие становится , фильтрация прекращается.

iterator = itertools.takewhile(condition, *sequence)

Вот простой пример, который фильтрует числа, если число положительное.

import itertools

sequence = itertools.takewhile(lambda x: x > 0, )

for item in sequence:
    print(item)

Выход

1
2
3

Здесь последовательность остановилась после 3, поскольку следующий элемент равен -1.

Точно так же фильтрует элементы, пока условие имеет значение и возвращает все элементы после первого значения, отличного от false.

import itertools

data = itertools.dropwhile(lambda x: x < 5, )
for item in data:
    print(item)

Выход

12
7
1
-5

Унарные арифметические операции Python

Унарное математическое выражение состоит из одного элемента. Знаки плюса и минуса в питоне могут быть использованы как единичный оператор, чтобы вернуть тождественное значение (+) или сменить знак числа (-).

Знак плюса означает тождественное значение. Мы можем использовать его с положительными значениями:

i = 3.3
print(+i)

Вывод

3.3

Когда мы используем знак плюса с отрицательным значением, он также вернёт значение тождественное данному. В этом случае он вернёт отрицательное значение:

j = -19
print(+j)

Вывод

-19

При использовании с отрицательным значением знак плюса возвращает то же отрицательное значение.

Минус (в отличие от знака плюса) изменяет знак числа. Поэтому при передаче положительного числа мы получим отрицательное значение:

i = 3.3
print(-i)

Вывод

-3.3

А когда мы используем минус в качестве унарного оператора с отрицательным значением, будет возвращено положительное число:

j = -19
print(-j)

Вывод

19

Унарные арифметические операторы возвращают тождественное значение в случае с +i, или противоположное по знаку число в случае с -i.

Веб-разработка

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.

Число с плавающей запятой

Число с плавающей запятой содержит десятичные точки. Он может быть положительным или отрицательным.

Мы можем использовать функцию 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

Примеры использования модуля random.

Базовое применение модуля:

>>> import random
# Случайное float:  0.0 <= x < 1.0
>>> random.random()
# 0.37444887175646646

# Случайное float:  2.5 <= x < 10.0
>>> random.uniform(2.5, 10.0)
# 3.1800146073117523

# Интервал между прибытием в среднем 5 секунд
>>> random.expovariate(1  5)
# 5.148957571865031

# Четное целое число от 0 до 100 включительно
>>> random.randrange(10)
# 7

# Even integer from 0 to 100 inclusive
>>> random.randrange(, 101, 2)
26

# Один случайный элемент из последовательности
>>> random.choice()
'draw'

>>> deck = 'ace two three four'.split()
# Перемешать список
>>> random.shuffle(deck)
>>> deck
'four', 'two', 'ace', 'three'

# Четыре образца без замены
>>> random.sample(, k=4)
# 

Имитационные расчеты:

# Шесть вращений колеса рулетки (взвешенная выборка с заменой)
>>> choices(, 18, 18, 2], k=6)
# 

# Сдайте 20 карт без замены из колоды из 52 игральных карт
# и определите пропорцию карт с достоинством в: 
# десять, валет, дама или король.
>>> dealt = sample(, counts=16, 36], k=20)
>>> dealt.count('tens')  20
# 0.15

# Оценка вероятности получения 5 или более попаданий из 7 
# бросаний монеты, которая выпадает орлом в 60% случаев.
>>> def trial():
...     return choices('HT', cum_weights=(0.60, 1.00), k=7).count('H') >= 5
...
>>> sum(trial() for i in range(10_000))  10_000
# 0.4169

>>> # Вероятность того, что медиана из 5 выборок находится в средних двух квартилях
>>> def trial():
...     return 2_500 <= sorted(choices(range(10_000), k=5))[2 < 7_500
...
>>> sum(trial() for i in range(10_000))  10_000
# 0.7958

Пример статистической начальной загрузки с использованием повторной выборки с заменой для оценки доверительного интервала для среднего значения выборки:

# http://statistics.about.com/od/Applications/a/Example-Of-Bootstrapping.htm
from statistics import fmean as mean
from random import choices

data = 41, 50, 29, 37, 81, 30, 73, 63, 20, 35, 68, 22, 60, 31, 95
means = sorted(mean(choices(data, k=len(data))) for i in range(100))
print(f'The sample mean of {mean(data).1f} has a 90% confidence '
      f'interval from {means5.1f} to {means94.1f}')

Пример теста перестановки повторной выборки для определения статистической значимости или Р-значения наблюдаемой разницы между эффектами препарата и плацебо:

# Example from "Statistics is Easy" by Dennis Shasha and Manda Wilson
from statistics import fmean as mean
from random import shuffle

drug = 54, 73, 53, 70, 73, 68, 52, 65, 65
placebo = 54, 51, 58, 44, 55, 52, 42, 47, 58, 46
observed_diff = mean(drug) - mean(placebo)

n = 10_000
count = 
combined = drug + placebo
for i in range(n):
    shuffle(combined)
    new_diff = mean(combined) - mean(combinedlen(drug):])
    count += (new_diff >= observed_diff)

print(f'{n} label reshufflings produced only {count} instances with a difference')
print(f'at least as extreme as the observed difference of {observed_diff.1f}.')
print(f'The one-sided p-value of {count  n.4f} leads us to reject the null')
print(f'hypothesis that there is no difference between the drug and the placebo.')

Моделирование времени прибытия и доставки услуг для многосерверной очереди:

from heapq import heappush, heappop
from random import expovariate, gauss
from statistics import mean, median, stdev

average_arrival_interval = 5.6
average_service_time = 15.0
stdev_service_time = 3.5
num_servers = 3

waits = []
arrival_time = 0.0
servers = 0.0 * num_servers  # time when each server becomes available
for i in range(100_000):
    arrival_time += expovariate(1.0  average_arrival_interval)
    next_server_available = heappop(servers)
    wait = max(0.0, next_server_available - arrival_time)
    waits.append(wait)
    service_duration = gauss(average_service_time, stdev_service_time)
    service_completed = arrival_time + wait + service_duration
    heappush(servers, service_completed)

print(f'Mean wait: {mean(waits).1f}.  Stdev wait: {stdev(waits).1f}.')
print(f'Median wait: {median(waits).1f}.  Max wait: {max(waits).1f}.')

Специальные функции

math.erf(x)
Возвращает значение функции ошибок от указанного значения аргумента x.

Доступно в Python начиная с версии 3.2.

math.erfc(x)
Возвращает значение дополнительной функции ошибок от указанного значения аргумента x. Эквивалентна команде .

Доступно в Python начиная с версии 3.2.

math.gamma(x)
Возвращает значение гамма функции от указанного аргумента x.

Данная функция обобщает понятие факториала, на действительные числа (и на комплексные, но в данном случае используются только действительные числа). Если \(x = 0\) то это вызовет исключение ValueError.

Доступно в Python начиная с версии 3.2.

math.lgamma(x)
Возвращает значение натурального логарифма от модуля гамма функции при заданном значении аргумента x.

Данная функция эквивалентна команде .

Доступно в Python начиная с версии 3.2.

USB и последовательные порты

Знаете ли вы, что при помощи Python можно
получить доступ к USB и последовательным
портам компьютера? Если вам нужно решить
подобную задачу, следующие модули
помогут вам в этом.

PyUSB. Это простой в использовании модуль для доступа к USB-устройствам. PyUSB опирается на нативную системную библиотеку для USB-доступа. Работает «из коробки» с libusb 0.1, libusb 1.0, libusbx, libusb-win32 и OpenUSB, а также с Python в любой версии, начиная с 2.4 (и включая Python 3).

PySerial. Библиотека Python для доступа к последовательным портам.

USPP. Мультиплатформенный модуль Python для доступа к последовательным портам.

Экспоненциальные и логарифмические функции

import cmath
a = 3 + 4j
print('e^c =', cmath.exp(a))
print('log2(c) =', cmath.log(a, 2))
print('log10(c) =', cmath.log10(a))
print('sqrt(c) =', cmath.sqrt(a))

Вывод:

e^c = (-13.128783081462158-15.200784463067954j)
log2(c) = (2.321928094887362+1.3378042124509761j)
log10(c) = (0.6989700043360187+0.4027191962733731j)
sqrt(c) = (2+1j)

Другие

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

>>> print(cmath.isfinite(2 + 2j))
True

>>> print(cmath.isfinite(cmath.inf + 2j))
False

>>> print(cmath.isinf(2 + 2j))
False

>>> print(cmath.isinf(cmath.inf + 2j))
True

>>> print(cmath.isinf(cmath.nan + 2j))
False

>>> print(cmath.isnan(2 + 2j))
False

>>> print(cmath.isnan(cmath.inf + 2j))
False

>>> print(cmath.isnan(cmath.nan + 2j))
True

>>> print(cmath.isclose(2+2j, 2.01+1.9j, rel_tol=0.05))
True

>>> print(cmath.isclose(2+2j, 2.01+1.9j, abs_tol=0.005))
False

Функция экспоненты 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

 
# Передача значений методу exp() и вывод

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

Как видно из примера выше, генерируется ошибка .

Игра в кости с использованием модуля 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

Вот и все. Оставить комментарии можете в секции ниже.

Функция логарифма log() в Python

Функция возвращает логарифм определенного числа. Натуральный логарифм вычисляется относительно основания . В следующем примере показано использование функции логарифма:

Python

import math

print(«math.log(10.43):», math.log(10.43))
print(«math.log(20):», math.log(20))
print(«math.log(math.pi):», math.log(math.pi))

1
2
3
4
5

importmath

print(«math.log(10.43):»,math.log(10.43))

print(«math.log(20):»,math.log(20))

print(«math.log(math.pi):»,math.log(math.pi))

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

Shell

math.log(10.43): 2.344686269012681
math.log(20): 2.995732273553991
math.log(math.pi): 1.1447298858494002

1
2
3

math.log(10.43)2.344686269012681

math.log(20)2.995732273553991

math.log(math.pi)1.1447298858494002

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *

Adblock
detector