Работа с числами в python
Содержание:
- Тригонометрические функции
- Использование itertools.tee() для клонирования последовательностей
- Гиперболические функции
- Модули
- Практическая работа. Создание собственного модуля
- Манипуляции с изображениями и видео
- Комбинации элементов между собой
- Функция compare()
- Число Пи из библиотеки math
- Зачем нужны функции getstate() и setstate() ?
- Фаза (аргумент)
- Как отфильтровать элементы с помощью takewhile() и drop while()
- Унарные арифметические операции Python
- Веб-разработка
- Число с плавающей запятой
- Примеры использования модуля random.
- Специальные функции
- USB и последовательные порты
- Экспоненциальные и логарифмические функции
- Функция экспоненты exp() в Python
- Игра в кости с использованием модуля random в Python
- Функция логарифма log() в 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=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 |
Как можно заметить в результате вывода — мы получили одинаковые наборы данных. Это произошло из-за сброса генератора случайных данных.
Фаза (аргумент)
Мы можем представить комплексное число как вектор, состоящий из двух компонентов на плоскости, состоящей из и осей. Следовательно, две составляющие вектора — это действительная и мнимая части.
Угол между вектором и действительной осью определяется как или комплексного числа.
Формально это определяется как:
фаза (число) = 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 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 |