Curso de Python avanzado

Operaciones matemáticas con los módulos math, operators y cmath de Python

Capítulo 8: Matemáticas con los módulos math, operators y cmath

En este capitulo vamos a hacer unos cuantos cálculos con los módulos math, cmath y operators.

Observa estas sencillas operaciones:

def operaciones1():
	a, b, c, d, e, f, g = 5, 10, 15, 20, 25, 30, 35
	a = a + 10
	b = b - 10
	c = c * 10
	d = d / 10
	e = e // 10
	f = f % 10
	g = g ** 10
	print(a,b,c,d,e,f,g)

operaciones1()

A las variables anteriores, las podemos declarar de otra forma más corta:

def operaciones2():
	a, b, c, d, e, f, g = 5, 10, 15, 20, 25, 30, 35
	a += 10
	b -= 10
	c *= 10
	d /= 10
	e //= 10
	f %= 10
	g **= 10
	print(a,b,c,d,e,f,g)

operaciones2()

En ambos casos, la llamada a las funciones devuelve lo mismo:

15 0 150 2.0 2 0 2758547353515625
15 0 150 2.0 2 0 2758547353515625<

Operaciones matemáticas de adicción (suma)

Veamos algunas formas de adición.
Dadas estas dos variables numéricas, las podemos sumar así sin problemas:

a, b = 10, 15
c = a + b

print(c)
25

No obstante, podemos hacer este pequeño cálculo de forma más optima:

a, b = 10, 15
a += b

print(a)

Sencillamente, lo que hace esto es que la variable "a" añade el valor de "b" a su propio valor, de esa forma, no necesitamos una tercera variable para almacenar el valor si no la necesitamos.

25

El módulo operator de Python

Ya que estamos con las sumas, te muestro como puedes sumar de otra forma con el módulo operator.

import operator

a, b = 10, 15

print(operator.add(a, b))
25

Hay más formas de hacer esto, por ejemplo, así:

import operator

a, b = 10, 15

a = operator.iadd(a,b)

print(a)

Utilizando operator.add es el equivalente a realizar la operación como a = a + b y con operator.iadd equivalente a a += b.

25

Para la sustracción o resta lo podemos hacer de las mismas formas que la suma, evidentemente cambiando el operador "+" por el operador "-". Para add e iadd, lo sustituimos por sub e isub.

import operator

a, b = 10, 15

print(operator.sub(a, b))
-5
import operator

a, b = 10, 15

print(operator.isub(a, b))
-5

En la multiplicación utilizaremos para lo mismo mul e imul.

import operator

a, b = 10, 15

print(operator.mul(a, b))
150
import operator

a, b = 10, 15

print(operator.imul(a, b))
150

Con la división podemos hacer lo mismo con truediv e itruediv

import operator

a, b = 10, 15

print(operator.truediv(a, b))
0.6666666666666666
import operator

a, b = 10, 15

print(operator.itruediv(a, b))
0.6666666666666666

Forzar el tipo de dato en operaciones matemáticas con Python

Si dividimos dos números integer pueden ocasionar como en este caso, un float.
Si quieres evitar que el resultado te devuelva un float y en lugar de ello, nos devuelva un integer, puedes utilizar la doble barra:

a, b = 100, 30

c = a/b

print(type(c),c)

c= a//b

print(type(c),c)
class 'float' 3.3333333333333335
class 'int' 3

Cálculo de divisiones y restos EN Python

Seguramente ya sabes que para obtener el resto de una división debes utilizar el operador módulo. Sin embargo, te voy a enseñar a obtenerlo con el módulo operator.

import operator
print(operator.mod(10, 3))
1

Podemos hacer uso de divmod, que es muy útil a la hora de sacar el cociente y el resto de una sola vez con muy poco código.

a = cociente, resto = divmod(10, 3)
print(a)
(3, 1)

Cálculos con exponentes

Se puede calcular exponentes con el símbolo de doble multiplicación:

a, b = 2, 10

print(a ** b)
(3, 1)

El propio lenguaje de Python trae la función pow() sin importar ningún módulo y conseguimos el mismo resultado.

a, b = 2, 10
c = pow(a, b)

print(c)
1024

pow() devuelve un tipo int. Puedes hacer esto mismo con el módulo math utilizando su función pow() y devolver un float en lugar de un int.

import math

a, b = 2, 10
c = math.pow(a, b)

print(type(c), c)
class 'float' 1024.0
import operator

a, b = 2, 10
c = operator.pow(a, b)

print(type(c), c)
class 'int' 1024

No obstante, con la transformación de datos puedes convertir la salida en el tipo de dato que necesites, sea cual sea la versión que utilices de la función pow().

Tanto math.pow() y operator.pow, solo admiten dos argumentos, valor numérico 1 y valor numérico 2, en este caso a y b. Si intentas poner un tercero te va a dar error.

Sin embargo, la función pow() propia de Python tiene la posibilidad de utilizar un tercer argumento opcional.

a, b, d = 2, 10, 20
c = pow(a, b, d)

print(type(c), c)

¿Qué hace este argumento opcional?
Lo que hace, es utilizar el operador módulo, que por si no lo recuerdas, se encarga de ofrecer el resto de una división entre dos números. En este caso 1024 dividido entre 20 nos da cómo resultado de la división 51,20 y de resto 4, qué es lo que está devolviendo en la consola.

class 'int' 4

Por si no te queda del todo claro, lo que está ocurriendo aquí de fondo es esto:

a, b, d = 2, 10, 20
c = (a ** b % d)

print(type(c), c)

Se pueden calcular potencias con el método exp() mediante la constante E que equivale aproximadamente a 2.71828.
Si le introducimos por ejemplo un 1, el resultado es el que se usa para calcular la potencia de E, es decir, E elevado a otro número. En este caso en la variable a, 1.

import math

a = 1
b = math.exp(a)
print(b)

a = 5
b = math.exp(a)
print(b)
2.718281828459045
148.4131591025766

¿Por qué estos números?
Cuando a vale 1, vale 2.718281828459045, entonces, cuando vale 5 es lo mismo que multiplicar 2.718281828459045 * 2.718281828459045 * 2.718281828459045 * 2.718281828459045 * 2.718281828459045 = 148.4131591025766

Por si aún no te queda claro, hagamos esto mismo sin utilizar el método exp() para que veas lo que hace.

E = 2.71828
a = 5
b = E ** a
print(b)

Raíces cuadradas con Python

Es posible obtener la raíz cuadrada de un número con sqrt.

import math

a = math.sqrt(10)

print(type(a))

Esto devuelve siempre un tipo de dato float, a no ser claro, que lo transformes en int para truncar los decimales. Si queremos trabajar con datos complex, podemos importar el modulo cmath y utilizar su propio sqrt.

import cmath

a = cmath.sqrt(10)

print(type(a))

class complex

Se pueden hacer otros muchos cálculos más, hay muchas cosas con el módulo math, por desgracia, no se puede hacer todo en un capítulo que ya se ha alargado mucho. No obstante seguiré haciendo más capítulos con cosas del módulo math más adelante.

Comentarios

Si te quedan dudas sobre el temario, sobre Python, o cualquier otra cosa relacionada o simplemente quieres agradecer, aquí tienes tu sitio para dejar tu granito de arena. Gracias por tus comentarios y por darle vida a este sitio web.

Programación Fácil YouTube

Suscríbete

Si te ha gustado este curso y crees que el trabajo merece la pena, te agradeceré eternamente que te suscribas a mi canal de YouTube para apoyarme y que pueda seguir haciendo cursos gratuitos.

Además, si te encanta la programación, tienes un montón más de cursos gratuitos para ver.

No solo eso, podrás participar enviándome comentarios con tus sugerencias para temas específicos o cursos completos o incluso las dudas que tengas y las intentaré ir resolviendo en los cursos que estén todavía abiertos.