Fundamentos de Python
Al completar este módulo serás capaz de:
- Crear y utilizar variables en Python
- Conocer los tipos de datos básicos
- Usar operadores aritméticos, de comparación y lógicos
- Controlar el flujo del programa con condicionales y bucles
¿Por qué empezar por los fundamentos?
Piensa en cuando aprendiste a conducir. Antes de salir a la carretera, tuviste que aprender dónde estaban los pedales, cómo funcionaba el volante, qué hacía cada marcha… Solo después de dominar estos controles básicos pudiste empezar a conducir de verdad.
Programar es igual. Antes de crear aplicaciones web, videojuegos o inteligencia artificial, necesitas dominar los fundamentos: cómo guardar información, cómo hacer cálculos, cómo tomar decisiones y cómo repetir tareas. Son las “piezas de Lego” con las que construirás todo lo demás.
En este capítulo aprenderás estos conceptos básicos. Puede parecer sencillo, pero no lo subestimes: todo programa, por complejo que sea, está hecho de estas piezas fundamentales.
Variables y asignación
Imagina que tienes un cajón donde guardas cosas. Para encontrarlas fácilmente, le pones una etiqueta con un nombre descriptivo: “facturas”, “fotos”, “llaves”… En programación, una variable funciona exactamente igual: es un nombre que le das a un dato para poder usarlo después.
La belleza de Python es que no necesitas decirle qué tipo de cosa vas a guardar. Simplemente le das un nombre, le asignas un valor, y Python se encarga del resto.
1# Asignación de variables
2nombre = "Ana"
3edad = 25
4altura = 1.75
5es_estudiante = TrueReglas para nombres de variables
- Deben empezar con una letra o guión bajo (
_) - Solo pueden contener letras, números y guiones bajos
- Son sensibles a mayúsculas:
nombreyNombreson diferentes - No pueden ser palabras reservadas de Python (
if,for,class, etc.)
1# Nombres válidos
2mi_variable = 1
3_privada = 2
4camelCase = 3
5CONSTANTE = 4
6
7# Nombres NO válidos (generarían error)
8# 2variable = 5 # No puede empezar con número
9# mi-variable = 6 # No puede contener guiones
10# class = 7 # Es palabra reservadaTipos de datos básicos
No toda la información es igual. Piensa en las diferentes cosas que guardas en tu casa: la ropa va en el armario, la comida en la nevera, los libros en la estantería… Cada tipo de cosa necesita su “contenedor” adecuado.
En programación ocurre lo mismo. Los tipos de datos son las diferentes “formas” que puede tener la información:
- Números para contar, medir y calcular (tu edad, el precio de algo, la temperatura)
- Texto para palabras y mensajes (tu nombre, una dirección, un correo electrónico)
- Booleanos para respuestas de sí/no (¿está encendido? ¿es mayor de edad?)
Veamos cada uno en detalle:
Los números son probablemente el tipo de dato más intuitivo. Los usas para contar cosas, hacer cálculos, medir… Python distingue entre números enteros y números con decimales.
Enteros (int)
1x = 42
2y = -17
3z = 0
4grande = 1_000_000 # Se pueden usar guiones bajos para legibilidadFlotantes (float)
1pi = 3.14159
2temperatura = -40.5
3cientifico = 1.5e-10 # Notación científicaEl texto es fundamental: nombres, mensajes, direcciones, contraseñas… todo lo que escribes es texto. En programación se llaman cadenas de texto (strings) porque son una “cadena” de caracteres uno detrás de otro.
Cadenas de texto (str)
1saludo = "Hola, mundo"
2nombre = 'También con comillas simples'
3multilinea = """
4Este texto
5tiene varias
6líneas
7"""Operaciones con cadenas
1texto = "Python"
2print(len(texto)) # 6 - longitud
3print(texto.upper()) # PYTHON
4print(texto.lower()) # python
5print(texto[0]) # P - primer carácter
6print(texto[-1]) # n - último carácter
7print(texto[0:3]) # Pyt - subcadenaLos booleanos son el tipo más simple: solo pueden ser verdadero (True) o falso (False). Son como un interruptor de luz: encendido o apagado, sin términos medios.
Aunque parezcan simples, son fundamentales. Cada vez que tu programa tiene que tomar una decisión ("¿es el usuario mayor de edad?", “¿hay productos en el carrito?”), usa booleanos.
Valores booleanos (bool)
1activo = True
2completado = False
3
4# Resultados de comparaciones
5es_mayor = 5 > 3 # True
6es_igual = 10 == 10 # True
7es_diferente = "a" != "b" # TrueEl valor None
A veces necesitas decir “esto no tiene valor” o “aún no sé qué valor tendrá”. Es como cuando en un formulario un campo está vacío: no es que tenga un espacio en blanco, es que no tiene nada.
Para esto existe None: representa la ausencia de valor.
1resultado = None
2
3def sin_retorno():
4 print("Esta función no devuelve nada")
5 # Implícitamente devuelve None
6
7valor = sin_retorno()
8print(valor) # NoneVerificar el tipo de una variable
1x = 42
2print(type(x)) # <class 'int'>
3
4y = "texto"
5print(type(y)) # <class 'str'>
6
7# Verificar si es de un tipo específico
8print(isinstance(x, int)) # True
9print(isinstance(y, str)) # TrueOperadores
Los operadores son los símbolos que usas para hacer cosas con los datos: sumar, restar, comparar, combinar condiciones… Ya conoces la mayoría de las matemáticas del colegio, así que esto te resultará familiar.
Operadores aritméticos
Son las operaciones matemáticas de toda la vida, más algunas extras muy útiles en programación:
| Operador | Descripción | Ejemplo | Resultado |
|---|---|---|---|
| + | Suma | 5 + 3 | 8 |
| - | Resta | 5 - 3 | 2 |
| * | Multiplicación | 5 * 3 | 15 |
| / | División | 5 / 3 | 1.666… |
| // | División entera | 5 // 3 | 1 |
| % | Módulo (resto) | 5 % 3 | 2 |
| ** | Potencia | 5 ** 3 | 125 |
1# Ejemplos prácticos
2a, b = 17, 5
3
4print(f"División: {a / b}") # 3.4
5print(f"División entera: {a // b}") # 3
6print(f"Resto: {a % b}") # 2
7print(f"Potencia: {2 ** 10}") # 1024Operadores de comparación
Estos operadores hacen preguntas y devuelven respuestas de sí/no (True o False). Son la base para que tu programa pueda tomar decisiones: “¿es el usuario mayor de edad?”, “¿tiene suficiente dinero?”…
| Operador | Descripción |
|---|---|
| == | Igual a |
| != | Diferente de |
| < | Menor que |
| > | Mayor que |
| <= | Menor o igual |
| >= | Mayor o igual |
1x = 10
2
3print(x == 10) # True
4print(x != 5) # True
5print(x > 5) # True
6print(x <= 10) # TrueOperadores lógicos
Aquí es donde la cosa se pone interesante. En la vida real, a menudo combinas condiciones:
- “Puedo salir a jugar si termino la tarea Y está soleado”
- “Voy al cine si hay entradas O puedo verla en streaming”
- “Voy a la playa si NO llueve”
Los operadores lógicos hacen exactamente eso:
| Operador | Significado | Ejemplo de la vida real |
|---|---|---|
| and | Ambas deben cumplirse | “Tiene 18 años Y tiene carnet” |
| or | Al menos una debe cumplirse | “Es niño O es jubilado” |
| not | Invierte la condición | “NO está lloviendo” |
1edad = 25
2tiene_carnet = True
3
4# Puede conducir si tiene al menos 18 años Y tiene carnet
5puede_conducir = edad >= 18 and tiene_carnet
6print(puede_conducir) # True
7
8# Acceso gratuito para menores de 12 O mayores de 65
9acceso_gratis = edad < 12 or edad > 65
10print(acceso_gratis) # False
11
12# Negación
13esta_lloviendo = False
14puedo_salir = not esta_lloviendo
15print(puedo_salir) # TrueEstructuras de control
Hasta ahora, tu código se ejecuta línea por línea, de arriba a abajo, sin desviarse. Pero los programas reales necesitan tomar decisiones y repetir tareas. Eso es exactamente lo que hacen las estructuras de control.
Condicionales: if, elif, else
Imagina que estás caminando y llegas a una bifurcación en el camino. Según alguna condición (¿está lloviendo? ¿hay obras?), eliges un camino u otro.
graph TD
A["¿Llueve?"] -->|Sí| B["Coge paraguas"]
A -->|No| C["Sal sin paraguas"]
B --> D["Sal de casa"]
C --> DEn Python, esto se hace con if (si), elif (si no, pero si…) y else (si no):
1nota = 75
2
3if nota >= 90:
4 print("Sobresaliente")
5elif nota >= 70:
6 print("Notable")
7elif nota >= 50:
8 print("Aprobado")
9else:
10 print("Suspenso")En Python, la indentación (espacios al inicio de línea) es obligatoria y define los bloques de código. Se recomienda usar 4 espacios por nivel.
Operador ternario
Para condiciones simples en una línea:
1edad = 20
2estado = "adulto" if edad >= 18 else "menor"
3print(estado) # adultoBucle for
Imagina que tienes 10 camisetas que doblar. No escribirías “dobla camiseta 1, dobla camiseta 2, dobla camiseta 3…” diez veces. Dirías: “Para cada camiseta de la pila: dóblala”.
El bucle for hace exactamente eso: repite un bloque de código para cada elemento de una secuencia:
1# Iterar sobre una lista
2frutas = ["manzana", "banana", "cereza"]
3for fruta in frutas:
4 print(f"Me gusta la {fruta}")
5
6# Iterar un rango de números
7for i in range(5):
8 print(i) # 0, 1, 2, 3, 4
9
10# range con inicio, fin y paso
11for i in range(0, 10, 2):
12 print(i) # 0, 2, 4, 6, 8Bucle while
A diferencia del for, el bucle while no sabe de antemano cuántas veces se repetirá. Simplemente dice: “Mientras esta condición sea verdadera, sigue repitiendo”.
Es como decir: “Sigue estudiando mientras no entiendas el tema” o “Sigue llamando mientras no contesten”.
1contador = 0
2while contador < 5:
3 print(f"Contador: {contador}")
4 contador += 1Asegúrate de que la condición del while eventualmente sea falsa, o el programa nunca terminará.
Control de bucles: break y continue
A veces necesitas más control sobre tus bucles:
break: “¡Para! Sal del bucle ahora mismo” (como encontrar lo que buscabas y dejar de buscar)continue: “Salta este elemento y pasa al siguiente” (como saltarte una canción que no te gusta)
1# break: sale del bucle completamente
2for i in range(10):
3 if i == 5:
4 break
5 print(i) # 0, 1, 2, 3, 4
6
7# continue: salta a la siguiente iteración
8for i in range(5):
9 if i == 2:
10 continue
11 print(i) # 0, 1, 3, 4Conversión de tipos
A veces tienes un dato de un tipo pero necesitas que sea de otro. El ejemplo más común: cuando un usuario escribe algo en un formulario web, siempre llega como texto. Si escribió “25” y tú quieres calcular su edad dentro de 10 años, necesitas convertir ese “25” (texto) a 25 (número).
Python te permite convertir entre tipos fácilmente:
1# A entero
2x = int("42") # De string a int: 42
3y = int(3.7) # De float a int: 3 (trunca)
4
5# A flotante
6a = float("3.14") # De string a float: 3.14
7b = float(5) # De int a float: 5.0
8
9# A string
10s = str(42) # "42"
11t = str(3.14) # "3.14"
12
13# A booleano
14bool(1) # True (cualquier número != 0)
15bool(0) # False
16bool("") # False (cadena vacía)
17bool("algo") # True (cadena no vacía)Ejercicios prácticos
Escribe un programa que pida la edad al usuario y muestre:
- “Niño” si tiene menos de 12 años
- “Adolescente” si tiene entre 12 y 17 años
- “Adulto” si tiene entre 18 y 64 años
- “Jubilado” si tiene 65 años o más
Crea un programa que pida un número y muestre su tabla de multiplicar del 1 al 10.
Escribe un programa que determine si un número es primo (solo divisible por 1 y por sí mismo).