Números
Los números son fundamentales en programación: desde operaciones aritméticas básicas hasta cálculos científicos y análisis de datos.
0.1 Motivación
Los números son fundamentales en programación: desde operaciones aritméticas básicas hasta cálculos científicos y análisis de datos. Python maneja tres tipos numéricos principales, cada uno con propósitos específicos. Entender sus diferencias te permite elegir el tipo correcto para cada situación y evitar errores de precisión o conversión.
0.2 Intuición
Imagina tres tipos de contenedores para números:
- int (enteros): como una hoja de papel donde escribes números sin decimales: 5, -3, 42.
- float (decimales): como una calculadora científica que maneja decimales y notación exponencial: 3.14, -0.5, 1.5e10.
- complex (complejos): como un plano cartesiano con dos ejes (real e imaginario): 3+5j.
Cada uno tiene sus propias reglas y usos, y Python te permite convertir entre ellos cuando es necesario.
0.3 Modelo mental
- int: precisión exacta, sin límite de tamaño (puede ser tan grande como la memoria lo permita).
- float: precisión limitada (aproximación decimal, típicamente 15-17 dígitos significativos).
- complex: dos floats (parte real e imaginaria) combinados.
- Conversión: posible entre int y float (puede perder precisión), pero no directamente desde complex.
0.4 Desarrollo
0.4.1 1. Tipos Numéricos en Python
| Tipo | Ejemplo | Descripción | Cuándo usar |
|---|---|---|---|
| int | 5, -3, 1000000 |
Números enteros sin decimales | Conteos, índices, cantidades exactas |
| float | 3.14, -0.5, 1.5e10 |
Números con decimales (precisión limitada) | Mediciones, cálculos científicos, dinero (cuidado con precisión) |
| complex | 3+5j, 1j, -5j |
Números complejos (real + imaginario) | Matemáticas avanzadas, ingeniería, física |
0.4.2 2. Enteros (int)
Los enteros son números sin decimales, sin límite de tamaño:
# Enteros positivos y negativos
x = 42
y = -7
z = 12345678901234567890 # Puede ser enorme
print(type(x)) # <class 'int'>
print(type(z)) # <class 'int'>0.4.3 3. Floats (decimales)
Los floats representan números con decimales:
# Floats básicos
x = 3.14
y = -0.5
z = 1.0
print(type(x)) # <class 'float'>
# Notación científica
a = 35e3 # 35 * 10^3 = 35000.0
b = 12E4 # 12 * 10^4 = 120000.0
c = -87.7e100 # Número muy pequeño (científico)
print(a) # 35000.00.4.4 4. Números Complejos (complex)
Los números complejos tienen parte real e imaginaria:
# Números complejos
x = 3 + 5j
y = 5j # Solo parte imaginaria
z = -5j # Imaginario negativo
print(type(x)) # <class 'complex'>
print(x) # (3+5j)
print(x.real) # 3.0 (parte real)
print(x.imag) # 5.0 (parte imaginaria)0.4.5 5. Conversión entre Tipos (Casting)
Puedes convertir entre tipos numéricos:
# Conversiones básicas
x = 5 # int
y = 3.14 # float
z = 1j # complex
# int → float
a = float(x) # 5.0
print(type(a)) # <class 'float'>
# float → int (trunca decimales)
b = int(y) # 3 (pierde .14)
print(type(b)) # <class 'int'>
# int → complex
c = complex(x) # (5+0j)
print(type(c)) # <class 'complex'>
# ❌ No se puede convertir complex → int/float
# d = int(z) # TypeError: can't convert complex to int0.4.6 6. Operaciones Numéricas Comunes
a = 10
b = 3
# Operaciones básicas
print(a + b) # 13 (suma)
print(a - b) # 7 (resta)
print(a * b) # 30 (multiplicación)
print(a / b) # 3.333... (float)
print(a // b) # 3 (división entera)
print(a % b) # 1 (resto/modulo)
print(a ** b) # 1000 (potencia)0.4.7 7. Números Aleatorios
Python tiene un módulo random para generar números aleatorios:
import random
# Número aleatorio entre 1 y 9 (inclusive)
numero = random.randrange(1, 10)
print(numero)
# Número aleatorio entre 0.0 y 1.0
print(random.random())
# Número aleatorio entre 1 y 10 (float)
print(random.uniform(1, 10))0.4.8 8. Precisión de Floats
Importante: los floats tienen precisión limitada:
# Problemas de precisión
print(0.1 + 0.2) # 0.30000000000000004 (no es exactamente 0.3)
# Comparar floats
# ❌ No recomendado
if 0.1 + 0.2 == 0.3:
print("Igual") # No se ejecuta
# ✅ Mejor usar tolerancia
tolerancia = 1e-10
if abs((0.1 + 0.2) - 0.3) < tolerancia:
print("Aproximadamente igual")0.5 Ejemplos
Mínimo — Tipos numéricos básicos:
entero = 42
decimal = 3.14
complejo = 2 + 3j
print(type(entero)) # <class 'int'>
print(type(decimal)) # <class 'float'>
print(type(complejo)) # <class 'complex'>Progresivo — Conversiones y operaciones:
precio = 19.99
cantidad = 3
total = precio * cantidad
print(total) # 59.97 (float)
# Convertir a entero (trunca)
total_entero = int(total)
print(total_entero) # 59
# Redondear
total_redondeado = round(total)
print(total_redondeado) # 60Real — Cálculo de IMC (Índice de Masa Corporal):
# Datos del usuario
peso_kg = 72.5 # float
altura_m = 1.75 # float
# Cálculo del IMC
imc = peso_kg / (altura_m ** 2)
print(f"IMC: {imc:.2f}") # 23.67 (con 2 decimales)
# Categorización
if imc < 18.5:
categoria = "Bajo peso"
elif imc < 25:
categoria = "Peso normal"
elif imc < 30:
categoria = "Sobrepeso"
else:
categoria = "Obesidad"
print(f"Categoría: {categoria}")0.6 Errores comunes
| Error | Síntoma | Solución |
|---|---|---|
| Dividir por cero | ZeroDivisionError |
Verifica que el denominador no sea 0 |
| Precisión de floats | Resultados inesperados (0.1 + 0.2) |
Usa Decimal para dinero o compara con tolerancia |
| Conversión de complex | TypeError |
No se puede convertir complex a int/float |
| Concatenar número + string | TypeError |
Convierte: str(numero) o usa f-strings |
| División con ints | 5 / 2 da 2.5 (float), no 2 |
Usa // para división entera |
0.7 Buenas prácticas
Usa
intpara conteos e índices,floatpara mediciones y cálculos.Para dinero, considera
decimal.Decimalen lugar de float:from decimal import Decimal precio = Decimal('19.99')Usa
//para división entera y%para obtener el resto:minutos = 125 horas = minutos // 60 # 2 minutos_restantes = minutos % 60 # 5Redondea explícitamente cuando necesites controlar la precisión:
resultado = 3.14159265 print(round(resultado, 2)) # 3.14Prefiere
isinstance()para verificar tipos:if isinstance(valor, (int, float)): print("Es numérico")Usa
_para separar números grandes (Python 3.6+):poblacion = 1_000_000_000 # Más legible que 1000000000
0.8 Ejercicio
Intermedio — Calculadora de Prestación
Escribe un programa que:
- Pida al usuario (simula con variables):
- Salario mensual (float)
- Años trabajados (int)
- Edad (int)
- Calcule:
- Salario anual (salario * 12)
- Prestación por antigüedad: 5% del salario anual por cada año trabajado
- Edad en 10 años
- Muestre todos los resultados con 2 decimales
- Convierta el resultado de la prestación a entero para mostrar la cantidad “redondeada”
Solución (no mires hasta haberlo intentado):
# Datos
salario_mensual = 2500.50
años_trabajados = 8
edad = 32
# Cálculos
salario_anual = salario_mensual * 12
prestacion_porcentaje = 0.05 * años_trabajados
prestacion = salario_anual * prestacion_porcentaje
edad_futura = edad + 10
# Mostrar resultados
print("=== Cálculo de Prestación ===")
print(f"Salario mensual: ${salario_mensual:.2f}")
print(f"Salario anual: ${salario_anual:.2f}")
print(f"Años trabajados: {años_trabajados}")
print(f"Prestación: ${prestacion:.2f}")
print(f"Prestación redondeada: ${int(prestacion)}")
print(f"Edad actual: {edad}")
print(f"Edad en 10 años: {edad_futura}")0.9 Síntesis
int: números enteros sin decimales, sin límite de tamaño.float: números con decimales, precisión limitada.complex: números complejos (real + imaginario, conj).type(): verifica el tipo de un número.- Conversiones:
int(),float(),complex(). - Operaciones:
+,-,*,/,//,%,**. - Precisión: los floats son aproximados (problemas con decimales).
random: módulo para generar números aleatorios.
0.10 Qué sigue
- Relacionado: operadores matemáticos, módulo
math, formateo de números - Siguiente tema: Strings — aprenderás a trabajar con texto y todas sus operaciones.
Cómo citar
Achalma, E. (2026, 20 de octubre). Números. Numerus Scriptum. https://numerus-scriptum.netlify.app/cursos/python/numeros/