Python para Principiantes: Tu Primer Programa

Variables, condicionales, bucles, funciones, listas y diccionarios explicados desde cero, con un proyecto real al final

Python tiene pocas reglas comparado con otros lenguajes, pero al principio no siempre está claro qué necesitas aprender para pasar de "hola mundo" a algo que haga cosas de verdad. Esta página va al grano: variables, condicionales, bucles, funciones, listas y diccionarios — lo mínimo para escribir un programa con lógica real. Si llegas aquí porque te quedaste clavado en el tutorial de backend con Flask, con esto tienes de sobra para volver y seguirlo sin atascarte en la sintaxis.

Al final montamos un gestor de tareas por consola — el mismo concepto que luego puedes construir como API web con Flask, pero sin servidor ni base de datos de por medio. Primero hay que andar.

Instalar Python

Si ya tienes Python instalado (lo necesitarás también para el tutorial de Flask), sáltate este paso. Si no, ve a python.org y descarga la versión más reciente — a día de hoy la recomendación mínima razonable es Python 3.10, porque las versiones anteriores ya se han quedado sin soporte de seguridad.

Abre una terminal y comprueba que se instaló bien:

Terminal 📋
python --version

Error frecuente: en Mac y Linux el comando puede ser python3 en vez de python. Si el primero da "command not found", prueba con el otro y usa ese mismo de forma consistente en todo lo que sigue.

Tu primer programa

Crea un archivo llamado practica.py en cualquier carpeta y escribe esto:

Python — practica.py 📋
print("¡Hola! Esto ya es Python funcionando 🐍")

Ejecútalo desde la terminal, en la misma carpeta donde guardaste el archivo:

Terminal 📋
python practica.py

print() es la función que usarás constantemente para ver qué está pasando dentro de tu programa mientras lo escribes. Ojo, este archivo lo vamos a ir reescribiendo entero en cada sección — no hace falta que guardes las versiones anteriores.

Variables: cajas con nombre

Una variable es una caja etiquetada donde guardas un valor para usarlo después. En Python no hace falta decir de qué tipo es la caja — Python lo deduce solo con lo que metas dentro:

Python — tipos básicos 📋
nombre = "Marta"          # str — texto, siempre entre comillas
edad = 28                 # int — número entero
altura = 1.68             # float — número con decimales
esta_activa = True       # bool — solo True o False

print(f"{nombre} tiene {edad} años")

Esa última línea es un f-string: pones una f antes de las comillas y metes variables entre llaves dentro del texto. Es la forma normal de construir mensajes con datos variables en Python — la verás todo el rato en el tutorial de Flask cuando devuelvas respuestas.

Error frecuente: mezclar texto y número directamente con + revienta el programa. "Tienes " + 28 lanza TypeError: can only concatenate str (not "int") to str. O usas f-strings, o conviertes el número a texto explícitamente con str(28).

Condicionales: que el programa decida

Un if ejecuta código solo si se cumple una condición. Aquí es donde tu programa empieza a "pensar":

Python — if / elif / else 📋
edad = 16

if edad >= 18:
    print("Eres mayor de edad")
elif edad >= 16:
    print("Casi, pero todavía no")
else:
    print("Eres menor de edad")

Aquí es donde la mayoría se atasca al venir de otros lenguajes: Python no usa llaves { } para marcar qué código pertenece a cada bloque, usa la indentación — los cuatro espacios delante de cada línea. Si desalineas una línea por error, o el editor mezcla espacios con tabulaciones, Python lanza IndentationError. PyCharm lo indenta solo al pulsar Enter, así que en la práctica rara vez lo tocas a mano.

Bucles: repetir sin copiar y pegar

Cuando necesitas repetir algo un número conocido de veces, usas for:

Python — bucle for 📋
for numero in range(5):
    print(f"Vuelta número {numero}")

Error frecuente: range(5) genera del 0 al 4, no del 1 al 5 — cinco números, empezando en cero. Es la típica confusión "off-by-one" que te hace preguntarte por qué falta la última vuelta.

Cuando no sabes de antemano cuántas veces vas a repetir algo — por ejemplo, "sigue pidiendo datos hasta que el usuario escriba salir" — usas while:

Python — bucle while 📋
contador = 0

while contador < 3:
    print(f"Contador en {contador}")
    contador = contador + 1

El error que más quebraderos de cabeza da con while: si olvidas la línea contador = contador + 1, la condición contador < 3 nunca deja de cumplirse y el programa se queda colgado para siempre. Si te pasa, Ctrl+C en la terminal lo corta.

Funciones: código que reutilizas

Una función agrupa código bajo un nombre para no repetirlo. Se define con def y puede recibir datos (parámetros) y devolver un resultado con return:

Python — funciones 📋
def saludar(nombre):
    return f"¡Hola, {nombre}!"

mensaje = saludar("Carlos")
print(mensaje)

Esto es exactamente lo que estarás haciendo en Flask sin darte cuenta: cada ruta (@app.route(...)) es una función normal de Python que Flask llama automáticamente cuando alguien visita esa URL. Si esto ya te suena de algo, es porque lo viste en el tutorial de backend.

Error frecuente: escribir una función sin return y luego extrañarte de que la variable que la recoge valga None. Sin return explícito, la función no devuelve nada útil.

Listas y diccionarios: donde vive tu información

Una lista guarda varios valores en orden:

Python — listas 📋
frutas = ["manzana", "pera", "kiwi"]

frutas.append("plátano")   # añadir al final
print(frutas[0])          # "manzana" — el índice empieza en 0

for fruta in frutas:
    print(fruta)

Un diccionario guarda datos por clave en vez de por posición — como una ficha con campos etiquetados:

Python — diccionarios 📋
usuario = {
    "nombre": "Marta",
    "edad": 28,
    "activo": True
}

print(usuario["nombre"])   # "Marta"

Un diccionario de Python y un objeto JSON son prácticamente lo mismo: pares de clave y valor. Cuando en el tutorial de Flask veas jsonify(datos), lo único que hace es coger un diccionario como este y convertirlo al formato que entiende el navegador. Si entiendes esto, ya entiendes la mitad de cómo funciona una API.

Proyecto práctico: gestor de tareas por consola

Con lo de arriba ya puedes montar algo con utilidad real: una lista de tareas guardadas como diccionarios dentro de una lista, con un menú que se repite hasta que decidas salir.

Antes de leer el código, dos cosas que van a aparecer y que aún no has visto. La primera: while True es un bucle que nunca tiene condición de parada en la cabecera — se repite indefinidamente hasta que dentro del cuerpo encuentre un break, que lo corta en ese momento. Es la forma habitual de escribir "repite esto hasta que el usuario diga que no". La segunda: enumerate(lista) recorre una lista dándote dos valores a la vez — el índice de la posición y el elemento — para no tener que llevar un contador a mano.

Python — gestor_tareas.py 📋
tareas = []

def añadir_tarea(titulo):
    tareas.append({"titulo": titulo, "completada": False})

def listar_tareas():
    if not tareas:
        print("No hay tareas todavía")
        return
    for indice, tarea in enumerate(tareas):
        estado = "✅" if tarea["completada"] else "❌"
        print(f"{indice}. {estado} {tarea['titulo']}")

def completar_tarea(indice):
    tareas[indice]["completada"] = True

# Menú principal: se repite hasta que el usuario elija salir
while True:
    print("\n1. Añadir  2. Listar  3. Completar  4. Salir")
    opcion = input("Elige una opción: ")

    if opcion == "1":
        añadir_tarea(input("Título de la tarea: "))
    elif opcion == "2":
        listar_tareas()
    elif opcion == "3":
        completar_tarea(int(input("Número de tarea: ")))
    elif opcion == "4":
        break
    else:
        print("Opción no válida")

input() es la función que lee lo que escribe el usuario en la terminal — siempre devuelve texto, por eso hay que envolverla en int() cuando esperas un número.

Error frecuente aquí: si el usuario escribe una letra donde se espera un número (opción 3 con "tres" en vez de "3"), int() lanza ValueError y el programa se cae. Este mismo problema — validar lo que llega del usuario — es literalmente lo primero que vas a mejorar cuando conviertas esto en una API con Flask.

Qué toca ahora

Con variables, condicionales, bucles, funciones, listas y diccionarios ya tienes la base que pide el tutorial de backend. No hace falta que domines nada más de Python antes de seguir — el resto lo vas aprendiendo sobre la marcha, en contexto, que es como se queda mejor.

Vuelve al tutorial de Python Backend con Flask y monta tu primer servidor web. Vas a reconocer el diccionario de la última sección en cuanto lo veas convertido en respuesta JSON.