📦 Unidad 2. Variables y Tipos de Datos
2.1. ¿Qué es una Variable?
Una variable es un espacio en la memoria del ordenador donde guardamos información. En Python, técnicamente son etiquetas que hacen referencia a objetos en memoria.
# Creamos una variable llamada "edad" y le asignamos el valor 25
edad = 25
# Ahora podemos usar esa variable
print(edad) # Muestra: 25
Asignación de Variables
El símbolo = se usa para asignar un valor a una variable:
nombre = "Ana" # Texto
edad = 30 # Número entero
altura = 1.75 # Número decimal
es_estudiante = True # Valor booleano (verdadero/falso)
Reglas para Nombrar Variables
| Regla | Ejemplo Válido | Ejemplo Inválido |
|---|---|---|
Debe empezar con letra o _ |
nombre, _edad |
1nombre |
Solo letras, números y _ |
mi_variable, edad2 |
mi-variable, edad@ |
| No puede ser palabra reservada | mi_class |
class, if, for |
| Distingue mayúsculas/minúsculas | Nombre ≠ nombre |
- |
Convenciones de Nombres (PEP 8)
# BIEN: snake_case (recomendado en Python)
nombre_completo = "Juan García"
numero_de_telefono = "123456789"
es_mayor_de_edad = True
# MAL: Otros estilos (válidos pero no recomendados en Python)
NombreCompleto = "Juan García" # PascalCase (se usa para clases)
numeroTelefono = "123456789" # camelCase (se usa en otros lenguajes)
Ejemplos de Asignación
# Asignación simple
x = 10
mensaje = "Hola Mundo"
# Asignación múltiple
a, b, c = 1, 2, 3
print(a) # 1
print(b) # 2
print(c) # 3
# Mismo valor a varias variables
x = y = z = 0
print(x, y, z) # 0 0 0
# Intercambiar valores (muy útil en Python)
a = 5
b = 10
a, b = b, a # Intercambio
print(a) # 10
print(b) # 5
2.2. Tipos de Datos Básicos
Python tiene varios tipos de datos fundamentales:
| Tipo | Nombre en Python | Ejemplo |
|---|---|---|
| Entero | int |
42, -7, 0 |
| Decimal | float |
3.14, -0.5, 2.0 |
| Texto | str |
"Hola", 'Python' |
| Booleano | bool |
True, False |
| Nulo | NoneType |
None |
Función type()
Puedes saber el tipo de una variable con type():
edad = 25
print(type(edad)) # <class 'int'>
precio = 19.99
print(type(precio)) # <class 'float'>
nombre = "Python"
print(type(nombre)) # <class 'str'>
activo = True
print(type(activo)) # <class 'bool'>
nada = None
print(type(nada)) # <class 'NoneType'>
2.3. Números Enteros (int)
Los enteros son números sin decimales, positivos o negativos.
# Enteros positivos
edad = 25
poblacion = 47000000
año = 2026
# Enteros negativos
temperatura = -5
deuda = -1000
# Cero
contador = 0
# Números grandes (puedes usar _ para legibilidad)
millones = 1_000_000
print(millones) # 1000000
Operaciones con Enteros
a = 10
b = 3
# Operaciones básicas
print(a + b) # Suma: 13
print(a - b) # Resta: 7
print(a * b) # Multiplicación: 30
print(a / b) # División: 3.3333... (devuelve float)
print(a // b) # División entera: 3
print(a % b) # Módulo (resto): 1
print(a ** b) # Potencia: 1000
Ejemplos Prácticos
# Ejemplo 1: Cálculo de edad
año_actual = 2026
año_nacimiento = 1990
edad = año_actual - año_nacimiento
print(f"Tienes {edad} años") # Tienes 36 años
# Ejemplo 2: Conversión de minutos a horas
minutos_totales = 150
horas = minutos_totales // 60
minutos_restantes = minutos_totales % 60
print(f"{minutos_totales} minutos = {horas} horas y {minutos_restantes} minutos")
# 150 minutos = 2 horas y 30 minutos
# Ejemplo 3: Cálculo de precio total
precio_unitario = 15
cantidad = 7
total = precio_unitario * cantidad
print(f"Total: {total}€") # Total: 105€
# Ejemplo 4: Potencias
base = 2
exponente = 10
resultado = base ** exponente
print(f"{base}^{exponente} = {resultado}") # 2^10 = 1024
2.4. Números Decimales (float)
Los float son números con parte decimal.
# Declaración de floats
precio = 19.99
pi = 3.14159
temperatura = -2.5
porcentaje = 0.75
# También puedes escribirlos así
x = 1.0 # Es float aunque sea un número "entero"
y = .5 # Equivale a 0.5
z = 2. # Equivale a 2.0
Notación Científica
# Para números muy grandes o muy pequeños
distancia_sol = 1.496e11 # 1.496 × 10¹¹ metros
masa_electron = 9.109e-31 # 9.109 × 10⁻³¹ kg
print(distancia_sol) # 149600000000.0
print(masa_electron) # 9.109e-31
Operaciones con Decimales
a = 10.5
b = 3.2
print(a + b) # 13.7
print(a - b) # 7.3
print(a * b) # 33.6
print(a / b) # 3.28125
print(a // b) # 3.0 (división entera, pero sigue siendo float)
print(a % b) # 0.8999999... (resto)
print(a ** b) # 1613.16...
Precisión de los Float
¡Cuidado! Los float tienen limitaciones de precisión:
# Esto puede dar resultados inesperados
print(0.1 + 0.2) # 0.30000000000000004 (no exactamente 0.3)
# Para comparaciones, usa redondeo o tolerancia
resultado = 0.1 + 0.2
print(round(resultado, 1) == 0.3) # True
Ejemplos Prácticos
# Ejemplo 1: Cálculo de IVA
precio_base = 100.00
iva = 0.21
precio_con_iva = precio_base * (1 + iva)
print(f"Precio con IVA: {precio_con_iva}€") # 121.0€
# Ejemplo 2: Conversión de temperatura
celsius = 25.0
fahrenheit = (celsius * 9/5) + 32
print(f"{celsius}°C = {fahrenheit}°F") # 25.0°C = 77.0°F
# Ejemplo 3: Calcular promedio
nota1 = 7.5
nota2 = 8.0
nota3 = 6.5
promedio = (nota1 + nota2 + nota3) / 3
print(f"Promedio: {promedio:.2f}") # Promedio: 7.33
# Ejemplo 4: Área de un círculo
radio = 5.0
pi = 3.14159
area = pi * (radio ** 2)
print(f"Área del círculo: {area:.2f} unidades²") # 78.54 unidades²
2.5. Cadenas de Texto (str)
Las strings o cadenas son secuencias de caracteres (texto).
Creación de Strings
# Con comillas dobles
saludo = "Hola, mundo"
# Con comillas simples
nombre = 'Python'
# Ambas son equivalentes, elige una y sé consistente
mensaje1 = "Esto es un string"
mensaje2 = 'Esto también es un string'
# Strings vacíos
vacio = ""
tambien_vacio = ''
Strings Multilínea
# Con triple comilla
poema = """Caminante, no hay camino,
se hace camino al andar.
- Antonio Machado"""
print(poema)
# También con comillas simples
texto = '''Primera línea
Segunda línea
Tercera línea'''
Comillas Dentro de Strings
# Usar comillas diferentes
frase1 = "Él dijo: 'Hola'"
frase2 = 'Ella respondió: "Buenos días"'
# O usar escape con \
frase3 = "Él dijo: \"Hola\""
frase4 = 'No puedo ir a María\'s house'
print(frase1) # Él dijo: 'Hola'
print(frase3) # Él dijo: "Hola"
Caracteres Especiales (Escape)
| Secuencia | Significado |
|---|---|
\n |
Nueva línea |
\t |
Tabulación |
\\ |
Barra invertida |
\' |
Comilla simple |
\" |
Comilla doble |
# Ejemplos de escape
print("Primera línea\nSegunda línea")
# Primera línea
# Segunda línea
print("Columna1\tColumna2\tColumna3")
# Columna1 Columna2 Columna3
print("Ruta: C:\\Users\\Documentos")
# Ruta: C:\Users\Documentos
Raw Strings
Para evitar que Python interprete los escapes:
# String normal
ruta1 = "C:\nuevo\texto" # \n y \t se interpretan como escape
# Raw string (r al inicio)
ruta2 = r"C:\nuevo\texto" # Se mantiene literal
print(ruta2) # C:\nuevo\texto
2.6. Operaciones con Strings
Concatenación (Unir Strings)
nombre = "Juan"
apellido = "García"
# Con el operador +
nombre_completo = nombre + " " + apellido
print(nombre_completo) # Juan García
# Con coma en print (añade espacio automático)
print(nombre, apellido) # Juan García
Repetición
linea = "-" * 30
print(linea) # ------------------------------
eco = "Hola " * 3
print(eco) # Hola Hola Hola
Longitud de un String
mensaje = "Python es genial"
print(len(mensaje)) # 16 (incluye espacios)
password = "secreto123"
print(f"Tu contraseña tiene {len(password)} caracteres")
Acceso a Caracteres (Indexación)
Los strings son secuencias, cada carácter tiene una posición (índice):
texto = "Python"
# Índices positivos (desde el inicio)
print(texto[0]) # P (primer carácter)
print(texto[1]) # y
print(texto[5]) # n (último carácter)
# Índices negativos (desde el final)
print(texto[-1]) # n (último)
print(texto[-2]) # o (penúltimo)
print(texto[-6]) # P (primero)
Slicing (Cortar Strings)
Sintaxis: string[inicio:fin:paso]
texto = "Python es genial"
# Desde índice 0 hasta 6 (sin incluir el 6)
print(texto[0:6]) # Python
# Desde índice 7 hasta el final
print(texto[7:]) # es genial
# Desde el inicio hasta índice 6
print(texto[:6]) # Python
# Desde índice -6 hasta el final
print(texto[-6:]) # genial
# Con paso
print(texto[::2]) # Pto sgna (cada 2 caracteres)
# Invertir string
print(texto[::-1]) # laineg se nohtyP
Ejemplos de Slicing
fecha = "25-01-2026"
dia = fecha[0:2] # "25"
mes = fecha[3:5] # "01"
año = fecha[6:] # "2026"
print(f"Día: {dia}, Mes: {mes}, Año: {año}")
# Obtener extensión de archivo
archivo = "documento.pdf"
extension = archivo[-3:] # "pdf"
nombre = archivo[:-4] # "documento"
print(f"Nombre: {nombre}, Extensión: {extension}")
2.7. Métodos de Strings
Los strings tienen muchos métodos (funciones) incorporados:
Cambio de Mayúsculas/Minúsculas
texto = "Hola Mundo"
print(texto.upper()) # HOLA MUNDO
print(texto.lower()) # hola mundo
print(texto.capitalize()) # Hola mundo (solo primera letra)
print(texto.title()) # Hola Mundo (cada palabra)
print(texto.swapcase()) # hOLA mUNDO (invierte)
Búsqueda
frase = "Python es un lenguaje de programación"
# Encontrar posición
print(frase.find("es")) # 7 (índice donde empieza "es")
print(frase.find("Java")) # -1 (no encontrado)
# Contar ocurrencias
print(frase.count("a")) # 3
# Verificar inicio/fin
print(frase.startswith("Python")) # True
print(frase.endswith("ción")) # True
# Verificar contenido
print("Python" in frase) # True
print("Java" in frase) # False
Modificación
# Reemplazar
texto = "Hola Mundo"
print(texto.replace("Mundo", "Python")) # Hola Python
# Eliminar espacios
mensaje = " Hola "
print(mensaje.strip()) # "Hola" (elimina espacios inicio/fin)
print(mensaje.lstrip()) # "Hola " (solo izquierda)
print(mensaje.rstrip()) # " Hola" (solo derecha)
# También elimina otros caracteres
url = "...www.ejemplo.com..."
print(url.strip(".")) # www.ejemplo.com
Dividir y Unir
# split() - Dividir string en lista
frase = "Python es genial"
palabras = frase.split() # Divide por espacios
print(palabras) # ['Python', 'es', 'genial']
fecha = "25-01-2026"
partes = fecha.split("-")
print(partes) # ['25', '01', '2026']
# join() - Unir lista en string
palabras = ['Python', 'es', 'genial']
frase = " ".join(palabras)
print(frase) # Python es genial
numeros = ['1', '2', '3', '4']
print("-".join(numeros)) # 1-2-3-4
Verificación
# Verificar tipo de contenido
print("12345".isdigit()) # True (solo dígitos)
print("Python".isalpha()) # True (solo letras)
print("Python3".isalnum()) # True (letras y números)
print(" ".isspace()) # True (solo espacios)
print("HOLA".isupper()) # True (todo mayúsculas)
print("hola".islower()) # True (todo minúsculas)
2.8. Formateo de Strings
f-strings (Recomendado - Python 3.6+)
La forma más moderna y legible:
nombre = "Ana"
edad = 25
# Interpolación básica
print(f"Me llamo {nombre} y tengo {edad} años")
# Me llamo Ana y tengo 25 años
# Expresiones dentro de las llaves
print(f"En 5 años tendré {edad + 5} años")
# En 5 años tendré 30 años
# Llamar métodos
print(f"Mi nombre en mayúsculas: {nombre.upper()}")
# Mi nombre en mayúsculas: ANA
Formateo de Números
precio = 1234.5678
porcentaje = 0.756
# Decimales
print(f"Precio: {precio:.2f}€") # Precio: 1234.57€
# Separador de miles
print(f"Precio: {precio:,.2f}€") # Precio: 1,234.57€
# Porcentaje
print(f"Porcentaje: {porcentaje:.1%}") # Porcentaje: 75.6%
# Alineación y relleno
numero = 42
print(f"{numero:05d}") # 00042 (rellena con ceros)
print(f"{numero:>10}") # " 42" (alinea derecha)
print(f"{numero:<10}") # "42 " (alinea izquierda)
print(f"{numero:^10}") # " 42 " (centrado)
Método format()
# Alternativa a f-strings
nombre = "Carlos"
edad = 30
print("Me llamo {} y tengo {} años".format(nombre, edad))
print("Me llamo {0} y tengo {1} años".format(nombre, edad))
print("Me llamo {n} y tengo {e} años".format(n=nombre, e=edad))
Operador % (Estilo Antiguo)
# Menos recomendado, pero aún se ve en código antiguo
nombre = "María"
edad = 28
print("Me llamo %s y tengo %d años" % (nombre, edad))
2.9. Booleanos (bool)
Los booleanos solo tienen dos valores: True (verdadero) o False (falso).
Valores Booleanos en Contexto
En Python, muchos valores se pueden evaluar como booleanos:
# Valores "falsos" (Falsy)
print(bool(0)) # False
print(bool(0.0)) # False
print(bool("")) # False (string vacío)
print(bool([])) # False (lista vacía)
print(bool(None)) # False
# Valores "verdaderos" (Truthy)
print(bool(1)) # True
print(bool(-5)) # True (cualquier número no cero)
print(bool("Hola")) # True (string no vacío)
print(bool([1, 2])) # True (lista no vacía)
Operadores de Comparación
Devuelven valores booleanos:
x = 10
y = 5
print(x == y) # False (igual a)
print(x != y) # True (diferente de)
print(x > y) # True (mayor que)
print(x < y) # False (menor que)
print(x >= y) # True (mayor o igual)
print(x <= y) # False (menor o igual)
Operadores Lógicos
a = True
b = False
print(a and b) # False (Y lógico: ambos deben ser True)
print(a or b) # True (O lógico: al menos uno True)
print(not a) # False (negación)
2.10. None (Valor Nulo)
None representa la ausencia de valor:
resultado = None
print(resultado) # None
print(type(resultado)) # <class 'NoneType'>
print(resultado is None) # True
# Uso común: valor inicial antes de asignar
usuario = None
# Después de algún proceso
usuario = "admin"
# Verificar si tiene valor
if usuario is not None:
print(f"Usuario: {usuario}")
2.11. Conversión de Tipos
A veces necesitas convertir entre tipos de datos.
int() - Convertir a Entero
# Desde string
edad_texto = "25"
edad_numero = int(edad_texto)
print(edad_numero + 5) # 30
# Desde float (trunca decimales)
precio = 19.99
precio_entero = int(precio)
print(precio_entero) # 19
# Errores comunes
# int("Hola") # Error: no se puede convertir texto
# int("19.99") # Error: tiene decimal
float() - Convertir a Decimal
# Desde string
temperatura = "36.5"
temp_numero = float(temperatura)
print(temp_numero + 0.5) # 37.0
# Desde entero
numero = 42
decimal = float(numero)
print(decimal) # 42.0
str() - Convertir a Texto
edad = 25
edad_texto = str(edad)
print("Tengo " + edad_texto + " años")
precio = 19.99
print("Precio: " + str(precio) + "€")
# Útil para concatenar con +
numero = 100
# print("Valor: " + numero) # Error!
print("Valor: " + str(numero)) # Correcto
bool() - Convertir a Booleano
Ejemplo Práctico: Calculadora
print("=== CALCULADORA ===")
print()
# input() siempre devuelve string
num1_texto = input("Primer número: ")
num2_texto = input("Segundo número: ")
# Convertir a números
num1 = float(num1_texto)
num2 = float(num2_texto)
# Ahora podemos hacer operaciones
suma = num1 + num2
resta = num1 - num2
multiplicacion = num1 * num2
division = num1 / num2
print()
print(f"{num1} + {num2} = {suma}")
print(f"{num1} - {num2} = {resta}")
print(f"{num1} × {num2} = {multiplicacion}")
print(f"{num1} ÷ {num2} = {division:.2f}")
2.12. Ejercicios Prácticos
Ejercicio 1: Intercambio de Variables
# Intercambia los valores de a y b
a = 10
b = 20
print(f"Antes: a={a}, b={b}")
# Tu código aquí
a, b = b, a
print(f"Después: a={a}, b={b}")
# Debe mostrar: Después: a=20, b=10
Ejercicio 2: Calculadora de Propina
print("=== Calculadora de Propina ===")
cuenta = float(input("Importe de la cuenta: "))
porcentaje_propina = float(input("Porcentaje de propina: "))
propina = cuenta * (porcentaje_propina / 100)
total = cuenta + propina
print()
print(f"Cuenta: {cuenta:.2f}€")
print(f"Propina ({porcentaje_propina}%): {propina:.2f}€")
print(f"Total a pagar: {total:.2f}€")
Ejercicio 3: Extractor de Información
email = "usuario@dominio.com"
# Extraer usuario y dominio
arroba_pos = email.find("@")
usuario = email[:arroba_pos]
dominio = email[arroba_pos + 1:]
print(f"Email: {email}")
print(f"Usuario: {usuario}")
print(f"Dominio: {dominio}")
Ejercicio 4: Formateo de Datos
nombre = "ana garcía"
edad = 28
salario = 32500.50
# Formatear correctamente
nombre_formateado = nombre.title()
print(f"Nombre: {nombre_formateado}")
print(f"Edad: {edad} años")
print(f"Salario: {salario:,.2f}€")
Ejercicio 5: Validador de Contraseña
password = input("Introduce una contraseña: ")
longitud = len(password)
tiene_numeros = any(c.isdigit() for c in password)
tiene_letras = any(c.isalpha() for c in password)
print()
print(f"Longitud: {longitud} caracteres")
print(f"Contiene números: {tiene_numeros}")
print(f"Contiene letras: {tiene_letras}")
if longitud >= 8 and tiene_numeros and tiene_letras:
print("✓ Contraseña válida")
else:
print("✗ Contraseña no válida")
2.13. Resumen
| Tipo | Descripción | Ejemplo |
|---|---|---|
int |
Números enteros | 42, -7 |
float |
Números decimales | 3.14, -0.5 |
str |
Texto | "Hola", 'Python' |
bool |
Verdadero/Falso | True, False |
None |
Valor nulo | None |
| Conversión | Función |
|---|---|
| A entero | int() |
| A decimal | float() |
| A texto | str() |
| A booleano | bool() |
📅 Fecha de creación: Enero 2026
✍️ Autor: Fran García