Módulo 1 · Lección 2 de 59
Números y operaciones
Enteros y decimales, los siete operadores aritméticos, el orden en que se aplican y por qué 0.1 + 0.2 no da exactamente 0.3.
Dos tipos de número#
Python distingue entre números enteros y números con decimales:
unidades = 12 # int, un número entero
precio = 19.99 # float, un número con decimales| Tipo | Nombre en Python | Ejemplos |
|---|---|---|
| Entero | int | 0, 42, -7, 1000000 |
| Decimal | float | 3.14, -0.5, 19.99, 2.0 |
Fíjate en que 2 y 2.0 son distintos para Python: el primero es un int y el segundo un float, aunque valgan lo mismo. Puedes comprobar el tipo de cualquier cosa con la función type():
print(type(12))
print(type(19.99))<class 'int'>
<class 'float'>Los siete operadores#
a = 17
b = 5
print(a + b) # suma
print(a - b) # resta
print(a * b) # multiplicación
print(a / b) # división
print(a // b) # división entera
print(a % b) # resto o módulo
print(a ** b) # potencia22
12
85
3.4
3
2
1419857Los cuatro primeros no necesitan explicación. Los tres últimos sí:
La división siempre da decimales#
print(10 / 2)5.0Aunque el resultado sea exacto, / devuelve siempre un float. Nunca un entero. Es un detalle que sorprende al principio.
División entera: cuántas veces cabe#
// descarta la parte decimal y te da solo el cociente entero:
print(17 // 5) # 5 cabe 3 veces en 17
print(7 // 2)
print(-7 // 2) # ojo: redondea hacia abajo, no hacia cero3
3
-4Módulo: lo que sobra#
% te da el resto de esa división:
print(17 % 5) # 17 = 5*3 + 2, sobran 2
print(10 % 2) # divisible: no sobra nada
print(7 % 2)2
0
1Parece un operador exótico y resulta ser de los más útiles del lenguaje. Dos usos que verás una y otra vez:
numero = 14
# ¿Es par? Lo es si al dividir entre 2 no sobra nada.
print(numero % 2 == 0)
# Convertir 200 minutos en horas y minutos
minutos_totales = 200
horas = minutos_totales // 60
minutos = minutos_totales % 60
print(horas, "horas y", minutos, "minutos")True
3 horas y 20 minutosPotencia#
print(2 ** 10) # 2 elevado a 10
print(9 ** 0.5) # elevar a 0.5 es la raíz cuadrada1024
3.0El orden de las operaciones#
Python respeta la prioridad matemática de toda la vida:
- Paréntesis
- Potencias
** - Multiplicación, división, división entera y módulo
* / // % - Suma y resta
+ -
print(2 + 3 * 4) # primero multiplica: 2 + 12
print((2 + 3) * 4) # los paréntesis mandan14
20Mezclar enteros y decimales#
Si operas un int con un float, el resultado es siempre float:
print(3 + 0.5)
print(type(3 + 0.5))
print(4 * 2.0)3.5
<class 'float'>
8.0La sorpresa de los decimales#
Escribe esto en la consola interactiva:
>>> 0.1 + 0.2
0.30000000000000004No es un fallo de Python: pasa en Java, en JavaScript, en C y en tu calculadora si tuviera suficientes dígitos. Los float se guardan en binario, y algunos decimales sencillos en base diez, como 0.1, no tienen representación exacta en binario, igual que 1/3 no tiene representación exacta en decimal.
Consecuencia práctica: nunca compares dos decimales con ==.
print(0.1 + 0.2 == 0.3) # False, aunque parezca mentira
print(round(0.1 + 0.2, 2) == 0.3) # TrueFunciones numéricas incorporadas#
No hay que importar nada para usarlas:
print(abs(-7)) # valor absoluto
print(round(3.14159, 2)) # redondear a 2 decimales
print(round(2.5)) # ojo con el redondeo bancario: da 2, no 3
print(max(3, 9, 4)) # el mayor
print(min(3, 9, 4)) # el menor
print(pow(2, 10)) # igual que 2 ** 107
3.14
2
9
3
1024Para operaciones más avanzadas está el módulo math, que sí hay que importar:
import math
print(math.sqrt(16)) # raíz cuadrada
print(math.pi)
print(math.ceil(4.1)) # redondea siempre hacia arriba
print(math.floor(4.9)) # redondea siempre hacia abajo4.0
3.141592653589793
5
4