Математический модуль
Содержание:
- Функции для последовательностей
- Как отфильтровать элементы с помощью takewhile() и drop while()
- Генерация случайного n-мерного массива вещественных чисел
- Гиперболические функции
- Конвертация типов числа в Python
- Создать комбинации с помощью combinations()
- Возведение в степень (**)
- Использование Python itertools.chain() для объединения итераций
- Тригонометрические функции в Python
- Базы данных
- Тригонометрические функции
- Константы и специальные значения
- Модули
- 10 ответов
- Разработка игр
- Степени, логарифмирование, экспоненцирование
- cmath[править]
- Операторы присваивания Python
- Для генерации последовательности на основе счетчика
- Data Science и математика
- Игра в кости с использованием модуля random в Python
Функции для последовательностей
random.choice(seq)Возвращает случайный элемент из непустой последовательности . Если пуст, возникает ошибка .
Копировать
random.choices(population, weights=None, *, cum_weights=None, k=1)Возвращает список элементов размером , выбранных из с заменой. Если пуст, возникает ошибка .
Копировать
Если задана последовательность , выбор производится в соответствии с относительным весом. В качестве альтернативы, если задана последовательность , выбор производится в соответствии с совокупными весами (возможно, вычисляется с использованием ).
Например, относительный вес эквивалентны кумулятивному весу . Внутренне относительные веса преобразуются в кумулятивные перед выбором, поэтому поставка кумулятивного веса экономит время.
Если ни , ни не указаны, выбор производится с равной вероятностью. Если задана последовательность веса, она должна быть такой же, как и последовательность . возникает, если не правильно указан аргумент или .
или могут использовать любой тип чисел, который взаимодействует со значением , возвращаемым функцией (который включает целые числа, числа с плавающей точкой и фракции, но исключает десятичные числа).
random.shuffle(x)Перемешивает последовательность на месте.Необязательный аргумент — функция 0-аргумента, возвращающая случайное значение float в ; по умолчанию это функция .
Копировать
Чтобы перемешать неизменяемую последовательность и вернуть новый перемешанный список, используйте .
Обратите внимание, что даже для небольшого общее количество перестановок может увеличиваться сильнее, чем период большинства генераторов случайных чисел.Это означает, что большинство перестановок длинной последовательности никогда не могут быть выполнены. Например, последовательность длиной 2080 элементов является самой большой, которая может вписываться в период генератора случайных чисел «Мерсин Твистер»
random.sample(population, k)Возвращает список длиной из уникальных элементов, выбранных из последовательности или множества. Используется для случайной выборки без замены.
Копировать
Это новый список, содержащий элементы из последовательности, оставляя исходную последовательности неизменной. Новый список находится в порядке выбора, так что все суб-срезы будут также случайными последовательностями.
Это позволяет победителям розыгрышей (при выборке) делиться на главный приз, второе место и далее.
Участники не должны быть hashable или уникальными. Если последовательность содержит повторы, то каждое вхождение является возможным выбором в выборке.
Что бы выбрать одно число из ряда чисел, используйте объект в качестве аргумента. Это простое решение для выборки из большой последовательности: .
Если размер выборки больше длины последовательности, возникает ошибка .
Как отфильтровать элементы с помощью 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
Генерация случайного n-мерного массива вещественных чисел
- Использование для генерации n-мерного массива случайных вещественных чисел в пределах
- Использование для генерации n-мерного массива случайных вещественных чисел в пределах
Python
import numpy
random_float_array = numpy.random.rand(2, 2)
print(«2 X 2 массив случайных вещественных чисел в \n», random_float_array,»\n»)
random_float_array = numpy.random.uniform(25.5, 99.5, size=(3, 2))
print(«3 X 2 массив случайных вещественных чисел в \n», random_float_array,»\n»)
1 2 3 4 5 6 7 8 |
importnumpy random_float_array=numpy.random.rand(2,2) print(«2 X 2 массив случайных вещественных чисел в \n»,random_float_array,»\n») random_float_array=numpy.random.uniform(25.5,99.5,size=(3,2)) print(«3 X 2 массив случайных вещественных чисел в \n»,random_float_array,»\n») |
Вывод:
Shell
2 X 2 массив случайных вещественных чисел в
]
3 X 2 массив случайных вещественных чисел в
]
1 2 3 4 5 6 7 8 |
2X2массивслучайныхвещественныхчиселв0.0,1.0 0.089385930.89085866 0.473071690.41401363 3X2массивслучайныхвещественныхчиселв25.5,99.5 55.405785465.60206715 91.6218540484.16144062 44.34825227.28381058 |
Гиперболические функции
- 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
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, поэтому дополнительную установку перед использованием делать не требуется. Для получения дополнительной информации можете просмотреть официальную документацию.
Создать комбинации с помощью combinations()
Мы также можем создавать последовательности комбинаций, используя Python .
iterator = itertools.combinations(*sequence, r)
Вот простой пример:
import itertools words = results = itertools.combinations(words, 2) for item in results: print(item)
Выход
('hello', 'from') ('hello', 'AskPython') ('hello', 'how') ('from', 'AskPython') ('from', 'how') ('AskPython', 'how')
Если вы хотите, чтобы в комбинациях повторялись последовательные элементы, вы можете использовать .
results = itertools.combinations_with_replacement(words, 3) for item in results: print(item)
Выход
('hello', 'hello', 'hello') ('hello', 'hello', 'from') ('hello', 'hello', 'AskPython') ('hello', 'hello', 'how') ('hello', 'from', 'from') ('hello', 'from', 'AskPython') ('hello', 'from', 'how') ('hello', 'AskPython', 'AskPython') ('hello', 'AskPython', 'how') ('hello', 'how', 'how') ('from', 'from', 'from') ('from', 'from', 'AskPython') ('from', 'from', 'how') ('from', 'AskPython', 'AskPython') ('from', 'AskPython', 'how') ('from', 'how', 'how') ('AskPython', 'AskPython', 'AskPython') ('AskPython', 'AskPython', 'how') ('AskPython', 'how', 'how') ('how', 'how', 'how')
Точно так же вы можете перечислить перестановки, используя и .
Возведение в степень (**)
Нетипичный оператор для большинства других языков программирования. Тем он и удобен. Парная «звёздочка» (**) выполняет классическое математическое возведение числа «a» в степень «b»:
И показатель степени, и основание могут быть отрицательными:
И дробными:
Операндов у возведения в степень также может быть несколько. В таком случае, оператор «**» работает, как право-ассоциативный (т.е. операции выполняются справа-налево):
В завершении — про приоритет операций. Если в выражении используются разные операторы, то порядок их выполнения будет следующим:
- возведение в степень;
- умножение, деление, целочисленное деление и деление по модулю;
- сложение и вычитание.
Использование 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')
Теперь у нас также есть напечатанные значения.
Тригонометрические функции в 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 |
Обратите внимание, что вначале мы конвертировали значение угла из градусов в радианы для осуществления дальнейших операций
Базы данных
Модули, перечисленные в этом разделе,
имеют открытый исходный код. С их помощью
можно существенно облегчить доступ к
базам данных.
MySQLdb. Python DB API-2.0-совместимый интерфейс для доступа к базам данных MySQL.
PyGreSQL. Модуль, который служит интерфейсом для базы данных PostgreSQL. Он дает возможность работать с PostgreSQL-фичами из Python-скрипта.
Gadfly. Простая реляционная СУБД, реализованная на Python (на основе SQL).
SQLAlchemy. Библиотека Python для работы с базами данных с применением ORM. Позволяет разработчикам приложений использовать всю мощь и гибкость SQL.
KinterbasDB. Расширение Python, реализующее поддержку совместимости Python Database API 2.0 для опенсорсной реляционной базы данных Firebird и некоторых версий ее проприетарной кузины — Borland Interbase.
Тригонометрические функции
Тригонометрические функции для комплексного числа также доступны в модуле .
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)
Константы и специальные значения
- 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.
Модули
Система модулей позволяет вам логически организовать ваш код на 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)
Однако это конструкцию следует использовать с осторожностью, поскольку при импортировании нескольких модулей можно запутаться в своем собственном коде
10 ответов
Лучший ответ
Запустить это
И прочитайте об операторе здесь: Что делает ключевое слово yield?
Вот ответ:
22
temporary_user_name
13 Янв 2019 в 04:21
Код ОП, по-видимому, основан на реализации алгоритма Spigot, скопированного из здесь.
Чтобы исправить код в соответствии с вопросом OP (хотя я переименовал переменные и функции, чтобы они соответствовали тому, что они были в исходном коде), одним из решений может быть:
Кроме того, вот гораздо более быстрая * реализация, также основанная на алгоритме Спигота:
Я несколько раз тестировал оба с помощью этого онлайн-генератора чисел Пи.
Вся заслуга этого предложения по deeplook.
* На основе тестирования 10000 цифр, где я получил около 7 секунд по сравнению с около 1 секунды.
2
Alex Harvey
6 Мар 2019 в 07:51
Формула Wallis может получить 3.141592661439964, но для решения этой проблемы необходим более эффективный способ.
А теперь мой код
lenik
1 Янв 2020 в 07:42
С сайта Фабрис Беллард: алгоритм вычисления Pi. Извините за такую простую реализацию. 1000 достаточно быстро (для меня 0,1 с), но 10000 не так быстро — 71 с 🙁
1
Guest007
21 Июл 2019 в 11:50
Конечно, вы также можете использовать diff или tc, но вам нужно будет скопировать эти 1000 цифр откуда-то, и вы просто отправляете свою программу и проверяете, превышает ли счет 999.
Вы можете попытаться напечатать еще больше цифр там и таким образом получить больше очков. Возможно, вам понравится.
1
user1
1 Дек 2014 в 13:16
Я решил с формулой ниже 5-6 лет назад.
Машино-подобная формула
Википедия: https://en.wikipedia.org/wiki/Machin-like_formula
Извините за качество кода. Имена переменных могут быть бессмысленными.
Fatih Mert Doğancan
27 Янв 2020 в 11:14
Вот другой способ, который я нашел здесь -> Расчет числа пи Python? для аппроксимации python на основе Чудновского формула братьев для генерации Пи, которую я слегка изменил для своей программы.
Я надеюсь, что это поможет, так как вы можете генерировать любое количество цифр числа Пи, которое вы хотите сгенерировать.
Community
23 Май 2017 в 12:18
Я не знаком с вашим алгоритмом. Это реализация BBP?
В любом случае, ваш является генератором. Попробуйте использовать его в цикле for:
Обратите внимание, что этот цикл бесконечен: никогда не выбрасывает
1
Managu
25 Янв 2012 в 15:08
Если вы не хотите реализовывать свой собственный алгоритм, вы можете использовать mpmath.
Обновление . Код поддерживает более старые и новые установки SymPy (см. ) . *
30
Community
23 Май 2017 в 10:31
Это делает то, что вы хотите?
Scott Hunter
25 Янв 2012 в 15:14
Разработка игр
Python — это очень разносторонний язык,
позволяющий программистам создавать
самые разнообразные приложения, включая
видеоигры.
Pygame. Набор модулей для написания видеоигр. Pygame расширяет функционал прекрасной библиотеки SDL. Благодаря ему на Python можно создавать полнофункциональные игры и мультимедиа-программы.
Pyglet. Мощная, но при этом простая в использовании библиотека Python для разработки игр и других приложений с большим количеством визуальных эффектов для Windows, Mac OS X и Linux.
pyOpenGL. Этот модуль чаще других используется для обеспечения работы с библиотекой OpenGL и связанными с нею API в программах на Python.
Степени, логарифмирование, экспоненцирование
- 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.
cmath[править]
Этот модуль всегда доступен и позволяет проводить операции над комплексными числами. При этом функции модуля поддерживают работу не только с комплексными, но и с целыми числами и числами с плавающей запятой
Причина, по которой имеются два таких схожих модуля, в том, что многим пользователям не нужны комплексные числа или они просто не знают что это такое. В этих случаях будет даже лучше, если при math.sqrt(-1) будет возбуждено исключение, чем будет найдено комплексное решение. При этом отметим, что функции в модуле всегда возвращают комплексное число, даже если исходные числа не содержат мнимой части.
Переход к полярным координатам и обратноправить
Комплексное число z может быть представлено в Декартовой системе координат в представлении, что действительная z.real часть откладывается по оси x, а мнимая z.imag — по оси y. Само число z записывается:
z = z.real + z.imag*1j
Полярные координаты позволяют представить комплексное число другим образом — в виде радиуса ρ и фазового угла φ. Координата ρ определяет расстояние от точки до полюса, координата φ — угол между полярной осью и отрезком, соединяющим полюс и рассматриваемую точку.
Следующие функции могут быть использованы для перехода от исходных прямоугольных координат к полярным:
-
cmath.phase
Возвращает фазовый угол φ для числа x, phase(x) эквивалентно math.atan2(x.imag, x.real). Результат лежит в интервале .
(x)
-
cmath.polar
Возвращает представление x в полярных координатах, то есть возвращает пару (r, phi).
(x)
-
cmath.rect(r, phi)
Возвращает обычное комплексное представление x из представления в полярных координатах.
(x)
Другие функцииправить
Модуль содержит также ряд функций, с которыми мы ознакомились в модуле math, имеющими то же применение не только к действительным, но и к комплексным числам:
Константыправить
- cmath.pi
- cmath.e
Изучив, данный раздел, мы можем приступить к третьему уроку данного курса, посвященному циклу и последовательностям.
Операторы присваивания Python
Оператор «=» присваивает значение, расположенное справа, переменной слева. Например, v = 23 присваивает значение числа 23 переменной v.
В программировании часто используют составные операторы присваивания. Они соединяют арифметический оператор с оператором «=». Поэтому для сложения мы используем оператор «+» с оператором «=», чтобы получить составной оператор «+=». Пример:
w = 5 w += 1 print(w)
Вывод
6
Сначала мы задаём переменной значение . Затем используем составной оператор присваивания , чтобы прибавить число справа, к переменной, расположенной слева, и присвоить результат переменной .
Составные операторы присваивания часто используются в циклах for:
for x in range (0, 7): x *= 2 print(x)
Вывод
0 2 4 6 8 10 12
При помощи for можно автоматизировать процесс использования оператора «. Он умножает переменную на число , а затем присваивает полученный результат переменной для следующей итерации цикла.
В Python предусмотрен составной оператор присваивания для каждой арифметической операции:
y += 1 # добавить число и присвоить результат y -= 1 # отнять число и присвоить результат y *= 2 # умножить на число и присвоить результат y /= 3 # разделить на число и присвоить результат y // = 5 # разделить без остатка на число и присвоить результат y **= 2 # возвести в степень и присвоить результат y %= 3 # вернуть остаток от деления и присвоить результат
Составные операторы присваивания полезны в тех случаях, когда переменная должна увеличиваться или уменьшаться с помощью инкремента. А также когда необходимо автоматизировать некоторый процесс в создаваемой программе.
Для генерации последовательности на основе счетчика
Мы можем использовать функцию Python чтобы сделать итераторы соответствующими .
iterator = itertools.count(start=0, step=1)
Здесь это итератор, который ведет счет бесконечно, начиная с 0 и далее. Продолжает увеличивать счет на . Мы также можем установить десятичное или отрицательное число.
Например, если вы хотите доказать, что у вас бесконечный цикл, вы можете запустить приведенный ниже фрагмент, но это НЕ рекомендуется.
Просто убедитесь, что считается бесконечно.
for num in itertools.count(start=0, step=1): # Infinite loop! print(num)
Использование этой функции может не сразу показаться вам очевидным, вы можете комбинировать ее с другими функциями, такими как метод zip, для создания последовательностей.
Рассмотрим пример ниже:
import itertools numbers = data = list(zip(itertools.count(0, 10), numbers)) print(data)
Здесь вы можете увидеть мощь итераторов. Поскольку итераторы производят выходные данные только по запросу, мы можем использовать с другой конечной итерацией, например списком.
Теперь это используется для создания индексов для элементов в списке.
Теперь, если вы хотите иметь подмножество последовательности итератора с помощью Python , вы также можете использовать для создания только части итератора.
import itertools for num in itertools.islice(itertools.count(start=0, step=10), 4): print(num) for num in itertools.islice(itertools.count(), 0, 50, 10): print(num)
Выход
0 10 20 30 0 10 20 30 40
Как видите, обе последовательности идентичны. Это показывает, что у вас может быть несколько подходов к созданию последовательностей.
Data Science и математика
Для Python есть много расширений, которые
можно использовать в научных целях,
например, в математике, науке о данных
и инженерии.
SciPy. SciPy (произносится как «сай пай») это экосистема программного обеспечения с открытым кодом для математики, науки и инженерии.
Matplotlib. Библиотека Python для создания 2D-графиков. Генерирует пригодные для печати изображения в разных форматах. Matplotlib может использоваться в скриптах, интерпретаторе Python, в Jupyter Notebook, на серверах веб-приложений и в GUI-инструментарии.
Pandas. Быстрый, мощный, гибкий и легкий в использовании инструмент для анализа данных и работы с данными. Имеет открытый исходный код.
Numpy. Библиотека, обеспечивающая поддержку больших, многомерных массивов и матриц. Для работы с этими массивами Numpy имеет обширную коллекцию высокоуровневых математических функций.
Игра в кости с использованием модуля 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 |
Вот и все. Оставить комментарии можете в секции ниже.