Tu primer programa en Python: de cero a resolver problemas reales

📅 Actualizado en marzo 2026 📊 Nivel: Principiante ⏱️ 20 min de lectura

Ya tienes Python instalado y VS Code configurado. La pantalla está delante de ti, el cursor parpadea, y ahora viene la gran pregunta: ¿qué escribo? No te preocupes. En esta lección vamos a pasar de mirar una pantalla en blanco a escribir programas que resuelven cosas de verdad. Nada de teoría aburrida sin aplicación: cada concepto que aprendas aquí lo usarás desde el primer minuto.

Vamos a empezar con lo básico — print(), variables, operaciones, input() — y al final de la lección habrás creado una calculadora de propinas que funciona. No está mal para tu tercer día con Python.

🧬 Anatomía de un programa Python

Antes de escribir código, quiero que entiendas cómo se estructura un programa en Python. Porque una de las cosas que más desorienta a los principiantes es no saber «qué va dónde». En otros lenguajes como Java necesitas una clase, un método main, importaciones, llaves por todas partes... En Python, la estructura es brutalmente simple:

calculadora_iva.py
# Calculadora de IVA
# Versión 1.0

precio = 49.99
iva = 0.21

impuesto = precio * iva
total = precio + impuesto

print(f"Precio: {precio}€")
print(f"IVA (21%): {impuesto:.2f}€")
print(f"Total: {total:.2f}€")

Eso es un programa Python completo. 10 líneas. Sin ceremonias, sin configuración, sin boilerplate. Lo ejecutas y funciona. Vamos a desglosar cada parte.

Infografía: anatomía de un programa Python con comentarios, variables, operaciones, print e input
Las partes de un programa Python: comentarios, variables, operaciones, salida y entrada. Infografía: Ciberaula.

🖨️ print(): tu primera herramienta

print() es la función más importante cuando empiezas a programar. Hace exactamente lo que su nombre dice: imprime texto en la pantalla. Es tu forma de ver qué está pasando dentro del programa.

ejemplos_print.py
# Lo más básico: imprimir texto
print("Hola, Mundo")

# Imprimir números
print(42)
print(3.14159)

# Imprimir varias cosas separadas por espacio
print("Tengo", 25, "años")

# Línea vacía (útil para separar visualmente)
print()

# Imprimir el resultado de una operación
print(2 + 2)       # Muestra: 4
print(10 * 3)      # Muestra: 30

Un par de cosas que debes saber sobre print():

El texto va entre comillas (simples 'texto' o dobles "texto"). Ambas funcionan igual en Python. Yo uso dobles por costumbre, pero es cuestión de preferencia.

Los números van sin comillas. Si pones comillas alrededor de un número, Python lo trata como texto, no como número. Parece un detalle menor, pero es la fuente de muchos errores de principiante.

Puedes separar varios elementos con comas. Python los imprime separados por un espacio automáticamente.

💡 El truco del print() para depurar
Cuando tu programa no hace lo que esperas, pon print() por todas partes para ver qué valor tiene cada variable en cada momento. Es la técnica de depuración más antigua del mundo y sigue siendo la más usada. Los profesionales la llaman «printf debugging» y no se avergüenzan de ella.

💬 Comentarios: hablar con tu yo del futuro

Los comentarios son líneas que Python ignora completamente. Empiezan con # y sirven para una sola cosa: explicar el código a los humanos. Y el humano más importante al que le estás escribiendo es tu yo de dentro de tres meses, cuando vuelvas a mirar este código y no recuerdes por qué hiciste lo que hiciste.

comentarios.py
# Esto es un comentario de línea completa

precio = 49.99  # También puedes comentar al final de una línea

# Los comentarios son para explicar el POR QUÉ, no el QUÉ.
# MAL:  precio = 49.99  # Asigna 49.99 a precio (¡eso ya se ve!)
# BIEN: precio = 49.99  # Precio base sin IVA del plan mensual

Una anécdota que cuento siempre: cuando empecé a programar, nunca ponía comentarios. «El código es obvio», pensaba. Tres semanas después abría un archivo y no entendía nada. Desde entonces, comento todo lo que no es inmediatamente evidente. Te recomiendo hacer lo mismo desde el día uno.

📌 Comentarios multilínea
Python no tiene un símbolo específico para comentarios de varias líneas (como /* */ en Java). Hay dos opciones: poner # en cada línea, o usar triple comillas """texto""". Las triple comillas técnicamente son cadenas de texto que no se asignan a nada, pero se usan como comentarios largos por convención.
Pantalla de ordenador mostrando código de programación con resaltado de sintaxis sobre fondo oscuro
Código con resaltado de sintaxis: los colores ayudan a distinguir cada elemento del programa. Foto: Pexels.

📦 Variables: donde Python guarda las cosas

Una variable es un nombre que le pones a un dato para poder usarlo después. Piénsalo como una etiqueta que pegas en una caja: la caja contiene el valor, y la etiqueta es el nombre que le das para encontrarla.

variables.py
# Crear variables es así de simple
nombre = "María"
edad = 28
altura = 1.72
es_estudiante = True

# Usar las variables
print(nombre)          # María
print(edad)            # 28
print(es_estudiante)   # True

# Las variables pueden cambiar de valor
edad = 29  # Ahora edad vale 29
print(edad)            # 29

# Puedes asignar varias en una línea
x, y, z = 1, 2, 3

Fíjate en algo que en Python es diferente a muchos otros lenguajes: no declaras el tipo. No escribes int edad = 28 ni String nombre = "María". Python lo deduce solo mirando el valor que le asignas. Esto se llama tipado dinámico y es una de las razones por las que Python es tan rápido de escribir.

Reglas para nombrar variables

ReglaEjemplo válidoEjemplo inválidoPor qué
Solo letras, números y guiones bajosmi_variablemi-variableEl guión medio es un operador (resta)
No puede empezar por númerovariable11variablePython lo confunde con un número
No usar palabras reservadasclaseclassclass es una palabra clave de Python
Sensible a mayúsculas/minúsculasNombrenombreSon dos variables diferentes
Convención: snake_casenombre_completonombreCompletocamelCase se usa en Java, no en Python
⚠️ La trampa del = vs ==
Un solo = es asignación: edad = 28 (guarda el valor 28 en la variable edad). Dos == es comparación: edad == 28 (pregunta «¿edad es igual a 28?»). Confundir uno con otro es un error clásico que cometerás al menos una vez. Te lo garantizo.

🧮 Operaciones: Python como calculadora con superpoderes

Python sabe hacer todas las operaciones matemáticas que necesitas, y algunas que no sabías que necesitabas. Aquí van las fundamentales:

OperadorOperaciónEjemploResultado
+Suma10 + 313
-Resta10 - 37
*Multiplicación10 * 330
/División10 / 33.3333...
//División entera10 // 33
%Módulo (resto)10 % 31
**Potencia2 ** 101024
operaciones.py
# Operaciones básicas
print(100 + 50)       # 150
print(100 - 50)       # 50
print(100 * 0.21)     # 21.0
print(100 / 3)        # 33.333...

# División entera vs normal (¡ojo aquí!)
print(7 / 2)          # 3.5 (división normal)
print(7 // 2)         # 3   (descarta decimales)
print(7 % 2)          # 1   (el resto de dividir)

# Potencias
print(2 ** 8)         # 256
print(9 ** 0.5)       # 3.0 (raíz cuadrada)

# Python respeta el orden de operaciones
print(2 + 3 * 4)      # 14, no 20 (primero *, luego +)
print((2 + 3) * 4)    # 20 (paréntesis cambian el orden)

Algo que me parece fascinante: el operador ** para potencias. En la mayoría de lenguajes necesitas importar una biblioteca matemática para calcular potencias. En Python es un operador nativo. Pequeños detalles como este hacen que Python se sienta natural.

Y un truco útil: el operador % (módulo) parece inútil al principio, pero es increíblemente práctico. ¿Quieres saber si un número es par? numero % 2 == 0. ¿Quieres hacer algo cada 5 iteraciones en un bucle? i % 5 == 0. Lo usarás más de lo que imaginas.

⌨️ input(): hacer que el programa escuche

Hasta ahora, nuestros programas hacen cosas pero no le preguntan nada al usuario. Son monólogos. Con input(), el programa se convierte en un diálogo.

input_basico.py
# Pedir datos al usuario
nombre = input("¿Cómo te llamas? ")
print("¡Hola, " + nombre + "!")

# CUIDADO: input() SIEMPRE devuelve texto (str)
edad_texto = input("¿Cuántos años tienes? ")
print(type(edad_texto))  # <class 'str'> ¡Es texto, no número!

# Para hacer operaciones, hay que convertir a número
edad = int(edad_texto)          # Convertir texto → número entero
print("El año que viene tendrás", edad + 1)

Aquí hay una trampa que pilla a todo el mundo al principio: input() siempre devuelve texto. Aunque el usuario escriba 25, para Python eso es la cadena de texto "25", no el número 25. Si intentas sumar "25" + 1, Python te dará un error. Necesitas convertirlo:

ConversiónFunciónEjemploCuándo usarla
Texto → enteroint()int("25")25Edades, cantidades, años
Texto → decimalfloat()float("3.14")3.14Precios, medidas, porcentajes
Número → textostr()str(42)"42"Cuando necesitas concatenar con +
⚠️ ¿Y si el usuario escribe letras donde esperabas un número?
Si el usuario escribe «veinte» en lugar de 20, int("veinte") dará un error (ValueError). Por ahora no te preocupes por esto — aprenderemos a manejar errores más adelante con try/except. De momento, confía en que el usuario escribe lo correcto.

✨ f-strings: mezclar texto y datos como un profesional

Ya has visto que puedes imprimir varias cosas con comas o concatenar con +. Pero hay una forma mucho mejor que se inventó en Python 3.6 y que hoy es el estándar: las f-strings (formatted string literals).

f_strings.py
nombre = "Carlos"
edad = 30
salario = 2850.50

# La forma ANTIGUA (funciona, pero es fea)
print("Me llamo " + nombre + " y tengo " + str(edad) + " años.")

# La forma MODERNA (f-strings) — usa SIEMPRE esta
print(f"Me llamo {nombre} y tengo {edad} años.")

# Puedes hacer operaciones dentro de las llaves
print(f"El año que viene tendré {edad + 1} años.")

# Formatear números con decimales
print(f"Salario: {salario:.2f}€")           # 2850.50€
print(f"Salario: {salario:,.2f}€")          # 2,850.50€

# Alinear texto (útil para tablas)
print(f"{'Producto':<20}{'Precio':>10}")
print(f"{'Teclado':<20}{49.99:>10.2f}")
print(f"{'Monitor':<20}{299.00:>10.2f}")

Las f-strings son, en mi opinión, una de las mejores decisiones de diseño de Python moderno. Compara las dos formas de imprimir el mismo texto: la antigua es un lío de comillas, signos + y conversiones con str(). La f-string es casi lenguaje natural. Solo necesitas acordarte de poner la f antes de las comillas y meter las variables entre {llaves}.

💡 El truco del :.2f para precios
{variable:.2f} formatea un número decimal con exactamente 2 decimales. Perfecto para precios, porcentajes y cualquier dato financiero. Es uno de los formatos que más usarás. :.0f quita todos los decimales, :.4f muestra cuatro decimales.
Mujer trabajando en un portátil en un escritorio con varias pantallas
Escribir código requiere atención al detalle: cada carácter cuenta. Foto: Pexels.

🏗️ Tu primer programa completo

Ya tienes todas las piezas. Es hora de juntarlas. Vamos a crear una calculadora de propinas — un programa que le pregunta al usuario el importe de la cuenta, calcula distintos porcentajes de propina y muestra los resultados formateados.

calculadora_propinas.py
# ================================
# Calculadora de propinas
# Pide el importe y calcula propinas
# al 10%, 15% y 20%
# ================================

# 1. Pedir el importe al usuario
print("=== CALCULADORA DE PROPINAS ===")
print()

cuenta_texto = input("¿Cuánto es la cuenta? (en euros): ")
cuenta = float(cuenta_texto)  # Convertir texto a número decimal

personas_texto = input("¿Cuántas personas sois? ")
personas = int(personas_texto)  # Convertir texto a entero

# 2. Calcular propinas
propina_10 = cuenta * 0.10
propina_15 = cuenta * 0.15
propina_20 = cuenta * 0.20

# 3. Calcular totales
total_10 = cuenta + propina_10
total_15 = cuenta + propina_15
total_20 = cuenta + propina_20

# 4. Mostrar resultados
print()
print(f"Cuenta: {cuenta:.2f}€")
print(f"{'─' * 35}")
print(f"{'Propina':<12}{'Total':<12}{'Por persona'}")
print(f"{'─' * 35}")
print(f"10%: {propina_10:>6.2f}€   {total_10:>7.2f}€   {total_10/personas:>6.2f}€")
print(f"15%: {propina_15:>6.2f}€   {total_15:>7.2f}€   {total_15/personas:>6.2f}€")
print(f"20%: {propina_20:>6.2f}€   {total_20:>7.2f}€   {total_20/personas:>6.2f}€")
print(f"{'─' * 35}")

Si ejecutas este programa e introduces una cuenta de 85€ para 3 personas, verás algo así:

Salida del programa
=== CALCULADORA DE PROPINAS ===

¿Cuánto es la cuenta? (en euros): 85
¿Cuántas personas sois? 3

Cuenta: 85.00€
───────────────────────────────────
Propina     Total       Por persona
───────────────────────────────────
10%:   8.50€    93.50€    31.17€
15%:  12.75€    97.75€    32.58€
20%:  17.00€   102.00€    34.00€
───────────────────────────────────

30 líneas de código y tienes una herramienta útil que puedes sacar la próxima vez que vayas a un restaurante. Eso es lo que me gusta de Python: desde el principio puedes crear cosas que sirven para algo.

Infografía: ciclo de trabajo al programar — pensar, escribir, ejecutar, revisar
El ciclo de programación: pensar, escribir, ejecutar y revisar. Los errores son parte del proceso. Infografía: Ciberaula.

🐛 Los errores más comunes (y cómo leerlos)

Vas a cometer errores. Muchos. Y eso está bien — es literalmente cómo se aprende a programar. Lo importante es aprender a leer los mensajes de error, porque Python te dice exactamente qué ha ido mal.

ErrorQué significaEjemplo típicoSolución
SyntaxErrorEscribiste algo que Python no entiendeFalta un paréntesis, comillas sin cerrarRevisa la línea que indica el error y la anterior
NameErrorUsas una variable que no existeprint(nombr) — falta la «e»Revisa la ortografía del nombre
TypeErrorMezclas tipos incompatibles"Tengo " + 25 + " años"Usa f-strings o convierte con str()
ValueErrorEl valor no es válido para la conversiónint("hola")Asegúrate de que el texto contiene un número
IndentationErrorLa indentación (espacios) está malMezcla de tabs y espaciosUsa siempre 4 espacios (VS Code lo hace solo)
ZeroDivisionErrorDivisión entre cero10 / 0Verifica que el divisor no sea cero

Cuando Python te muestra un error, la información más útil está en la última línea (qué tipo de error es) y en la línea que dice File "..." line X (dónde está el error). Ejemplo:

Mensaje de error típico
Traceback (most recent call last):
  File "mi_programa.py", line 5, in <module>
    print("Tengo " + 25 + " años")
TypeError: can only concatenate str (not "int") to str

Traducido: «En la línea 5 de mi_programa.py, has intentado concatenar un entero (25) con una cadena de texto, y eso no se puede hacer». La solución: usar una f-string (f"Tengo {25} años") o convertir el número ("Tengo " + str(25) + " años").

💡 Los errores NO son fracasos
Los programadores profesionales encuentran errores constantemente. La diferencia es que un principiante se frustra y un profesional lee el mensaje, entiende el problema y lo corrige en 30 segundos. Con práctica, tú harás lo mismo. Cada error que resuelves es un error que nunca volverás a cometer.

✏️ Ejercicios para practicar

La programación se aprende haciendo, no leyendo. Aquí tienes tres ejercicios ordenados de fácil a medio. Intenta resolverlos antes de mirar la solución.

Ejercicio 1: Conversor de temperatura

Escribe un programa que pida al usuario una temperatura en grados Celsius y la convierta a Fahrenheit. La fórmula es: F = C × 9/5 + 32.

Ver solución
conversor_temperatura.py
# Conversor Celsius → Fahrenheit
celsius_texto = input("Temperatura en Celsius: ")
celsius = float(celsius_texto)

fahrenheit = celsius * 9 / 5 + 32

print(f"{celsius}°C = {fahrenheit:.1f}°F")

Ejercicio 2: Calculadora de IMC

Crea un programa que pida peso (en kg) y altura (en metros) y calcule el Índice de Masa Corporal. La fórmula es: IMC = peso / altura².

Ver solución
calculadora_imc.py
# Calculadora de IMC
peso = float(input("Tu peso en kg: "))
altura = float(input("Tu altura en metros (ej: 1.72): "))

imc = peso / altura ** 2

print(f"Tu IMC es {imc:.1f}")

Ejercicio 3: Desglose de monedas

Escribe un programa que pida una cantidad en céntimos (por ejemplo, 347) y calcule cuántas monedas de 2€, 1€, 50c, 20c, 10c, 5c, 2c y 1c necesitas. Pista: usa // y %.

Ver solución
desglose_monedas.py
# Desglose de monedas
centimos = int(input("Cantidad en céntimos: "))
original = centimos  # Guardamos el original para mostrar después

monedas_2e = centimos // 200
centimos = centimos % 200

monedas_1e = centimos // 100
centimos = centimos % 100

monedas_50 = centimos // 50
centimos = centimos % 50

monedas_20 = centimos // 20
centimos = centimos % 20

monedas_10 = centimos // 10
centimos = centimos % 10

monedas_5 = centimos // 5
centimos = centimos % 5

monedas_2 = centimos // 2
centimos = centimos % 2

monedas_1 = centimos

print(f"\nDesglose de {original} céntimos ({original/100:.2f}€):")
print(f"  Monedas de 2€:  {monedas_2e}")
print(f"  Monedas de 1€:  {monedas_1e}")
print(f"  Monedas de 50c: {monedas_50}")
print(f"  Monedas de 20c: {monedas_20}")
print(f"  Monedas de 10c: {monedas_10}")
print(f"  Monedas de 5c:  {monedas_5}")
print(f"  Monedas de 2c:  {monedas_2}")
print(f"  Monedas de 1c:  {monedas_1}")

Si has resuelto los tres, especialmente el de monedas, ya estás pensando como un programador. Ese ejercicio usa // y % repetidamente para descomponer un número — un patrón que se repite constantemente en programación.

🚀 Siguiente paso: variables y tipos de datos a fondo

En esta lección has aprendido las herramientas fundamentales: print(), input(), variables, operaciones, f-strings y cómo leer errores. Con esto puedes escribir programas que calculan cosas, interactúan con el usuario y muestran resultados formateados.

En la siguiente lección vamos a profundizar en los tipos de datos de Python: enteros, decimales, cadenas de texto, booleanos y cómo convertir entre ellos. También veremos métodos de cadenas que te permitirán manipular texto como un profesional.

💡 Antes de avanzar
Ejecuta los tres ejercicios en VS Code. Si alguno te da error, intenta resolverlo leyendo el mensaje de error antes de mirar la solución. Esa habilidad — leer errores y deducir qué falla — es la que más te va a servir a lo largo de todo el curso.

❓ Preguntas frecuentes

❓ Preguntas frecuentes sobre Tu primer programa en Python: de cero a resolver problemas reales

Las dudas más comunes respondidas de forma clara y directa.

Lo más probable es que no tengas ningún print() o que el archivo esté vacío. Python ejecuta el código pero si no le dices que muestre algo en pantalla, no verás nada. Añade print() para ver resultados.
Sí, Python 3 soporta Unicode de forma nativa. Puedes usar tildes, eñes, emojis y caracteres de cualquier idioma tanto en cadenas de texto como en comentarios. En nombres de variables también funciona (año = 2026), aunque por convención se suele escribir en inglés o sin tildes.
Puedes usar + para concatenar cadenas, pero las f-strings son más legibles, más rápidas y menos propensas a errores. Desde Python 3.6 son la forma recomendada. Usa f-strings siempre que puedas.
Python te dará un NameError diciendo que esa variable no está definida. A diferencia de otros lenguajes, Python no te avisa de esto hasta que llega a esa línea al ejecutar. Revisa bien la ortografía de tus variables.
Sí, siempre. Aunque el usuario escriba un número como 42, input() lo devuelve como la cadena "42". Si necesitas hacer operaciones matemáticas, debes convertirlo con int() o float(). Ejemplo: edad = int(input("Tu edad: ")).
Depende del proyecto. Un script sencillo puede tener 10-50 líneas. Una aplicación web mediana, miles. No te preocupes por la longitud — preocúpate por que cada línea tenga sentido. Un programa de 20 líneas que funciona vale más que uno de 200 que no.

🎯 ¿Quieres certificarte en Python?

Ciberaula ofrece cursos bonificados de Python con tutor personal, desde nivel básico hasta IA y Machine Learning. Formación subvencionada por FUNDAE para trabajadores en activo.

Ver cursos de Python bonificados →
Valora este artículo

💬 Foro de discusión

¿Tienes dudas sobre Tu primer programa en Python: de cero a resolver problemas reales? Comparte tu pregunta con la comunidad.

¿Tienes cuenta? o comenta como invitado ↓

Todavía no hay mensajes. ¡Sé el primero en participar!