PyDA Course
📖 Lección 5 Principiante ⏱ 12 minutos ⚡ +10 XP ColabKagglenbviewerBinderDeepnoteGitHub aritmética · división · módulo · exponente · precedencia

Operadores aritméticos

Suma, resta, multiplica, divide, división de piso, módulo y exponente, los ocho operadores aritméticos.

🎯 Lo que aprenderás:
  • Usar los ocho operadores aritméticos: +, -, *, /, //, %, **
  • Comprender la división de piso frente a la división verdadera
  • Aplicar la precedencia de operadores (PEMDAS)
  • Usar paréntesis para anular la precedencia

Los operadores que una máquina toma prestados de la matemática

Ya escribiste funciones auxiliares en lecciones anteriores: guardar un valor, imprimirlo, cambiarle el tipo. Nada de eso sirve hasta que un programa pueda hacer algo con los números. Así que haz una pausa y observa: una computadora existe para evaluar expresiones, y toda expresión se construye con operadores que unen valores. Ya conoces los de aritmética del papel, pero la máquina corta dos de ellos por la mitad.

Los operadores y sus significados

Python ofrece ocho. Los primeros cuatro son exactamente lo que esperas:

python
7 + 2    # 9   — suma
7 - 2    # 5   — resta
7 * 2    # 14  — multiplicación
7 / 2    # 3.5 — división verdadera (siempre devuelve un float)

Después vienen tres que responden a preguntas que solo hiciste en los deberes:

python
7 // 2   # 3   — división de piso (redondea hacia −∞)
7 % 2    # 1   — módulo (el resto)
7 ** 2   # 49  — potenciación (7²)

** es cómo Python escribe la potencia: 72=497^2 = 49. Los dos recién llegados son // y %, y no son variaciones, son las dos mitades de una misma pregunta legítima.

Dos mitades de una misma división

Haz una pregunta real: ¿cuántos grupos enteros de 4 caben en 15, y cuánto sobra?

15=43+3.15 = 4 \cdot 3 + 3.

La respuesta tiene dos partes, el cociente 33 y el resto 33. El // de Python responde la primera parte y el % responde la segunda:

a=(a//b)b+(a%b)a = (a \mathbin{//} b) \cdot b + (a \mathbin{\%} b)
python
15 // 4   # 3   — cuántos grupos de 4
15 % 4    # 3   — cuánto sobra
4 * 3 + 3 # 15  ✓ la identidad se cumple

Esa identidad no es decoración, es la definición de ambos operadores, y no puede fallar mientras las dos partes las calcule la misma máquina.

Hay un pliegue. ¿Qué cociente da Python para 7÷2-7 \div 2? Escríbelo como pregunta de agrupación:

7=2?+?.-7 = 2 \cdot ? + ?.

Las opciones son 2(3)+(1)2 \cdot (-3) + (-1) o 2(4)+12 \cdot (-4) + 1. Python toma el piso, como la función matemática x\lfloor x \rfloor:

python
-7 // 2   # -4 — floor(-3.5) = -4, no -3
-7 % 2    # 1  — coherente con el piso: -7 = 2·(-4) + 1

Los dos operadores se mantienen fieles entre sí: la identidad a=(a//b)b+(a%b)a = (a//b)\cdot b + (a\%b) se cumple sin excepciones, y eso vale más que “la respuesta intuitiva”.

El orden de las operaciones, zanjado

Si una expresión contiene varios operadores, hace falta una secuencia fija, o cada lector calcularía un valor distinto para 2+342 + 3 \cdot 4. Python adopta el orden que aprendiste como PEMDAS:

  • ** primero (potenciación)
  • luego *, /, //, % (de izquierda a derecha)
  • luego +, - (de izquierda a derecha)
python
2 + 3 * 4      # 14, no 20
(2 + 3) * 4    # 20 — los paréntesis anulan
2 ** 3 ** 2    # 512, no 64

Ese último es una auténtica sorpresa. ** es asociativo a la derecha, así que 2 ** 3 ** 2 se lee como 2(32)=29=5122^{(3^2)} = 2^9 = 512, igual que en la notación apilada donde las potencias escalan en una sola dirección. Ante la duda, escribe los paréntesis, un lector que no los ve no adivinará tu intención.

Un ejemplo resuelto: el cambio del plan de lectura

El par cociente/resto administra un plan de lectura:

python
pages = 301
per_day = 30
days = pages // per_day      # 10 — días enteros de lectura
leftover = pages % per_day   # 1  — el resto del undécimo día

print(f"{days} full days, {leftover} leftover")
days * per_day + leftover    # 301 — la identidad se cumple

La identidad de la división a=(a//b)b+(a%b)a = (a \mathbin{//} b) \cdot b + (a \mathbin{\%} b) se vuelve un libro mayor: days y leftover son sus dos columnas, y la identidad es el recibo que prueba que nada se perdió.

Errores comunes

  • / frente a //. 7 / 2 es 3.5 (un float); 7 // 2 es 3 (un int). Recurre a // solo cuando el cociente entero sea lo que pide el problema.
  • División de piso con negativos. -7 // 2 es -4, no -3. El piso va hacia -\infty, no hacia cero.
  • El % también funciona con floats. 7.5 % 2 es 1.5, la identidad de arriba vale para reales tanto como para enteros.
  • ** enlaza más fuerte que *. 2 * 3 ** 2 es 18, no 36, la potencia se calcula primero. Pon paréntesis cuando quieras decir (2 * 3) ** 2 = 36.

🧩 Desafíos

🧩 Desafío, piensa primero, luego revela

Sin ejecutarlo, calcula 15 // 4 y 15 % 4 a mano y luego verifica que 4(15//4)+(15%4)4 \cdot (15 // 4) + (15 \% 4) reproduce 1515.

💡 Respuesta: 15 // 4 es 3 (el piso de $3.75$), y 15 % 4 es 3, ya que $15 = 4\cdot 3 + 3$. Juntos, 4 * 3 + 3 = 15, la identidad de la división, verificada.

🧩 Desafío, piensa primero, luego revela

¿Cómo extraerías la cifra de las centenas de cualquier número? Dado n = 4567, obtén 5 usando solo aritmética, sin cadenas.

💡 Respuesta: (n // 100) % 10, primero divide por 100 para desplazar la cifra a la derecha (4567 → 45), luego módulo 10 para quedarte solo con la última (45 → 5).

🧩 Desafío, piensa primero, luego revela

¿Por qué Python usa ** para la potenciación en lugar de ^? ¿Qué hace ^ en realidad en Python?

💡 Respuesta: ^ es el operador XOR bit a bit en Python, no la potenciación. Python usa ** para evitar chocar con la convención de los lenguajes donde ^ significa XOR.

🤔 Preguntas socráticas

  • ¿Por qué la división de piso redondea hacia menos infinito y no hacia cero? ¿Qué beneficio práctico se desprende de esa elección (pista: piensa en divmod() devolviendo un par coherente)?
  • 2 ** 3 ** 2 es 512, no 64. ¿Por qué ** es asociativo a la derecha cuando + y * lo son a la izquierda?
  • ¿Dónde gana el pan la aritmética modular en la vida real? Piensa en relojes, días del calendario o índices de un arreglo.

✅ Comprobación rápida

1. ¿Cuánto es -7 // 2?

2. ¿Cuál es el resultado de 2 ** 3 ** 2?

3. ¿Cuánto es 7 % 3?

aritméticadivisiónmóduloexponenteprecedencia