Números y aritmética
Los números aparecen en casi todos los programas que escribes. Un carrito de compras totaliza un precio. Un juego actualiza un puntaje. Un script cuenta cuántas veces ocurrió algo. Python te da operadores aritméticos que funcionan como las matemáticas en papel, además de algunos más que vale la pena conocer desde el principio.
Los operadores
Los cuatro operadores de las matemáticas (+, -, *, /) funcionan exactamente como esperarías. Python añade tres más que usarás constantemente: división entera, residuo y exponenciación.
price = 12.99
quantity = 3
print(price * quantity) # 38.97
print(price + 2) # 14.99
print(price - 1.00) # 11.99| Operador | Nombre | Ejemplo | Resultado |
|---|---|---|---|
+ | Suma | 5 + 3 | 8 |
- | Resta | 5 - 3 | 2 |
* | Multiplicación | 5 * 3 | 15 |
/ | División | 5 / 3 | 1.6666... |
// | División entera | 5 // 3 | 1 |
% | Residuo | 5 % 3 | 2 |
** | Exponenciación | 5 ** 3 | 125 |
División: / vs //
/ siempre te da el resultado decimal exacto, incluso si la respuesta es un número entero. // te da solo la parte entera, cortando todo lo que está después del punto decimal. No redondea; corta:
10 / 2 # 5.0 (siempre float, incluso cuando divide exactamente)
10 / 3 # 3.3333333333333335
10 // 3 # 3
7 // 2 # 3
-7 // 2 # -4 (redondea hacia el infinito negativo, no hacia cero)El resultado de -7 // 2 sorprende a la gente. Casi siempre usarás // con números positivos donde esto no surge. Mantenlo en la mente para cuando aparezcan negativos.
El operador de residuo %
% te da lo que queda después de la división entera. Si 10 // 3 es 3 (porque 3 cabe en 10 tres veces), entonces 10 % 3 es 1 (porque 3 × 3 = 9, y 10 - 9 = 1). El uso más común es verificar si un número es par o impar.
10 % 3 # 1
10 % 2 # 0 (divide exactamente)
10 % 7 # 3
6 % 2 # 0 (par)
7 % 2 # 1 (impar)Exponenciación **
** eleva un número a una potencia. Usa dos asteriscos, no el símbolo ^ (que significa otra cosa en Python):
2 ** 10 # 1024
3 ** 3 # 27
9 ** 0.5 # 3.0 (raíz cuadrada: elevar a la potencia 0.5)Precedencia de operadores
Python sigue el orden estándar de las matemáticas: exponenciación primero, luego multiplicación y división, luego suma y resta. Cuando no estés seguro, usa paréntesis. Hacen clara la intención y no cuestan nada:
2 + 3 * 4 # 14, no 20
2 ** 3 + 1 # 9, no 512
10 - 4 / 2 # 8.0, no 3.0
(2 + 3) * 4 # 20
10 / (2 + 3) # 2.0Cómo interactúan int y float
Python tiene una regla consistente: / siempre devuelve un decimal (incluso 4 / 2 da 2.0), y cualquier operación que mezcle un entero con un decimal da un decimal. Cuando necesitas un número entero, usa // o convierte con int().
4 / 2 # 2.0 (float, siempre)
4 // 2 # 2 (int)
4 + 2 # 6 (int)
4 + 2.0 # 6.0 (float)
4 * 0.5 # 2.0 (float)Precisión de los floats
Hay una trampa que sorprende a casi todos en algún momento:
0.1 + 0.2 # 0.30000000000000004Ese pequeño error no es un bug de Python. Las computadoras almacenan los números decimales en binario, y algunos valores como 0.1 no se pueden representar exactamente. Es similar a cómo 1/3 no se puede escribir exactamente en decimal. Para la mayoría de los cálculos cotidianos no importa. Para mostrar dinero, round() o el especificador de formato :.2f mantendrán la salida ordenada.
Literales numéricos legibles
Python te permite poner guiones bajos en los literales numéricos para hacer los números grandes más fáciles de leer. Python los ignora completamente; son solo para ti:
population = 8_100_000_000
distance_km = 384_400
pi_approx = 3.141_592_653Funciones integradas útiles
abs()
abs() devuelve el valor absoluto: siempre positivo, sin importar el signo de la entrada. Úsala cuando te importa qué tan lejos está un número del cero, no en qué dirección.
abs(-5) # 5
abs(3.7) # 3.7
abs(-0.5) # 0.5round()
round() redondea al entero más cercano por defecto. Pasa un segundo argumento para mantener un número específico de decimales:
round(3.7) # 4
round(3.2) # 3
round(3.14159, 2) # 3.14Algo que vale la pena saber: round(2.5) da 2, no 3. Python redondea al número par más cercano cuando un valor está exactamente a la mitad entre dos opciones.
divmod()
divmod() te da el cociente y el residuo en una sola llamada. Devuelve un par de valores que puedes asignar a dos nombres a la vez:
divmod(10, 3) # (3, 1): cociente 3, residuo 1
divmod(7, 2) # (3, 1)
divmod(9, 3) # (3, 0)
quotient, remainder = divmod(10, 3)
print(quotient) # 3
print(remainder) # 1¿Qué es eso de (3, 1)?
Eso es una tupla: un par fijo de valores devueltos juntos. Las tuplas tienen su propio capítulo. Por ahora, separa los dos valores asignando a dos nombres a la vez, como se muestra arriba.
En la práctica
Una calculadora de propina:
bill = 45.50
tip_rate = 0.18
tip = round(bill * tip_rate, 2)
total = round(bill + tip, 2)
print(f"Cuenta: ${bill}")
print(f"Propina: ${tip}")
print(f"Total: ${total}")round() mantiene la salida con apariencia de dinero en lugar de una larga secuencia de decimales.

