Módulos especializados de Python: matemático, aleatorio y de sistema en Python
Los módulos math, random y platform son herramientas poderosas de la biblioteca estándar de Python que facilitan operaciones matemáticas, generación de números aleatorios y la obtención de información sobre el sistema en ejecución, respectivamente.

Inspector de Nombres y Atributos
En Python, la función dir()
se utiliza para obtener una lista de los atributos y métodos disponibles para un objeto. Esta función es útil para explorar las capacidades de un objeto, módulo, clase o incluso el ámbito actual.
Principales Usos
Sin Argumentos
Si se llama a dir()
sin argumentos devolverá una lista de nombres definidos en el ámbito local actual, incluyendo variables, funciones, y otros objetos.
# Ejemplo sin argumentos
x = 10
def func():
pass
print(dir())
# Salida: ['__annotations__', '__builtins__', '__doc__', '__loader__',
# '__name__', '__package__', '__spec__', 'func', 'x']
Al examinar la salida de dir()
, se observa que la variable x
y la función func
son parte del código definido anteriormente, mientras que el resto de los elementos pertenecen al entorno local.
Con un Argumento (Objeto)
Cuando se pasa un objeto como argumento, devuelve una lista de los atributos y métodos del objeto.
# Ejemplo con un argumento
texto = "Hola, mundo"
print(dir(texto))
# Salida: ['capitalize', 'casefold', 'center', ..., 'zfill']
Objetos Personalizados
Si se utiliza con un objeto definido por el usuario,dir()
muestra los atributos y métodos de ese objeto.
class MiClase:
def metodo(self):
pass
atributo = 42
obj = MiClase()
print(dir(obj))
# Salida incluye: ['atributo', 'metodo', '__class__', '__delattr__', ...]
Nombres Mágicos
En la salida de dir()
, es común ver nombres que comienzan y terminan con doble guion bajo (__
). Estos son nombres reservados o especiales utilizados por Python para funcionalidades internas.
print(dir(int))
# Salida incluye: '__add__', '__class__', '__doc__', '__eq__', ...
Aplicaciones
Cuando se pasa un objeto como argumento, devuelve una lista de los atributos y métodos del objeto.
Explorar un módulo o Librería
Es útil para inspeccionar qué métodos y atributos están disponibles en un módulo.
import math
print(dir(math))
# Salida: ['__doc__', '__loader__', '__name__', ..., 'sin', 'sqrt', 'tan']
se puede ejecutar el siguiente código para imprimir los nombres de todas las entidades dentro del módulo math:
import math
for name in dir(math):
print(name, end="∖t")
"""
Salida: __doc__ __loader__ __name__ __package__ __spec__ acos acosh asin asinh atan atan2
atan2 atanh ceil copysign cos cosh degrees e erf erfc exp expm1 fabs factorial floor
fmod frexp fsum gamma hypot isfinite isinf isnan ldexp lgamma log log10 log1p
log2 modf pi pow radians sin sinh sqrt tan tanh trunc
"""
Debugging
Permite examinar qué nombres están definidos en el espacio de nombres actual durante la depuración.
Nota: Si el nombre del módulo tiene un alias, debes usar el alias, no el nombre original.
Módulo math
El módulo math
en Python proporciona acceso a las funciones matemáticas definidas por el estándar C. Este módulo incluye una amplia variedad de funciones matemáticas, constantes y métodos que son útiles para realizar cálculos matemáticos.
El módulo math
siempre debe importarse antes de su uso, ver el ejemplo más adelante.
Constantes en math
-
math.pi
: Representa el valor de π (pi), aproximadamente 3.14159. -
math.e
: Representa el valor de e (base de los logaritmos naturales), aproximadamente 2.71828. -
math.tau
: Representa el valor de τ (tau), equivalente a 2π. -
math.inf
: Representa infinito positivo. -
math.nan
: Representa un valor "Not a Number" (NaN).
Funciones Básicas
-
math.sqrt(x)
: Retorna la raíz cuadrada de x. -
math.ceil(x)
: Redondea x hacia arriba al entero más cercano. -
math.floor(x)
: Redondea x hacia abajo al entero más cercano. -
math.trunc(x)
: Trunca la parte decimal de x. -
math.fabs(x)
: Devuelve el valor absoluto de x. -
math.factorial(x)
: Retorna el factorial de x (solo para enteros no negativos). -
math.gcd(a, b)
: Calcula el máximo común divisor de a y b.
Funciones trigonométricas
-
math.sin(x)
: Retorna el seno de x (en radianes). -
math.cos(x)
: Retorna el coseno de x (en radianes). -
math.tan(x)
: Retorna la tangente de x (en radianes). -
math.asin(x), math.acos(x), math.atan(x)
: Retornan los valores inversos de seno, coseno y tangente, respectivamente. -
math.degrees(x)
: Convierte x de radianes a grados. -
math.radians(x)
: Convierte x de grados a radianes.
Todas estas funciones toman un argumento (una medida de ángulo expresada en radianes) y devuelven el resultado apropiado (tener cuidado con tan()
- no todos los argumentos son válidos).
Logaritmos y Exponenciales
math.exp(x)
: Calcula e^x.-
math.log(x[, base])
: Calcula el logaritmo de x en la base especificada. Si no se especifica la base, se usa e. -
math.log10(x)
: Calcula el logaritmo base 10 de x. -
math.log2(x)
: Calcula el logaritmo base 2 de x. -
math.pow(x, y)
: Calcula x^y (equivalente a x ** y). Esta es una función incorporada y no se tiene que importar. -
hypot(x, y)
: devuelve la longitud de la hipotenusa de un triángulo rectángulo con las longitudes de los catetos iguales a x y y (lo mismo quesqrt(pow(x, 2) + pow(y, 2))
pero más preciso).
Funciones Hiperbólicas
-
math.sinh(x)
: Calcula el seno hiperbólico de x. -
math.cosh(x)
: Calcula el coseno hiperbólico de x. -
math.tanh(x)
: Calcula la tangente hiperbólica de x. -
math.asinh(x), math.acosh(x), math.atanh(x)
: Calculan los inversos de las funciones hiperbólicas.
Operaciones con Números Especiales
-
math.isfinite(x)
: Retorna True si x es un número finito. -
math.isinf(x)
: Retorna True si x es infinito. -
math.isnan(x)
: Retorna True si x no es un número (NaN). -
math.copysign(x, y)
: Devuelve un número con el valor absoluto de x y el signo de y.
Ejemplo de Uso Práctico
import math
# Cálculos básicos
print("Raíz cuadrada de 16:", math.sqrt(16))
print("Seno de π/2:", math.sin(math.pi / 2))
print("Logaritmo natural de e:", math.log(math.e))
# Uso de constantes
print("Valor de pi:", math.pi)
print("Valor de tau:", math.tau)
# Redondeo
print("Redondear hacia arriba 3.4:", math.ceil(3.4))
print("Redondear hacia abajo 3.9:", math.floor(3.9))
Módulo random
¿Es posible producir aleatoriedad genuina mediante algoritmos computacionales
El módulo random
en Python proporciona funciones para generar números pseudo-aleatorios, realizar elecciones pseudo-aleatorias y mezclar secuencias de manera pseudo-aleatoria.
Es importante tener en cuenta el prefijo pseudo cuando se habla de generadores de números aleatorios. Aunque los números producidos por estos módulos parecen impredecibles a primera vista, en realidad se generan mediante algoritmos matemáticos deterministas y sofisticados que, en última instancia, siguen una secuencia calculada.
Un generador de números pseudo-aleatorios utiliza un valor inicial denominado semilla como punto de partida. Mediante un algoritmo matemático predefinido, transforma este valor de entrada en un número aparentemente aleatorio, al tiempo que genera una nueva semilla para futuras iteraciones. Este proceso garantiza una secuencia determinista pero impredecible a simple vista.
En un sistema de generación de valores con semillas únicas, el ciclo, aunque potencialmente extenso, no es infinito. Inevitablemente, los valores iniciales comenzarán a repetirse, lo que provocará que la secuencia de valores generados también se repita. Esta recurrencia no debe considerarse una anomalía, sino una propiedad intrínseca del sistema.
El valor de la semilla inicial desempeña un papel crucial en la generación de números pseudoaleatorios, ya que determina la secuencia específica de valores que se producirán durante la ejecución del programa. Para aumentar la aleatoriedad del proceso, es posible establecer la semilla utilizando un valor derivado de la hora actual del sistema. Esta estrategia garantiza que cada ejecución del programa comience desde un punto de partida distinto, lo que se traduce en una secuencia diferente de números aleatorios.
En Python, la importación del módulo de generación de números aleatorios realiza automáticamente esta inicialización, simplificando el proceso para el desarrollador.
Funciones Principales
Generación de Números Aleatorios
-
random()
: Devuelve un número flotante entre 0.0 y 1.0.print(random.random()) # Ejemplo: 0.453627327015
-
uniform(a, b)
: Genera un número flotante entre los valores especificados a y b.print(random.uniform(1, 10)) # Ejemplo: 7.934
-
randint(a, b)
: Genera un número entero aleatorio entre a y b (ambos inclusive).print(random.randint(1, 10)) # Ejemplo: 4
-
randrange(start, stop[, step])
: Devuelve un número entero de un rango especificado.print(random.randrange(1, 10, 2)) # Ejemplo: 3
Selección Aleatoria
-
choice(seq)
: Selecciona un elemento aleatorio de una secuencia (lista, tupla, cadena, etc.).opciones = ['rojo', 'verde', 'azul'] print(random.choice(opciones)) # Ejemplo: 'verde'
-
choices(population, weights=None, k=1)
: Selecciona k elementos con reemplazo, opcionalmente ponderados.colores = ['rojo', 'verde', 'azul'] print(random.choices(colores, weights=[1, 3, 1], k=2)) # Ejemplo: ['verde', 'rojo']
-
sample(population, k)
: Selecciona k elementos sin reemplazo.numeros = [1, 2, 3, 4, 5] print(random.sample(numeros, 3)) # Ejemplo: [4, 1, 3]
Mezcla Aleatoria
-
shuffle(x)
: Mezcla los elementos de una lista en su lugar.cartas = [1, 2, 3, 4, 5] random.shuffle(cartas) print(cartas) # Ejemplo: [3, 1, 5, 4, 2]
Semilla para Reproducibilidad
-
seed(a=None)
: Establece la semilla del generador aleatorio para obtener los mismos resultados en cada ejecución.random.seed(42) print(random.random()) # Siempre dará el mismo resultado
Estado
-
getstate()
: Es una función que se utiliza en el módulorandom
de Python para obtener el estado actual del generador de números aleatorios, lo que permite restaurar ese estado más tarde. -
setstate(state)
: Restablece el estado interno del generador de números aleatorios a partir del objeto de estado proporcionado.import random # Obtener el estado inicial state = random.getstate() # Generar algunos números aleatorios for _ in range(5): print(random.random()) # Restaurar el estado inicial random.setstate(state) # Generar los mismos números aleatorios otra vez for _ in range(5): print(random.random())
Ejemplo Práctico
Crear un programa que genere una lista de números aleatorios:
import random
numeros_aleatorios = [random.randint(1, 100) for _ in range(10)]
print(numeros_aleatorios) # Ejemplo: [23, 78, 34, 90, 12, 45, 66, 88, 9, 21]
Módulo platform
En Python, la función platform
pertenece al módulo estándar llamado platform
. Este módulo permite obtener información sobre la plataforma en la que se está ejecutando un programa, como el sistema operativo, la versión de Python, el procesador y otros datos relacionados con el entorno de ejecución.
Cómo usar la Función Platform
El módulo platform
contiene varias funciones para acceder a información específica. A continuación, se detallan las más comunes:
-
platform.platform()
: Genera una descripción de la plataforma en la que se está ejecutando el programa.import platform platform.platform(aliased=False, terse=False)
- aliased:
True
= Entrega nombres de plataforma estándar o común. - terse:
True
= Entrega información básica y omite detalles adicionales.
- aliased:
-
platform.system()
: Devuelve el nombre del sistema operativo.import platform sistema_operativo = platform.system() print(f"Sistema operativo: {sistema_operativo}")
-
platform.release()
: Obtiene la versión del sistema operativo.import platform sistema_operativo = platform.system() print(f"Sistema operativo: {sistema_operativo}")
-
platform.version()
: Proporciona más detalles sobre la versión del sistema operativo.import platform detalle_version = platform.version() print(f"Detalles de la versión del sistema operativo: {detalle_version}")
-
platform.machine()
: Devuelve el tipo de máquina.import platform tipo_maquina = platform.machine() print(f"Tipo de máquina: {tipo_maquina}")
-
platform.processor()
: Indica el tipo de procesador, si está disponible.import platform procesador = platform.processor() print(f"Procesador: {procesador}")
-
platform.python_version()
: Devuelve la versión de Python que se está utilizando.import platform version_python = platform.python_version() print(f"Versión de Python: {version_python}")
-
platform.architecture()
: Indica si el sistema es de 32 o 64 bits.import platform print(platform.architecture())
-
platform.node()
: Devuelve el nombre del host de la máquina.import platform print(platform.node())
-
platform.uname()
: Devuelve un objeto con toda la información del sistema: sistema operativo, nodo, versión, máquina, etc.import platform info = platform.uname() print(info)
Ejemplo Práctico
El siguiente ejemplo muestra cómo usar varias funciones del módulo platform
:
import platform
print(f"Sistema operativo: {platform.system()}")
print(f"Versión del sistema operativo: {platform.release()}")
print(f"Detalles de la versión del sistema operativo: {platform.version()}")
print(f"Tipo de máquina: {platform.machine()}")
print(f"Procesador: {platform.processor()}")
print(f"Descripción completa de la plataforma: {platform.platform()}")
print(f"Versión de Python: {platform.python_version()}")
print("Arquitectura:", platform.architecture())
print("Nombre del host:", platform.node())
"""
Salida Posible:
Sistema operativo: Windows
Versión del sistema operativo: 11
Detalles de la versión del sistema operativo: 10.0.22621
Tipo de máquina: AMD64
Procesador: Intel64 Family 6 Model 158 Stepping 10, GenuineIntel
Descripción completa de la plataforma: Windows-11-10.0.22621-SP0
Versión de Python: 3.9.7
Arquitectura: ('64bit', 'WindowsPE')
Nombre del host: DESKTOP-NOMBREEJEMPLO
"""
Usos Comunes
- Automatización de scripts: Permite adaptar un script para ejecutarse correctamente en diferentes sistemas operativos (Windows, Linux, macOS).
- Verificar compatibilidad del sistema: Se puede comprobar si el sistema cumple con los requisitos mínimos antes de ejecutar una aplicación.
- Depuración y registro de errores: Durante el desarrollo, es útil incluir información del sistema en los registros para identificar errores relacionados con configuraciones específicas.
- Despliegue de aplicaciones: Cuando se distribuyen aplicaciones en diferentes entornos, platform ayuda a identificar detalles importantes como: Nombre del host y el Tipo de procesador.
- Proporcionar información al usuario final: Se puede mostrar información del sistema como parte de la interfaz de la aplicación o para diagnosticar problemas.
- Uso en pruebas automatizadas: En entornos de pruebas, platform permite condicionar la ejecución de tests según la plataforma para evitar fallos no relacionados con el código.
- Recolección de métricas o estadísticas: Es útil para software que recopila datos sobre el entorno donde se ejecuta, como análisis de sistemas o herramientas de monitoreo.
- Integración con sistemas de terceros: Muchas APIs o servicios requieren conocer el entorno donde se ejecuta el cliente, como cuando se envían datos de diagnóstico o para personalizar la experiencia del usuario.