Szukaj…


Wprowadzenie

Python samodzielnie wykonuje wspólne operatory matematyczne, w tym dzielenie liczb całkowitych i liczb zmiennoprzecinkowych, mnożenie, potęgowanie, dodawanie i odejmowanie. Moduł matematyczny (zawarty we wszystkich standardowych wersjach Pythona) oferuje rozszerzoną funkcjonalność, taką jak funkcje trygonometryczne, operacje rootowania, logarytmy i wiele innych.

Uwagi

Typy numeryczne i ich metaklasy

Moduł numbers zawiera abstrakcyjne metaklasy dla typów numerycznych:

podklasy numery. liczba liczby. zintegrowane liczby.Racjonalne numery. prawda numbers.Complex
bool
int
frakcje. frakcja -
pływak - -
złożony - - -
dziesiętny. dziesiętny - - - -

Dodanie

a, b = 1, 2

# Using the "+" operator:
a + b                  # = 3

# Using the "in-place" "+=" operator to add and assign:
a += b                 # a = 3 (equivalent to a = a + b)

import operator        # contains 2 argument arithmetic functions for the examples

operator.add(a, b)     # = 5  since a is set to 3 right before this line

# The "+=" operator is equivalent to: 
a = operator.iadd(a, b)    # a = 5 since a is set to 3 right before this line

Możliwe kombinacje (typy wbudowane):

  • int i int (daje int )
  • int i float (daje float )
  • int i complex (daje complex )
  • float and float (daje float )
  • float i complex (daje complex )
  • complex i complex (daje complex )

Uwaga: operator + służy również do łączenia ciągów, list i krotek:

"first string " + "second string"    # = 'first string second string'

[1, 2, 3] + [4, 5, 6]                # = [1, 2, 3, 4, 5, 6]

Odejmowanie

a, b = 1, 2

# Using the "-" operator:
b - a                  # = 1


import operator        # contains 2 argument arithmetic functions
operator.sub(b, a)     # = 1

Możliwe kombinacje (typy wbudowane):

  • int i int (daje int )
  • int i float (daje float )
  • int i complex (daje complex )
  • float and float (daje float )
  • float i complex (daje complex )
  • complex i complex (daje complex )

Mnożenie

a, b = 2, 3

a * b                  # = 6

import operator
operator.mul(a, b)     # = 6

Możliwe kombinacje (typy wbudowane):

  • int i int (daje int )
  • int i float (daje float )
  • int i complex (daje complex )
  • float and float (daje float )
  • float i complex (daje complex )
  • complex i complex (daje complex )

Uwaga: Operator * służy również do wielokrotnego łączenia łańcuchów, list i krotek:

3 * 'ab'  # = 'ababab'
3 * ('a', 'b')  # = ('a', 'b', 'a', 'b', 'a', 'b')

Podział

Python dokonuje podziału na liczby całkowite, gdy oba operandy są liczbami całkowitymi. Zachowanie operatorów podziału Pythona zmieniło się z Python 2.xi 3.x (patrz także Podział liczb całkowitych ).

a, b, c, d, e = 3, 2, 2.0, -3, 10
Python 2.x 2.7

W Pythonie 2 wynik działania operatora „/” zależy od typu licznika i mianownika.

a / b                  # = 1 

a / c                  # = 1.5

d / b                  # = -2

b / a                  # = 0

d / e                  # = -1

Zauważ, że ponieważ zarówno a jak i bint , wynikiem jest int .

Wynik jest zawsze zaokrąglany w dół (floored).

Ponieważ c jest zmiennoprzecinkowe, wynikiem a / c jest float .

Możesz także użyć modułu operatora:

import operator        # the operator module provides 2-argument arithmetic functions
operator.div(a, b)     # = 1
operator.__div__(a, b) # = 1
Python 2.x 2.2

Co zrobić, jeśli chcesz dokonać podziału zmiennoprzecinkowego:

Zalecana:

from __future__ import division # applies Python 3 style division to the entire module
a / b                  # = 1.5 
a // b                 # = 1

Ok (jeśli nie chcesz aplikować do całego modułu):

a / (b * 1.0)          # = 1.5
1.0 * a / b            # = 1.5
a / b * 1.0            # = 1.0    (careful with order of operations)

from operator import truediv
truediv(a, b)          # = 1.5

Niezalecane (może wywołać błąd typu, np. Jeśli argument jest złożony):

float(a) / b           # = 1.5
a / float(b)           # = 1.5
Python 2.x 2.2

Operator „//” w Pythonie 2 wymusza dzielenie dzielone niezależnie od typu.

a // b                # = 1
a // c                # = 1.0
Python 3.x 3.0

W Pythonie 3 operator / wykonuje „prawdziwy” podział niezależnie od typów. // operator dokonuje podziału podłogi i zachowuje typ.

a / b                  # = 1.5 
e / b                  # = 5.0
a // b                 # = 1
a // c                 # = 1.0

import operator            # the operator module provides 2-argument arithmetic functions
operator.truediv(a, b)     # = 1.5
operator.floordiv(a, b)    # = 1
operator.floordiv(a, c)    # = 1.0

Możliwe kombinacje (typy wbudowane):

  • int i int (daje liczbę int w Python 2 i liczbę float w Python 3)
  • int i float (daje float )
  • int i complex (daje complex )
  • float and float (daje float )
  • float i complex (daje complex )
  • complex i complex (daje complex )

Aby uzyskać więcej informacji, zobacz PEP 238 .

Potęgowanie

a, b = 2, 3

(a ** b)               # = 8
pow(a, b)              # = 8

import math
math.pow(a, b)         # = 8.0 (always float; does not allow complex results)

import operator
operator.pow(a, b)     # = 8

Inną różnicą między wbudowanym pow i math.pow jest to, że wbudowany pow może zaakceptować trzy argumenty:

a, b, c = 2, 3, 2

pow(2, 3, 2)           # 0, calculates (2 ** 3) % 2, but as per Python docs,
                       #    does so more efficiently

Funkcje specjalne

Funkcja math.sqrt(x) oblicza pierwiastek kwadratowy z x .

import math
import cmath
c = 4
math.sqrt(c)           # = 2.0 (always float; does not allow complex results)
cmath.sqrt(c)          # = (2+0j) (always complex)

Aby obliczyć inne pierwiastki, takie jak pierwiastek kostki, zwiększ liczbę do odwrotności stopnia pierwiastka. Można to zrobić za pomocą dowolnej funkcji wykładniczej lub operatora.

 import math
 x = 8
 math.pow(x, 1/3) # evaluates to 2.0
 x**(1/3) # evaluates to 2.0

Funkcja math.exp(x) oblicza e ** x .

math.exp(0)  # 1.0
math.exp(1)  # 2.718281828459045 (e)

Funkcja math.expm1(x) oblicza e ** x - 1 . Gdy x jest małe, daje to znacznie lepszą precyzję niż math.exp(x) - 1 .

math.expm1(0)       # 0.0

math.exp(1e-6) - 1  # 1.0000004999621837e-06
math.expm1(1e-6)    # 1.0000005000001665e-06
# exact result      # 1.000000500000166666708333341666...

Logarytmy

Domyślnie funkcja math.log oblicza logarytm liczby, podstawa e. Opcjonalnie możesz podać bazę jako drugi argument.

import math
import cmath

math.log(5)         # = 1.6094379124341003
# optional base argument. Default is math.e
math.log(5, math.e) # = 1.6094379124341003
cmath.log(5)        # = (1.6094379124341003+0j)
math.log(1000, 10)   # 3.0 (always returns float)
cmath.log(1000, 10)  # (3+0j)

Istnieją specjalne odmiany funkcji math.log dla różnych baz.

# Logarithm base e - 1 (higher precision for low values)
math.log1p(5)       # = 1.791759469228055

# Logarithm base 2
math.log2(8)        # = 3.0

# Logarithm base 10
math.log10(100)     # = 2.0
cmath.log10(100)    # = (2+0j)

Operacje w miejscu

W aplikacjach często potrzebny jest taki kod:

a = a + 1

lub

a = a * 2

Istnieje skuteczny skrót do tych operacji w miejscu:

a += 1
# and
a *= 2

Do wykonania operacji wstawiania można użyć dowolnego operatora matematycznego przed znakiem „=”:

  • -= zmniejszenie zmiennej w miejscu
  • += zwiększyć zmienną na miejscu
  • *= pomnóż zmienną na miejscu
  • /= podziel zmienną na miejsce
  • //= piętro podziel zmienną na miejsce # Python 3
  • %= zwraca moduł zmiennej na miejscu
  • **= podniesienie do istniejącej mocy

Dla operatorów bitowych istnieją inne operatory na miejscu ( ^ , | itd.)

Funkcje trygonometryczne

a, b = 1, 2

import math

math.sin(a)  # returns the sine of 'a' in radians
# Out: 0.8414709848078965

math.cosh(b)  # returns the inverse hyperbolic cosine of 'b' in radians
# Out: 3.7621956910836314

math.atan(math.pi)  # returns the arc tangent of 'pi' in radians
# Out: 1.2626272556789115

math.hypot(a, b) # returns the Euclidean norm, same as math.sqrt(a*a + b*b)
# Out: 2.23606797749979

Zauważ, że math.hypot(x, y) jest również długością wektora (lub odległości euklidesowej) od początku (0, 0) do punktu (x, y) .

Aby obliczyć odległość euklidesową między dwoma punktami (x1, y1) i (x2, y2) , możesz użyć math.hypot w następujący sposób

math.hypot(x2-x1, y2-y1)

Aby przekonwertować z radianów -> stopni i stopni -> radianów, użyj odpowiednio math.degrees i math.radians

math.degrees(a)
# Out: 57.29577951308232

math.radians(57.29577951308232)
# Out: 1.0

Moduł

Podobnie jak w wielu innych językach, Python używa operatora % do obliczania modułu.

3 % 4     # 3
10 % 2    # 0
6 % 4     # 2

Lub za pomocą modułu operator :

import operator

operator.mod(3 , 4)     # 3
operator.mod(10 , 2)    # 0
operator.mod(6 , 4)     # 2

Możesz także użyć liczb ujemnych.

-9 % 7     # 5
9 % -7     # -5
-9 % -7    # -2

Jeśli chcesz znaleźć wynik dzielenia liczb całkowitych i modułu, możesz użyć funkcji divmod jako skrótu:

quotient, remainder = divmod(9, 4)
# quotient = 2, remainder = 1 as 4 * 2 + 1 == 9


Modified text is an extract of the original Stack Overflow Documentation
Licencjonowany na podstawie CC BY-SA 3.0
Nie związany z Stack Overflow