edubun
Español

Números y aritmética

En Python 3, 7 / 2 da 3.5, 7 // 2 da 3 y 7 % 2 da el resto 1.

Cuatro divisiones para predecir antes de seguir leyendo

Tapa la salida de abajo y anota qué esperas que imprima cada línea. La mayoría acierta la primera y falla al menos una de las otras, y esa predicción equivocada es el punto de partida de esta unidad.

print(7 / 2)
print(8 / 2)
print(7 // 2)
print(7 % 2)
Salida
3.5
4.0
3
1

La segunda línea sorprende. 8 / 2 es exactamente 4, y sin embargo Python imprime 4.0. La razón es que / siempre da un float, un número con punto decimal, incluso cuando la división es exacta. Si quieres una división de números enteros, Python tiene otro operador, //, llamado división entera. Divide y luego redondea hacia abajo al número entero inferior. El operador compañero % da el resto que sobra. Juntos responden la pregunta de primaria «7 entre 2 es 3, de resto 1».

Caben tres saltos de 2 en 7, y sobra 1: 7 // 2 es el número de saltos, 7 % 2 es lo que sobra.

% aparece en más lugares de los que esperarías. Un número es par cuando n % 2 es 0. La última cifra de un número es n % 10. Convertir 135 minutos en horas y minutos es 135 // 60 horas y 135 % 60 minutos.

minutes = 135
print(minutes // 60, "h", minutes % 60, "min")
print(2026 % 2, 2027 % 2)
print(4589 % 10)
Salida
2 h 15 min
0 1
9

Los otros operadores y el orden que usa Python

OperadorSignificadoEjemploResultado
+suma7 + 29
-resta7 - 25
*multiplicación7 * 214
/división (float)7 / 23.5
//división entera7 // 23
%resto7 % 21
**potencia7 ** 249

Python sigue el mismo orden que la clase de matemáticas: primero **, luego *, /, // y %, luego + y -, de izquierda a derecha dentro de cada grupo. Los paréntesis van antes que todo, así que ante la duda, agrégalos. No cuestan nada y aclaran la intención al siguiente lector.

print(2 + 3 * 4)
print((2 + 3) * 4)
print(2 ** 10)
print(10_000 * 3)
Salida
14
20
1024
30000

La última línea muestra una pequeña ayuda: Python te deja escribir guiones bajos dentro de números largos, así que 10_000 es más fácil de leer que 10000. Se ignoran cuando se calcula el número y no aparecen en la salida. No se pueden usar comas de esa manera, porque una coma ya significa «siguiente valor».

Los decimales se guardan en binario, así que algunas respuestas salen con un pequeño error

Prueba 0.1 + 0.2. El tutorial de Python dedica un capítulo entero a explicar por qué la respuesta es 0.30000000000000004 y no 0.3. Los float se guardan en binario, y 0.1 no tiene forma binaria exacta, igual que 1/3 no tiene forma decimal exacta. El error es diminuto, y round() lo oculta al imprimir. Ten en cuenta que round() redondea al vecino par un valor que está justo a la mitad: la página de funciones integradas da round(0.5) como 0 y round(1.5) como 2. Para dinero en wones enteros o centavos enteros, guarda las cantidades como int y evitarás el problema por completo.

print(0.1 + 0.2)
print(round(0.1 + 0.2, 2))
print(round(0.5), round(1.5), round(2.5))
print(int(3.99), float(7))
Salida
0.30000000000000004
0.3
0 2 2
3 7.0

input() siempre te da una cadena

input() muestra un mensaje, espera a que el usuario escriba algo y presione Enter, y devuelve lo que escribió como una cadena. Aunque escriba 15, obtienes "15", texto. Para hacer aritmética con eso, conviértelo con int() o float(). int() aplicado a un float corta la parte decimal en vez de redondear, así que int(3.99) es 3.

age = input("How old are you? ")
next_year = int(age) + 1
print("Next year you will be", next_year)
Salida
How old are you? 14
Next year you will be 15
En el ejemplo de arriba, 14 es lo que escribió el usuario. El programa mismo no contiene el número 14.
/División que siempre da un float: 8 / 2 es 4.0
//División entera: 7 // 2 es 3
%Resto: 7 % 2 es 1
**Potencia: 2 ** 3 es 8
int()Convierte "15" o 3.9 en un número entero (15, 3)
input()Lee una línea que escribe el usuario, como cadena
round(x, n)Redondea a n decimales; si un valor está exactamente a mitad de camino, lo redondea al vecino par
  1. ¿Qué imprime esto?
    print(9 / 3)
  2. ¿Qué imprime esto?
    print(17 // 5, 17 % 5)
  3. ¿Qué imprime esto?
    print(2 + 3 * 4 ** 2)
  4. ¿Qué imprime esto?
    print(2 ** 3)
  5. ¿Qué imprime esto?
    print(2 ^ 3)
    • 8
    • 6
    • 1
    • Un error
  6. ¿Qué imprime esto?
    print(int("20") + 5)
  7. ¿Qué imprime esto?
    print("20" + "5")
  8. ¿Qué imprime esto?
    print(int(7.9))
  9. ¿Qué imprime esto?
    print(round(2.5))
  10. Un panecillo cuesta 3500 wones y tienes 10 000 wones. ¿Qué imprime esto?
    won = 10000
    price = 3500
    print(won // price, won % price)
  11. ¿Qué expresión te dice si n es par?
    • n / 2 == 0
    • n // 2 == 0
    • n % 2 == 0
    • n ** 2 == 0
Errores frecuentes
  • «2 ^ 3 es 8». En Python, ^ es un operador a nivel de bits y 2 ^ 3 es 1. Las potencias usan **, así que 2 ** 3 es 8. El programa se ejecuta sin error, lo que hace difícil notar este fallo.
  • «input() me da un número si escribo un número». Siempre da una cadena. "14" + 1 se detiene con TypeError: can only concatenate str (not "int") to str. Convierte antes con int(input(...)).
  • «0.1 + 0.2 == 0.3 es True». Es False, porque 0.1 + 0.2 es 0.30000000000000004. Compara valores redondeados, como round(0.1 + 0.2, 2) == 0.3, o cuenta en unidades enteras (wones, centavos) con int.
Nota para docentesEmpieza con el ejercicio de predicción y deja que la sorpresa del 4.0 haga el trabajo. Los estudiantes que conocen de primaria la división con resto aprenden // y % rápido una vez que se nombran así. El error de redondeo de los float vale la pena mostrarlo una vez y no detenerse en él; el hábito importante es guardar el dinero como números enteros. Que round(2.5) dé 2 contradice el redondeo que se enseña en clase de matemáticas, así que espera una pregunta, y remite a la documentación de las funciones integradas en vez de discutir. El error de conversión de input() es el que los estudiantes encuentran más a menudo en sus primeros proyectos.
Ideas clave
  • / siempre da un float; // da el cociente entero; % da el resto.
  • ** es la potencia; ^ no lo es.
  • Orden: paréntesis, **, luego * / // %, luego + -.
  • 0.1 + 0.2 es 0.30000000000000004; guarda el dinero como int.
  • input() devuelve una cadena; convierte con int() o float().
Fuentes de este curso (6)
  • Python Software Foundation, The Python Tutorial for Python 3.12 (docs.python.org/3.12/tutorial: 2 Using the Python Interpreter, 3 An Informal Introduction to Python (numbers, text, lists), 4 More Control Flow Tools (if, for, range, break and continue, defining functions, default argument values, 4.10 coding style: 4-space indentation), 5 Data Structures (list methods, 5.5 dictionaries, insertion order), 8 Errors and Exceptions (syntax errors, exceptions, reading the traceback, handling exceptions), 15 Floating-Point Arithmetic (0.1 + 0.2))
  • Built-in Functions (docs.python.org/3.12/library/functions.html: print, input, len, int, float, str, type, round (round half to even: round(0.5) and round(-0.5) are 0, round(1.5) is 2), range, sum, min, max, sorted)
  • Built-in Types (str methods upper, lower, replace, strip; dict.get; list.append, pop, remove, sort returning None)
  • General Python FAQ (docs.python.org/3.12/faq/general.html: Guido van Rossum began Python in the 1989 Christmas holidays, posted it to USENET in February 1991, named it after Monty Python's Flying Circus)
  • Curriculum for the Korean pages: 교육부 고시 제2022-33호 [별책 10] 정보과 교육과정 (PDF read 2026-10-19: 중학교 정보 [9정03-05] 리스트 등 데이터를 순차적으로 저장하는 구조, [9정03-06] 논리 연산과 중첩 제어 구조, [9정03-07] 함수 활용과 디버거로 오류 수정, [9정03-08] 실생활 문제를 프로그래밍으로 해결, 적용 시 고려 사항 「학생의 수준을 고려하여 적합한 프로그래밍 언어를 선정」; 고등학교 정보 [12정03-04] 자료형, [12정03-05] 표준입출력, [12정03-07] 제어 구조)
  • Bug story only: Smithsonian National Museum of American History, Log Book With Computer Bug, 1947, Harvard Mark II, "first actual case of bug being found", probably not Hopper's log book (americanhistory.si.edu/collections/object/nmah_334663, read 2026-10-19)

Fecha de consulta: 2026-10-19