3.1 Tipos numéricos: int
, float
, complex
Python tiene varios tipos numéricos, cada uno adecuado para diferentes tareas y manejo de datos. Ya hemos mencionado los tipos de datos int
, float
, complex
, así como los tipos booleanos bool
, que son una subclase de los números enteros. Ahora vamos a analizar cada uno de estos tipos con más detalle.
int
(Números enteros):
Este es probablemente el tipo numérico más utilizado en Python. Los números enteros pueden ser positivos o negativos y no tienen decimales. Python soporta precisión arbitraria, lo que significa que prácticamente no hay límites en el tamaño de los números que puedes manejar, aparte de las limitaciones de memoria de tu máquina.
float
(Números de punto flotante):
Estos números se utilizan para representar números reales y pueden contener puntos decimales. Python implementa números de punto flotante de acuerdo con el estándar IEEE 754 de doble precisión, lo que da una precisión de aproximadamente 15 cifras decimales después de la coma.
complex
(Números complejos):
Los números complejos tienen una parte real y una parte imaginaria. Ambas son representadas por números de punto flotante. En Python, para denotar la parte imaginaria se utiliza el sufijo j
o J
. Por ejemplo, un número complejo se puede crear así:
complex_number = 3 + 5j
bool
(Valores booleanos):
En Python, True
y False
son versiones especializadas de números enteros y funcionan como 1 y 0 respectivamente. Esto permite utilizarlos en operaciones aritméticas y otras expresiones matemáticas.
Operaciones aritméticas:
Python soporta todas las operaciones aritméticas básicas, incluyendo suma, resta, multiplicación, división, división entera, residuo de la división y exponenciación. Por ejemplo:
- Suma: 3 + 2
- Resta: 5 - 2
- Multiplicación: 2 * 3
- División: 7 / 2
- División entera: 7 // 2
- Residuo de la división: 7 % 2
- Exponenciación: 2 ** 3
Conversión de tipos:
Ya hemos hablado sobre la conversión (o casting) de tipos. Se pueden convertir unos números en otros usando funciones de conversión de tipos, como int()
, float()
y complex()
.
Algunas cuestiones de conversión de tipos numéricos ya las hemos discutido antes, otras las veremos más detalladamente en las próximas lecciones.
3.2 Números pseudoaleatorios
A veces, un programador se enfrenta a tareas aparentemente simples: «seleccionar una película aleatoria para ver por la noche de una lista determinada», «elegir un ganador de la lotería», «mezclar una lista de canciones al agitar el smartphone», «elegir un número aleatorio para encriptar un mensaje». Y cada vez surge la pregunta muy razonable: ¿cómo obtener ese número aleatorio?
Obtener un número "verdaderamente" aleatorio es bastante difícil. Incluso, hasta el punto de que en las computadoras se integran coprocesadores matemáticos especializados, que son capaces de generar tales números, satisfaciendo todos los requisitos de "verdadera aleatoriedad".
Por eso los programadores inventaron su propia solución – números pseudoaleatorios. Los números pseudoaleatorios son una secuencia que a primera vista parece aleatoria, pero un experto con un análisis detallado podrá encontrar ciertos patrones en ella. Para encriptar documentos secretos estos números no servirán, pero para simular el lanzamiento de un dado en un juego – sí.
Hay muchos algoritmos para generar secuencias de números pseudoaleatorios y casi todos ellos generan el siguiente número aleatorio basado en el anterior y algunos números auxiliares.
Por ejemplo, este programa imprimirá en pantalla 1000 números únicos:
a = 41
c = 11119
m = 11113
seed = 1
def get_next_random():
global seed
seed = (a * seed + c) % m
return seed
for t in range(1000):
x = get_next_random()
print(x)
Por cierto, no estamos hablando de números pseudoaleatorios, sino precisamente de una secuencia de tales números. Ya que mirando un solo número es imposible entender si es aleatorio o no.
Un número aleatorio se puede obtener de diferentes maneras:
def get_random_number():
return 4 # este es seguro un número aleatorio (z lo lanzó usando dados), ver "Broma sobre dados"
3.3 Biblioteca random
En Python existe una biblioteca random incorporada, con la que será interesante trabajar. Como ya habrás adivinado por su nombre, con esta biblioteca se pueden generar números [pseudo]aleatorios.
La biblioteca random
, aunque es incorporada, es una biblioteca separada, por lo que antes de usarla, debemos importarla en nuestro código. Esto se hace con la palabra clave import
. Ejemplo:
import random
En la biblioteca random hay muchos métodos interesantes, pero hoy solo nos familiarizaremos con dos de ellos: método random()
y método randint()
. Realizan tareas similares, pero diferentes:
Método random.random()
:
Este método devuelve un número flotante aleatorio entre 0.0 y 1.0. Los números se generan uniformemente en este rango. Esto significa que cada número dentro del intervalo tiene la misma probabilidad de ser elegido.
import random
probability = random.random()
print("Probabilidad aleatoria:", probability)
Método random.randint(a, b):
Esta función devuelve un número entero aleatorio en el rango de a
a b
inclusive. A diferencia de random.random()
, que devuelve un número flotante aleatorio en el rango de 0 a 1, randint()
se usa cuando se necesita elegir un número entero. Por ejemplo, random.randint(1, 10)
puede devolver cualquier número entero de 1
a 10
, incluyendo ambos valores extremos.
import random
dice_roll = random.randint(1, 6) # Simulación de lanzamiento de dado
print("Número obtenido:", dice_roll)
Estos son métodos muy útiles e interesantes, así que úsalos a tu salud.
3.4 Biblioteca math
Bueno, ya que estamos en eso, déjame presentarte otra biblioteca interesante. Esta es la biblioteca math
. Contiene las funciones matemáticas y constantes básicas, tales como los números π y e.
Y al igual que la biblioteca random
, necesita ser importada antes de usarla:
import math
Aquí está una tabla con las funciones y constantes principales de la biblioteca math
en Python:
Función/Constante | Descripción |
---|---|
math.pi | Constante π, aproximadamente 3.14159 |
math.e | Base del logaritmo natural, aproximadamente 2.71828 |
math.sqrt(x) | Devuelve la raíz cuadrada de x |
math.exp(x) | Devuelve e elevado a la potencia x |
math.log(x[, base]) | Devuelve el logaritmo de x en base base, si se especifica; de lo contrario, devuelve el logaritmo natural. |
math.cos(x) | Devuelve el coseno de x, donde x se especifica en radianes |
math.sin(x) | Devuelve el seno de x, donde x se especifica en radianes |
math.tan(x) | Devuelve la tangente de x, donde x se especifica en radianes |
math.ceil(x) | Redondea el número hacia arriba al entero más cercano |
math.floor(x) | Redondea el número hacia abajo al entero más cercano |
math.factorial(x) | Devuelve el factorial de x |
Incluso si no te gusta mucho la matemática y no planeas usar estas funciones en los próximos 10 años, aquí hay al menos tres muy útiles:
sqrt()
— raíz cuadrada de un númeroceil()
— redondeo hacia arriba al entero más cercanofloor()
— redondeo hacia abajo al entero más cercano
Ejemplos:
import math
number = 9.7
rounded_up = math.ceil(number) # Redondea hacia arriba, resultado 10
rounded_down = math.floor(number) # Redondea hacia abajo, resultado 9
print("Número redondeado hacia arriba:", rounded_up)
print("Número redondeado hacia abajo:", rounded_down)
GO TO FULL VERSION