https://docs.python.org/3/library/math.html
https://docs.python.org/3/library/random.html
https://docs.python.org/3/library/decimal.html
https://docs.python.org/3/library/fractions.html
Moduł jest otoczką dla biblioteki math z języka C.
import math
# Wybrane funkcje matematyczne, zwykle zwracają float.
# dir(math) - lista obiektów.
# help(math) - opisy obiektów.
# Zaokrąglanie.
# math.ceil(x) - the smallest integer value greater than or equal to x.
# math.floor(x) - the largest integer value less than or equal to x.
# math.trunc(x) - int bliżej zera (Py2.6+).
# Python 2: ceil() and floor() return float
# Python 3: ceil() and floor() return int
# Potęgi i logarytmy.
# math.exp(x) - inaczej e ** x
# math.log(x) - logarytm naturalny ln(x).
# math.log(x, base) - inaczej math.log(x)/math.log(base) (Py2.3+)
# math.log1p(x) - oznacza math.log(1 + x),
# lepsze dla małych x (Py2.6+)
# math.log10(x) - dokładniajsze niż math.log(x, 10).
# math.pow(x, y) - oznacza x ** y
# math.sqrt(x) - pierwiastek kwadratowy.
# Funkcje trygonometryczne.
# math.sin(x), math.cos(x), math.tan(x),
# math.asin(x), math.acos(x), math.atan(x),
# math.sinh(x), math.cosh(x), math.tanh(x),
# math.asinh(x), math.acosh(x), math.atanh(x), (Py2.6)
# math.hypot(x, y) - oznacza math.sqrt(x*x + y*y), norma euklidesowa.
# math.fabs(x) - wartość bezwzględna float.
# math.radians(x) - zamiana stopni na radiany.
# math.degrees(x) - zamiana radiany na stopnie.
print(math.pi) # 3.141592... stała matematyczna
print(math.e) # 2.718281... stała matematyczna
print(math.hypot(3, 4)) # 5.0 float
# Nowe funkcje z Pythona 2.6.
# math.factorial(x) - silnia.
# math.fsum(iterable) - suma float bez (dużej) utraty precyzji.
# Nieskończoności: float("inf"), float("-inf"), math.inf [Py3.5+]
# A floating-point "not a number" (NaN) value:
# float("nan"), math.nan [Py3.5+]
# math.isinf(x) - Check if the float x is positive or negative infinity.
# math.isnan(x) - Check if the float x is a NaN (not a number).
math.factorial(16) # 20922789888000L
sum([.1, .1, .1, .1, .1, .1, .1, .1, .1, .1])
# 0.99999999999999989 gubimy precyzję
math.fsum([.1, .1, .1, .1, .1, .1, .1, .1, .1, .1])
# 1.0 jest dokładniej
# Nowe funkcje z Pythona 2.7.
# math.erf(x) - the error function.
# math.erfc(x) - the complementary error function.
# math.expm1(x) - dokładniejsze niż math.exp(x)-1.
# math.gamma(x) - the Gamma function.
# math.lgamma(x) - the natural log of the Gamma function.
import random # Bookkeeping functions. # random.seed(a=None) - initialize the random number generator random.seed() # the current system time is used random.getstate() random.setstate(state)
# Funkcje dla liczb całkowitych. # random.randrange(stop) # random.randrange(start, stop[, step]) # Wybór przypadkowego elementu z range(start, stop[, step]). # Liczba przypadkowa całkowita z przedziału [start, stop]. # Oba końce są włączone, co jest nietypowe dla Pythona. # random.randint(start, stop) random.randint(1, 6) # symulacja rzutu kostką
# Funkcje dla sekwencji.
# Wybór przypadkowego elementu z niepustej sekwencji.
# random.choice(sequence)
# To samo co
# sequence[int(random.random() * len(sequence))]
random.choice(["jeden", "dwa", "trzy"])
# random.choices(population, weights=None, *, cum_weights=None, k=1) (Py3.6)
# Return a k sized list of elements chosen from the population with replacement.
random.choices(range(10), k=5) # [2, 7, 5, 8, 5]
# Próbkowanie z wagami z powtórzeniami (ruletka).
random.choices(['red', 'black', 'green'], [18, 18, 2], k=6)
# ['red', 'green', 'black', 'black', 'red', 'black']
# Chooses k unique random elements from a population sequence.
# Zwraca nową listę, population zostaje bez zmiany.
# population może zawierać powtórzenia, które mogą pojawić się
# w wynikowej liście. Elementy nie muszą być hashable.
# population może być generatorem, będzie to wydajne.
# random.sample(population, k)
random.sample(range(1000), 100)
random.sample(['red', 'blue'], counts=[4, 2], k=5)
random.sample(['red', 'red', 'red', 'red', 'blue', 'blue'], k=5) # jw
# Wymieszanie danej listy IN PLACE w czasie O(n) (Fisher-Yates shuffle).
# L = list(range(100))
# random.shuffle(L)
# To shuffle an immutable sequence and return a new shuffled list,
# use random.sample(L, k=len(L)) instead.
# random.sample(range(10), 10) zwraca nową listę wymieszaną.
# random.sample("abcde", 5) zwraca listę 5 znaków wymieszaną.
# Rozkłady z liczbami rzeczywistymi. # Liczba przypadkowa z przedziału [0.0, 1.0). random.random() # Liczba przypadkowa całkowita z przedziału [start, stop). # random.randrange(start, stop=None, step=1) random.randrange(1, 7) # symulacja rzutu kostką # Rozkład trójkątny. random.triangular(low, high, mode) # Rozkład Gaussa. random.gauss(mu, sigma)
import decimal
x = decimal.Decimal("0.1")
y = decimal.Decimal("0.3")
z = 3*x-y # Decimal('0.0')
print(z) # 0.0
print(3 * 0.1 - 0.3) # 5.5511151231257827e-17
# Ustawienie precyzji przydatne w aplikacjach finansowych.
print(1999 + 1.33) # 2000.3299999999999
decimal.getcontext().prec = 2
pay = decimal.Decimal(str(1999 + 1.33)) # Decimal('2000.33')
print(pay) # 2000.33
from fractions import Fraction
u1 = Fraction(2, 3) # Fraction(2, 3)
print(u1) # 2/3
print(u1.numerator) # 2, licznik
print(u1.denominator) # 3, mianownik
u2 = Fraction(2, 8) # Fraction(1, 4)
# Konwersja z float do Fraction.
u2 = Fraction("0.25") # Fraction(1, 4)
print(u2) # 1/4
u3 = u1 / u2 # Fraction(4, 3)
u4 = Fraction("1.5") # Fraction(3, 2)
u4 = Fraction.from_float(1.5) # Fraction(3, 2)
# Stosowanie metody float.as_integer_ratio() może prowadzić
# do pewnej utraty precyzji.
T = (2.5).as_integer_ratio() # (5, 2), krotka liczb int
u5 = Fraction(*T) # rozpakowanie krotki
# Konwersja z Fraction do float.
f1 = float(u5) # 2.5, zwykły sposób
# Konwersja ze stringu (Py2.7, Py3).
Fraction("314") # Fraction(314, 1)
Fraction("2/3") # Fraction(2, 3)
Fraction("3.1415") # Fraction(6283, 2000)
# Zapis z "e" jest dozwolony dla stringów z float.
Fraction("1.2e-2") # Fraction(3, 250)
from fractions import gcd
# gcd(a, b) - calculate the Greatest Common Divisor of a and b.
# Od Pythona 3.5 gcd() znajduje się w module math.
# gcd() i lcm() znajdują się też w pakiecie numpy().
# Można robić konwersje z Decimal.
from decimal import Decimal
Fraction(Decimal('1.1')) # Fraction(11, 10)
# Ułamek z ułamka.
Fraction(Fraction(1, 7), 5) # Fraction(1, 35)
Fraction(Fraction(1, 7), Fraction(2, 3)) # Fraction(3, 14)
import cmath # Dostęp do funkcji matematycznych działających na liczbach zespolonych. # help(cmath)
import scipy # SciPy - A scientific computing package for Python # help(scipy)
import numpy #import numpy as np # typowy import w aplikacjach # 1. An array object of arbitrary homogeneous items. # 2. Fast mathematical operations over arrays. # 3. Linear Algebra, Fourier Transforms, Random Number Generation. # help(numpy) # PEP 465 - A dedicated infix operator for matrix multiplication. # Nowy operator mnożenia macierzowego @ od Pythona 3.8. # arr * arr # elementwise multiplication # arr @ arr # matrix multiplication
Moduł random nie jest przeznaczony do zastosowań związanych z bezpieczeństwem lub kryptografią. Do takich zastosowań w Pythonie 3.6 pojawił się moduł secrets (PEP 506). PyPI zawiera ponadto moduł cryptography, który wspiera Pythona 2.6+, 3.4+ (instalacja przez pip).
# Python 3.6+ import secrets foo = ['a', 'b', 'c', 'd', 'e'] print(secrets.choice(foo)) # To print a random index: print(secrets.randbelow(len(foo)))