Tipos primitivos: int, float, str, bool y None
Python es de tipado dinámico: las variables no tienen tipo, los valores sí. Conocer los cinco tipos primitivos es el primer paso para escribir código sin sorpresas.
int y float
int representa números enteros (sin límite de tamaño en Python) y float representa números con punto decimal (implementado como un double de 64 bits de IEEE 754).
# int — enteros sin límite de tamaño
edad = 25
poblacion = 8_000_000_000 # guion bajo como separador visual
numero_grande = 2 ** 100 # Python maneja enteros arbitrariamente grandes
# float — números con decimal
precio = 19.99
temperatura = -3.5
notacion_cientifica = 1.5e10 # 15,000,000,000
# Operaciones y su tipo resultante
print(10 / 3) # 3.3333... → float (siempre)
print(10 // 3) # 3 → int (división entera)
print(10 % 3) # 1 → int (módulo)
# Problemas de precisión con float (heredados de IEEE 754)
print(0.1 + 0.2) # 0.30000000000000004 ← ¡no es exacto!
# Para finanzas, usar decimal.Decimal
from decimal import Decimal
print(Decimal("0.1") + Decimal("0.2")) # 0.3 ← exacto
3.3333333333333335
3
1
0.30000000000000004
0.30.1 + 0.2 == 0.3 devuelve False en Python (y en casi todos los lenguajes). Para cálculos financieros, usa siempre decimal.Decimal con strings, no con floats.
str — cadenas de texto
Las cadenas en Python son secuencias inmutables de caracteres Unicode. Se pueden definir con comillas simples, dobles o triples.
# Las tres formas de definir strings
nombre = 'Fernando' # comillas simples
ciudad = "Madrid" # comillas dobles (equivalente)
mensaje = """Este es un
string multilínea
con saltos de línea reales."""
# Caracteres de escape
tab = "columna1 columna2"
nueva_linea = "línea1
línea2"
barra = "C:\\Users\\Fernando" # barra invertida literal
# Raw strings — ignoran los escapes (útil para regex y rutas Windows)
ruta = r"C:UsersFernandoDesktop"
patron = r"d+.d+" # regex sin escapes dobles
# Operaciones básicas con strings
texto = "Hola, mundo"
print(len(texto)) # 11
print(texto.upper()) # HOLA, MUNDO
print(texto.lower()) # hola, mundo
print(texto.replace("mundo", "Python")) # Hola, Python
print(texto[0]) # H (indexación)
print(texto[-1]) # o (índice negativo = desde el final)
print(texto[0:4]) # Hola (slicing)
print("mundo" in texto) # True
11
HOLA, MUNDO
hola, mundo
Hola, Python
H
o
Hola
Truebool y None
bool tiene solo dos valores: True y False. En Python, bool es una subclase de int — True vale 1 y False vale 0.
# bool — verdadero o falso
es_mayor = True
esta_activo = False
# bool es subclase de int
print(True + True) # 2
print(True * 5) # 5
print(False + 1) # 1
# None — ausencia de valor
resultado = None
print(resultado) # None
print(type(resultado)) # <class 'NoneType'>
# Comparar con None: siempre usar 'is', no '=='
if resultado is None:
print("resultado no tiene valor")
# None es falsy — se comporta como False en contextos booleanos
if not resultado:
print("resultado es falsy")
2
5
1
None
<class 'NoneType'>
resultado no tiene valor
resultado es falsyUsa siempre valor is None en lugar de valor == None. is compara identidad de objeto (son el mismo objeto en memoria), mientras == llama al método __eq__ que puede estar sobrescrito. Para None, is es la forma correcta e idiomática.
type() e isinstance()
Para inspeccionar el tipo de un valor en tiempo de ejecución, Python ofrece type() e isinstance():
valor = 42
# type() — devuelve el tipo exacto
print(type(valor)) # <class 'int'>
print(type(valor) == int) # True
# isinstance() — comprueba si es instancia de un tipo (o de una jerarquía)
print(isinstance(valor, int)) # True
print(isinstance(valor, (int, float))) # True — acepta tupla de tipos
print(isinstance(valor, str)) # False
# Por qué isinstance() es mejor que type() para checks:
# isinstance() respeta la herencia
print(isinstance(True, int)) # True ← bool hereda de int
print(type(True) == int) # False ← type() es estricto
<class 'int'>
True
True
True
False
True
FalseConversión de tipos
Python no hace conversiones implícitas entre tipos — debes ser explícito:
# Conversiones explícitas (casting)
int("42") # → 42
int(3.9) # → 3 (trunca, no redondea)
float("3.14") # → 3.14
float(10) # → 10.0
str(42) # → "42"
str(True) # → "True"
bool(0) # → False
bool(1) # → True
bool("") # → False
bool("texto") # → True
# Conversión que puede fallar — manejar con try/except
entrada = "abc"
try:
numero = int(entrada)
except ValueError:
print(f"'{entrada}' no es un número válido")
# Conversión segura de input() — siempre devuelve string
# edad_str = input("¿Cuántos años tienes? ")
# edad = int(edad_str) # convertir explícitamente
'abc' no es un número válidoCuando lees datos del usuario con input(), el resultado es siempre un string, incluso si el usuario escribe un número. Siempre convierte explícitamente: edad = int(input("Tu edad: ")).
Practica
Cuatro ejercicios para dominar los tipos primitivos de Python.