🐍 Curso Python · Nivel N1 Principiante

Bloque 1: Tu primer programa

Monto tu entorno desde cero: instalar Python 3, usar la terminal, escribir en VS Code y ejecutar tu primer print(). Después dominarás variables y tipos, la entrada del usuario, condicionales y bucles — los ladrillos de todo programa. Sin experiencia previa: empiezas aquí y en unas horas ya programas de verdad.

⏱ ≈ 15 horas 📚 5 lecciones ✍️ 15 ejercicios guiados 📝 Examen del bloque + laboratorio
Lección 1 · Teoría

Instalación y primer programa

Python es un lenguaje de programación de alto nivel, interpretado, con una sintaxis tan legible que casi se lee como inglés. Se usa en todo: scripts, automatización, ciencia de datos, inteligencia artificial, desarrollo web y videojuegos. Es el lenguaje perfecto para empezar porque dejas de pelear con la sintaxis y te centras en resolver problemas.

1.1 · Instalar Python 3

Descarga el instalador desde la web oficial python.org/downloads y ejecútalo. Marca la casilla «Add Python to PATH» — es imprescindible para poder llamar a python desde la terminal.

Verifica abriendo una terminal (CMD/PowerShell en Windows, Terminal en macOS/Linux) y escribiendo python --version. Deberías ver algo como Python 3.13.2.

Linux/macOS ya traen Python, pero asegúrate de que sea la versión 3: escribe python3 o python --version.

⚠️ La versión 2 (python2) está obsoleta desde 2020. Todo este curso usa Python 3. Si al escribir print "hola" (sin paréntesis) te da error, es que estás mezclando estilos o ejecutando Python 2: en Python 3 print siempre se llama como función, print("hola").

1.2 · La terminal: tu nuevo mejor amigo

La terminal ejecuta tu código. El REPL (Read–Eval–Print Loop) es el modo interactivo: si escribes python a secas, Python te invita con >>> y ejecuta cada línea al instante:

REPL interactivo — comandos que se ejecutan al instante
# terminal
$ python
>>> 2 + 2
4
>>> print("Hola mundo")
Hola mundo
>>> exit()

El REPL es ideal para experimentar. Pero los programas reales viven en ficheros con extensión .py y se ejecutan con python nombre.py.

💡 Cada bloque del curso tendrás una carpeta de trabajo, por ejemplo python-b1/. Guarda un archivo por ejercicio. Programa primero en pequeño y ejecuta a menudo: ese ciclo escribir → ejecutar → corregir es cómo se aprende de verdad.

1.3 · VS Code: el editor recomendado

Visual Studio Code es el editor más popular para Python. Instala la extensión oficial Python (Microsoft): te dará resaltado de sintaxis, autocompletado y avisos de errores al escribir. Otros editores válidos: PyCharm, Sublime Text o incluso un bloc de notas.

1.4 · Tu primer programa

Todo curso de programación empieza aquí. Crea un archivo hola.py y escribe:

hola.py
print("Hola, mundo")
print("Este es mi primer programa en Python")
ejecutar desde la terminal
$ python hola.py
Hola, mundo
Este es mi primer programa en Python

1.5 · Comentarios y documentación

Los comentarios empiezan con # y Python los ignora. Sirven para explicar por qué haces algo (el qué ya lo dice el código):

comentarios en Python
# Esto es un comentario de una línea
print("Hola")  # los comentarios pueden ir al final de una línea

"""
También existen los comentarios de varias líneas.
Se escriben con comillas triples, aunque en realidad
son cadenas de texto que no se asignan a nada.
"""
🎉 Ya tienes tu primer programa funcionando. Ahora vamos a darle vida: variables y tipos de datos, la forma en que Python guarda y usa la información.
Lección 2 · Teoría

Variables y tipos de datos

Una variable es una caja con nombre donde guardas un valor. A diferencia de otros lenguajes, en Python no declaras el tipo: tú asignas el valor y Python deduce el tipo. Se dice que es tipado dinámico.

asignar variables
nombre = "Ana"        # str: texto
edad = 25             # int: número entero
altura = 1.72         # float: número decimal
es_estudiante = True   # bool: True o False

print(nombre, edad, altura, es_estudiante)

2.1 · Reglas de nombres

  • Empiezan con una letra o guion bajo: nombre, _privado.
  • No pueden tener espacios ni guiones: usa snake_case (edad_usuario).
  • Son sensibles a mayúsculas: Edad y edad son diferentes.
  • No pueden ser palabras reservadas (if, for, class...).
💡 PEP8, la guía de estilo oficial, manda usar snake_case para variables (total_precio) y nombres descriptivos (edad_usuario mejor que x). Tu yo del futuro te lo agradecerá.

2.2 · Tipos fundamentales

TipoEjemploQué es
int42Número entero
float3.14Número decimal
str"hola"Cadena de texto
boolTrueVerdadero o falso
NoneNone«Sin valor» (el nulo de Python)

Puedes preguntarle a Python de qué tipo es algo con la función type():

descubrir el tipo
print(type(42))        # <class 'int'>
print(type(3.14))      # <class 'float'>
print(type("Python"))  # <class 'str'>
print(type(True))       # <class 'bool'>

2.3 · F-strings: insertar valores en texto

La forma moderna y limpia de combinar texto y variables son las f-strings: una letra f delante de las comillas y {variable} dentro:

interpolación con f-strings
nombre = "Luis"
edad = 30
print(f"Me llamo {nombre} y tengo {edad} años")
print(f"El triple de 5 es {5 * 3}")   # puedes poner expresiones
resultado
Me llamo Luis y tengo 30 años
El triple de 5 es 15
⚠️ No confundas las comillas: un texto se escribe con " o '. Si mezclas tipos (sumar un int con un str) Python lanza un error TypeError. Por eso existen las conversiones, que verás en la siguiente lección.
💡 Puedes asignar varias variables a la vez: a, b = 10, 20 asigna a=10 y b=20. Y para intercambiar dos valores, Python tiene un truco famoso: a, b = b, a.
Lección 3 · Teoría

Entrada de usuario y operadores

Un programa que solo muestra texto es aburrido. Con input() pides datos al usuario. Con los operadores los procesas.

3.1 · input() siempre devuelve texto

preguntar al usuario
nombre = input("¿Cómo te llamas? ")
print(f"Hola, {nombre}, encantado de conocerte")
⚠️ input() siempre devuelve una cadena (str), aunque el usuario escriba un número. Para operar matemáticamente con él hay que convertirlo: int(), float() o str().

3.2 · Conversiones de tipo

convertir tipos
precio_texto = input("¿Precio? ")   # llega como str, p. ej. "9.99"
precio = float(precio_texto)          # ahora es un número decimal
cantidad = int(input("¿Cuántas unidades? "))
total = precio * cantidad
print(f"Total: {total:.2f} €")         # .2f = 2 decimales

3.3 · Operadores aritméticos

OperadorOperaciónEjemploResultado
+Suma / concatena textos7 + 310
-Resta7 - 34
*Multiplicación7 * 321
/División (siempre decimal)7 / 23.5
//División entera7 // 23
%Módulo (resto)7 % 21
**Potencia2 ** 38
💡 El operador % (resto) es la clave para saber si un número es par (n % 2 == 0), para rotar listas, para agrupar por decenas... Es una de las herramientas más usadas en algoritmos.

3.4 · Operadores de comparación y lógicos

Las comparaciones siempre devuelven un bool (True o False):

comparaciones y lógica
edad = int(input("Tu edad: "))
print(edad >= 18)   # True si es mayor o igual de edad
print(edad != 18)   # True si no tiene exactamente 18

# Lógicos: and, or, not
print(edad >= 18 and edad < 65)  # ambas deben cumplirse
print(edad < 12 or edad > 80)   # basta una
print(not edad < 18)           # niega el resultado
OperadorSignificado
==Igual que
!=Distinto de
> < >= <=Mayor, menor, mayor/igual, menor/igual
and / or / notY / O / Negación
⚠️ ¡== compara y = asigna! edad = 18 guarda el valor; edad == 18 pregunta si es 18. Es el error número uno de las personas que empiezan.
Lección 4 · Teoría

Condicionales if · elif · else

Los condicionales hacen que tu programa tome decisiones. La sintaxis de Python es única por dos motivos: los bloques se delimitan con dos puntos (:) y la indentación (sangría) es obligatoria — 4 espacios por nivel.

4.1 · if / elif / else

estructura básica
edad = int(input("¿Cuántos años tienes? "))

if edad < 12:
    print("Eres un niño")
elif edad < 18:
    print("Eres adolescente")
elif edad < 65:
    print("Eres adulto")
else:
    print("Eres mayor")
⚠️ La indentación no es opcional: es parte de la sintaxis. Todo el bloque del if debe estar sangrado con la misma cantidad de espacios. Mezclar espacios y tabuladores produce IndentationError. VS Code inserta espacios por ti al pulsar Tab.

4.2 · Condiciones compuestas

and / or / in
usuario = input("Usuario: ").strip().lower()
clave = input("Clave: ")

if usuario == "admin" and clave == "secreto123":
    print("Bienvenido, administrador")
elif usuario in ("invitado", "demo"):
    print("Puedes entrar a la zona pública")
else:
    print("Acceso denegado")
💡 strip() elimina espacios sobrantes alrededor del texto y .lower() lo pasa a minúsculas. Con eso, “Admin”, “ ADMIN ” y “admin” se tratan igual. En el ejercicio 12 lo verás en práctica.

4.3 · Truthiness

En Python, casi cualquier valor se puede interpretar como True o False.

  • Falsy (se comportan como False): 0, 0.0, "", [], None, False.
  • Truthy (casi todo lo demás): números distintos de 0, textos no vacíos...
comprobar si hay contenido sin comparar
nombre = input("Nombre: ")
if nombre:                    # equivale a: if nombre != ""
    print(f"Hola, {nombre}")
else:
    print("No escribiste nada")
🎉 Con condicionales tu programa decide. Ahora la joya de la corona de este bloque: repetir tareas con bucles.
Lección 5 · Teoría

Bucles while y for

Los bucles repiten un bloque mientras se cumpla una condición (while) o tantas veces como elementos haya (for). Son la base de la automatización.

5.1 · while: repite mientras sea cierto

contador con while
contador = 1
while contador <= 5:
    print(f"Vuelta número {contador}")
    contador += 1   # es lo mismo que contador = contador + 1
⚠️ ¡Cuidado con el bucle infinito! Si olvidas incrementar contador, la condición nunca deja de ser cierta y el programa no termina. Las variables que controlan la salida SIEMPRE deben cambiar dentro del bucle.

5.2 · for y range: repetir un número fijo de veces

range(inicio, fin, paso) genera una secuencia. El fin nunca se incluye (igual que for (i=0; i<5; ...) en otros lenguajes):

rangos
for i in range(5):                 # 0, 1, 2, 3, 4
    print(i)

for i in range(1, 6):              # 1, 2, 3, 4, 5
    print(i)

for i in range(10, 0, -2):      # 10, 8, 6, 4, 2
    print(i)

5.3 · Recorrer textos

Una cadena es una secuencia de caracteres, así que for la recorre letra a letra:

recorrer un string
palabra = "Python"
for letra in palabra:
    print(letra)
salida
P
y
t
h
o
n

5.4 · break y continue

break — sale del bucle por completo
continue — salta a la siguiente vuelta
else (en un bucle) — se ejecuta solo si el bucle terminó sin break
menú que termina con "salir"
while True:
    opcion = input("opción (1, 2 o salir): ")
    if opcion == "salir":
        break                    # termina el bucle
    if opcion not in ("1", "2"):
        continue                  # ignora la vuelta y pregunta otra vez
    print(f"Elegiste la opción {opcion}")

print("Fin del programa")
💡 while True: con un break dentro es el patrón clásico de menús: pedimos una opción, la procesamos y repetimos hasta que el usuario decide salir.

5.5 · Acumuladores: la base de los totales

Un acumulador es una variable que va sumando en cada vuelta. Con él calculamos media, totales y sumatorios:

sumar los 10 primeros números
total = 0
for i in range(1, 11):
    total += i              # total = total + i
print(total)               # 55
🎉 Bloque 1 completado: instalaste Python, conoces variables y tipos, pides datos, tomas decisiones con if y repites con while y for. Ya tienes la base de TODO. Ahora a machacar con los 15 ejercicios.
Manos a la obra

✍️ Los 15 ejercicios del bloque

Crea la carpeta python-b1/ y un archivo .py por ejercicio. Ejecútalos de esta forma: python ejercicios.py. Empieza cada programa con un # comentario indicando el ejercicio.

Sección A · Primeros pasos

1 Presentación en pantalla

Escribe un programa que muestre tu nombre, tu edad y tu ciudad en tres líneas separadas, usando un print() por línea. Añade un comentario al inicio explicando qué hace el programa.

Ver solución
# Mi primera presentación
print("Me llamo Raúl")
print("Tengo 28 años")
print("Vivo en Madrid")

2 Un solo print, varias líneas

Muestra la misma presentación del ejercicio 1 usando un único print() y el carácter de escape \n (salto de línea) dentro del texto.

Ver solución
print("Me llamo Raúl\nTengo 28 años\nVivo en Madrid")

3 Área de un rectángulo

Declara dos variables base = 8 y altura = 5, calcula el área (base * altura) y muéstrala con una f-string que diga: El área del rectángulo es 40.

Ver solución
base = 8
altura = 5
area = base * altura
print(f"El área del rectángulo es {area}")

4 Intercambio de variables

Dadas a = 5 y b = 10, intercambia sus valores de forma que a valga 10 y b valga 5, y muéstralos. Usa el truco de doble asignación.

Ver solución
a = 5
b = 10
a, b = b, a
print(a, b)  # 10 5

Sección B · Entrada del usuario

5 Saludador personal

Pide el nombre y la ciudad del usuario con input() y responde con una f-string: Hola, {nombre}, de {ciudad}.

Ver solución
nombre = input("¿Cómo te llamas? ")
ciudad = input("¿De dónde eres? ")
print(f"Hola, {nombre}, de {ciudad}")

6 Año de nacimiento

Pide la edad mediante input(), conviértela a entero y calcula el año de nacimiento aproximado (2026 − edad). Muestra el resultado con una f-string.

Ver solución
edad = int(input("¿Cuántos años tienes? "))
anio_nacimiento = 2026 - edad
print(f"Naciste aproximadamente en {anio_nacimiento}")

7 Calculadora de propina

Pide el importe de la cuenta, conviértelo a float y calcula una propina del 10 % (importe * 0.10). Muestra la propina con exactamente 2 decimales usando :.2f.

Ver solución
importe = float(input("Importe de la cuenta: "))
propina = importe * 0.10
print(f"Propina sugerida: {propina:.2f} €")

8 Par o impar

Pide un número entero y muestra par o impar usando el operador módulo (%) dentro de un if.

Ver solución
n = int(input("Dame un número: "))
if n % 2 == 0:
    print("par")
else:
    print("impar")

Sección C · Condicionales y lógica

9 Mayor de tres

Pide tres números enteros e imprime cuál es el mayor. Pista: compara con if anidados o encadena condiciones con and.

Ver solución
a = int(input("Número 1: "))
b = int(input("Número 2: "))
c = int(input("Número 3: "))
if a >= b and a >= c:
    print(f"El mayor es {a}")
elif b >= a and b >= c:
    print(f"El mayor es {b}")
else:
    print(f"El mayor es {c}")

10 Clasificación de edad

Pide una edad y clasifícala: < 0 → dato inválido, 0–12 → niño, 13–17 → adolescente, 18–64 → adulto, 65+ → mayor. Encadena elif y cierra con else.

Ver solución
edad = int(input("Edad: "))
if edad < 0:
    print("Dato inválido")
elif edad <= 12:
    print("niño")
elif edad <= 17:
    print("adolescente")
elif edad <= 64:
    print("adulto")
else:
    print("mayor")

11 Rango de notas

Pide una nota de 0 a 10 y muestra su calificación: 9–10 Sobresaliente, 7–8 Notable, 6 Bien, 5 Aprobado, 0–4 Suspenso. Si la nota está fuera de 0–10, muestra «nota inválida».

Ver solución
nota = float(input("Nota (0-10): "))
if nota < 0 or nota > 10:
    print("nota inválida")
elif nota >= 9:
    print("Sobresaliente")
elif nota >= 7:
    print("Notable")
elif nota >= 6:
    print("Bien")
elif nota >= 5:
    print("Aprobado")
else:
    print("Suspenso")

12 Login con validación

Pide usuario y contraseña. Usa .strip() y .lower() en el usuario. Si es admin y la clave es 1234, muestra «acceso concedido»; si no, «acceso denegado».

Ver solución
usuario = input("Usuario: ").strip().lower()
clave = input("Clave: ")
if usuario == "admin" and clave == "1234":
    print("acceso concedido")
else:
    print("acceso denegado")

Sección D · Bucles

13 Tabla de multiplicar

Pide un número y muestra su tabla de multiplicar del 1 al 10 usando for + range. Formato: 5 x 3 = 15.

Ver solución
n = int(input("Tabla del: "))
for i in range(1, 11):
    print(f"{n} x {i} = {n * i}")

14 Suma hasta cero

Con while, pide números y ve sumándolos. Cuando el usuario escriba 0, termina y muestra el total acumulado.

Ver solución
total = 0
numero = int(input("Número (0 para terminar): "))
while numero != 0:
    total += numero
    numero = int(input("Número (0 para terminar): "))
print(f"El total es {total}")

15 Cuenta atrás con continue

Usa range(10, 0, -1) para contar del 10 al 1, pero salta el número 5 con continue. Después imprime «¡Despegue!».

Ver solución
for i in range(10, 0, -1):
    if i == 5:
        continue
    print(i)
print("¡Despegue!")

16 🏆 Proyecto integrador: «calculadora de triángulos»

Crea triangulo.py: una mini calculadora que pide la base y la altura de un triángulo y muestra su área. Después pregunta si quiere calcular otro. Si responde s, repite; cualquier otra cosa, termina. Requisitos:

  • Convertir la entrada con float().
  • Calcular el área con la fórmula (base * altura) / 2.
  • Mostrar el resultado con :.2f.
  • Repetir con un while y salir con break.
  • Comentar con # las secciones principales.
Ver una solución posible
# Calculadora de áreas de triángulos
while True:
    # Pedimos los datos y los convertimos a decimal
    base = float(input("Base del triángulo: "))
    altura = float(input("Altura del triángulo: "))

    # Cálculo del área
    area = (base * altura) / 2
    print(f"El área es {area:.2f}")

    # ¿Repetir?
    otra = input("¿Calcular otro? (s/n): ").strip().lower()
    if otra != "s":
        break

print("¡Hasta pronto!")
Evaluación del bloque

📝 Examen del Bloque 1

Dos partes: un test teórico autoevaluable (mínimo 70 %) y un reto práctico de autocorrección con laboratorio.

Parte A · Test teórico (aprueba con 11/15)

1 · ¿Qué comando verifica la instalación de Python?
2 · En Python, un bloque de código dentro de un if se delimita por…
3 · ¿Qué devuelve siempre input()?
4 · ¿Qué resultado da 17 // 5?
5 · ¿Qué operador devuelve el resto de una división?
6 · ¿Cómo sabes el tipo de una variable en tiempo de ejecución?
7 · ¿Cuál es la forma correcta de interpolar variables en un texto?
8 · ¿Qué hace range(3)?
9 · ¿Qué palabra clave sale inmediatamente de un bucle?
10 · ¿Qué diferencia hay entre = y ==?
11 · ¿Cuál de estos valores es «falsy» en Python?
12 · ¿Qué extensión tienen los programas de Python?
13 · ¿Para qué sirve continue dentro de un bucle?
14 · ¿Qué imprime: print(2 ** 3)?
15 · ¿Cuál es el comentario correcto de una línea?

Parte B · Reto «perfil del usuario»

Crea perfil.py: un programa que pide nombre, edad y ciudad, muestra un resumen con una f-string, y después un pequeño menú while que repite un mensaje hasta que se escriba salir. Valida tú mismo/a estos criterios. Mínimo para aprobar: 6 de 8 casillas.

Cumplidos: 0 / 8

🎉 ¿Superaste las dos partes? Enhorabuena: tu primer bloque de Python está completo. Ya instalas Python, usas variables, pides datos, decides con if y repites con bucles. En el bloque 2 subiremos un nivel con las estructuras de datos. 🐍🔥