Mi primer programa
"El que no se equivoca, no programa."
Qué vas a aprender en este capítulo
Vas a pasar de leer sobre programación a programar de verdad. Al terminar este capítulo, vas a tener Python instalado, vas a haber ejecutado tu primer programa, y vas a entender qué pasa por dentro cuando le das Enter.
2.1 Instalar Python
💡 Intuición
Python no viene preinstalado en la mayoría de las computadoras. Es un programa que interpreta otros programas — toma el archivo de texto que vos escribiste y lo ejecuta. Sin él, tu archivo .py es solo texto, igual que un .txt.
Pensá en Python como el "intérprete" que lee tu receta y la ejecuta. Sin intérprete, la receta es solo papel.
En Windows
- Andá a https://www.python.org/downloads/
- Descargá la última versión (ej: 3.12.x).
- Al instalar, muy importante: marcá la casilla "Add Python to PATH" antes de hacer click en Install Now. Esto te ahorra dolores de cabeza después.
- Para verificar, abrí la Terminal (buscá "PowerShell" o "cmd" en el menú de inicio) y escribí:
python --version
Deberías ver algo como Python 3.12.1. Si ves un error, tenés que reinstalar marcando la casilla del PATH.
En Mac
Mac trae Python 2 pre-instalado, que no nos sirve (es una versión vieja). Necesitamos Python 3.
Opción fácil: descargar de https://www.python.org/downloads/macos/ e instalar.
Opción mejor (con Homebrew):
brew install python3
Verificá:
python3 --version
En Linux
Casi todas las distribuciones traen Python 3. Verificá:
python3 --version
Si no está:
sudo apt install python3 python3-pip # Debian/Ubuntu
sudo dnf install python3 python3-pip # Fedora
En Android (sin computadora)
Si solo tenés celular, descargá la app Pydroid 3 desde Play Store. Trae Python 3 listo para usar. Para los primeros capítulos del libro, te alcanza perfecto.
⚠️ Trampa común
python vs python3. En Mac y Linux, escribir python a secas a veces ejecuta Python 2 (la versión vieja). Siempre usá python3 para asegurarte de estar en Python 3. En Windows, python ya es Python 3 si lo instalaste recién.
Tip: si nunca te acordás cuál usar, escribí python3 --version primero. Si funciona, usá python3. Si no, probá python.
2.2 Hola, mundo
Por tradición, el primer programa que escribe todo programador es uno que muestra el mensaje Hola, mundo. Vamos a hacerlo.
Crear el archivo
Abrí cualquier editor de texto (Bloc de notas en Windows, TextEdit en Mac, gedit en Linux). Mejor todavía: descargá Visual Studio Code desde https://code.visualstudio.com/ — es gratis, y es el editor que vas a usar el resto de tu carrera.
Creá un archivo nuevo con este contenido exacto:
print("Hola, mundo")
Guardalo como hola.py. Importante: el .py al final indica que es un archivo de Python. Si lo guardás como hola.txt, no va a funcionar.
Ejecutar el archivo
Abrí la Terminal, navegá hasta donde guardaste el archivo, y ejecutalo:
cd Documentos/programacion-uno # ajustá la ruta a donde lo guardaste
python3 hola.py # en Mac/Linux
python hola.py # en Windows
Deberías ver:
Hola, mundo
🎉 Acabás de ejecutar tu primer programa.
📐 Fundamento
¿Qué pasó cuando le diste Enter? Mucho más de lo que parece:
- El sistema operativo (Windows, Mac, Linux) recibió la orden de ejecutar el comando
python3 hola.py. - Buscó el ejecutable llamado
python3en una lista de carpetas (la variablePATHque mencionamos en la instalación). - Lanzó el intérprete de Python como un nuevo proceso.
- El intérprete abrió y leyó el archivo
hola.pycarácter por carácter. - Lo pasó por el lexer (también llamado tokenizer), que agrupó los caracteres en unidades con significado:
print,(,"Hola, mundo",). - El parser verificó que la secuencia de tokens forme una estructura válida en el lenguaje (en este caso, una llamada a función con un argumento de tipo cadena).
- Construyó un árbol de sintaxis abstracta (AST) representando el programa.
- Compiló el AST a bytecode — un formato intermedio más compacto y rápido de ejecutar.
- La máquina virtual de Python (PVM) ejecutó el bytecode instrucción por instrucción.
- La instrucción correspondiente a
printinvocó una función del sistema operativo para escribir bytes en la salida estándar (stdout), que está conectada a tu terminal. - Tu terminal recibió esos bytes y los pintó como pixeles en la pantalla, formando las letras "Hola, mundo".
Toda esa cadena ocurrió en milésimas de segundo. Cuando estés depurando, vas a agradecer entender estas capas — la mayoría de errores de principiante pasan en alguna de estas etapas.
Línea aparte sobre interpretado vs compilado. Python es un lenguaje interpretado — el intérprete lee y ejecuta tu código directo. Lenguajes como C o Rust son compilados — un programa aparte traduce todo tu código a instrucciones de máquina antes de ejecutar, generando un archivo .exe independiente. La diferencia tiene consecuencias prácticas:
- Interpretado: más lento en ejecución pero más rápido para iterar (cambiás → corrés → ves resultado).
- Compilado: más rápido en ejecución, pero hay que recompilar cada vez que cambiás algo.
Python en realidad es un híbrido: compila a bytecode (paso 8 de arriba) y luego interpreta el bytecode. Pero desde tu punto de vista como programador, es interpretado.
2.3 La función print
print es una función. Le pasás cosas entre paréntesis y las muestra en la pantalla.
print("Hola, mundo")
print("Bienvenido a Programacion I")
print("UNIMO, San Miguel")
Si guardás esto como bienvenida.py y lo corrés, ves:
Hola, mundo
Bienvenido a Programacion I
UNIMO, San Miguel
Cada print imprime en una línea nueva.
Imprimir varios valores
Podés pasar varios argumentos separados por coma. Python los une con un espacio:
print("Mi nombre es", "Juan", "y tengo", 19, "años")
Salida:
Mi nombre es Juan y tengo 19 años
Notá que 19 no lleva comillas — es un número, no texto. Python sabe imprimir tanto texto como números (vamos a profundizar en esto en el próximo capítulo).
Imprimir sin salto de línea
Si querés que dos print salgan en la misma línea, usá el parámetro end:
print("Hola, ", end="")
print("mundo")
Salida:
Hola, mundo
Por defecto, end vale "\n" (salto de línea). Lo cambiamos a cadena vacía y los dos print quedan pegados.
📝 Ejemplo — Tu tarjeta de presentación
print("=" * 30)
print(" Tarjeta de Presentacion")
print("=" * 30)
print("Nombre: Maria Lopez")
print("Carrera: Ing. en Sistemas")
print("Ciclo: 1")
print("Email: maria@unimo.edu.sv")
print("=" * 30)
Salida:
==============================
Tarjeta de Presentacion
==============================
Nombre: Maria Lopez
Carrera: Ing. en Sistemas
Ciclo: 1
Email: maria@unimo.edu.sv
==============================
Detalle: "=" * 30 es Python multiplicando una cadena. Genera el carácter = repetido 30 veces. Útil para formatear sin escribir cada signo a mano.
2.4 Comentarios
Los comentarios son notas en el código que el intérprete ignora. Sirven para explicar por qué estás haciendo algo (no qué — eso ya lo dice el código).
En Python, todo lo que esté después de # en una línea es comentario:
# Este programa muestra el menu de la pupuseria
print("Pupuseria La Esquina")
print("--- Menu ---")
# Precios actualizados al 2026-01
print("Pupusa de queso ........ $0.50")
print("Pupusa revuelta ........ $0.60") # la mas pedida
⚠️ Trampa común
Comentar lo obvio. Esto NO es útil:
x = 5 # asignar 5 a x
print(x) # imprimir x
Eso ya lo veo del código. Un buen comentario explica algo que no está claro:
# La pupusa de queso solo cuesta $0.50 en mayoreo (>50 unidades)
precio_queso = 0.50
Regla práctica: si tu nombre de variable y tu código son claros, no necesitás comentario. Los buenos programadores escriben pocos comentarios pero los que escriben son valiosos.
2.5 Errores: tu nuevo mejor amigo
Vas a ver muchos, muchos errores. Es normal. Vamos a ver los más comunes para que cuando aparezcan los reconozcás y los arregles rápido.
Olvidar las comillas
print(Hola, mundo)
Error:
NameError: name 'Hola' is not defined
Sin comillas, Python piensa que Hola es una variable (algo que vos definiste antes). Como no la definiste, se queja. La cura: comillas dobles "Hola, mundo" o simples 'Hola, mundo'. Las dos funcionan igual.
Olvidar un paréntesis
print("Hola"
Error:
SyntaxError: '(' was never closed
Cada ( que abrís tiene que tener su ) que cierre. Igual con [ y {. Los editores como VS Code te lo marcan en rojo.
Mal escrito el nombre de la función
prin("Hola")
Print("Hola")
Errores:
NameError: name 'prin' is not defined
NameError: name 'Print' is not defined. Did you mean: 'print'?
Python distingue mayúsculas y minúsculas. print ≠ Print ≠ PRINT. La cura: escribilo siempre en minúsculas.
Indentación inesperada
print("Hola")
print("mundo")
Error:
IndentationError: unexpected indent
Python usa espacios al inicio de la línea para entender la estructura del programa. Por ahora, asegurate de que tus líneas empiezan al margen izquierdo, sin espacios delante. Vamos a ver indentación con propósito en el capítulo de condicionales.
📐 Fundamento
Anatomía de un mensaje de error en Python. Cuando algo falla, Python te muestra un traceback:
Traceback (most recent call last):
File "/Users/maria/hola.py", line 3, in <module>
print(Hola)
^^^^
NameError: name 'Hola' is not defined
Leelo de abajo hacia arriba:
- Última línea — el error.
NameError: name 'Hola' is not defined. Esto te dice qué salió mal. - Líneas anteriores — la pista. Te dicen dónde ocurrió: archivo
hola.py, línea 3, en el códigoprint(Hola). Las flechitas^^^^apuntan al lugar exacto. - Primera línea — el contexto. "Most recent call last" significa que si hay varios niveles de error (porque una función llamó a otra), el más profundo está hasta abajo.
Hábito que deberías formar desde hoy: cuando veas un error, leélo entero. Estudiantes principiantes ven el rojo y entran en pánico sin leer. Programadores experimentados leen, entienden, y arreglan. La diferencia entre ambos no es talento — es paciencia para leer.
2.6 Proyecto: el menú de la pupusería en Python
🏗️ Avance del proyecto — Pupusería La Esquina
En el capítulo anterior escribimos el pseudocódigo del programa que muestra el menú. Ahora lo traducimos a Python.
Creá el archivo pupuseria.py:
# Pupuseria La Esquina - Sistema de pedidos
# Capitulo 2: mostrar el menu
print("=" * 35)
print(" Pupuseria La Esquina")
print(" San Miguel, El Salvador")
print("=" * 35)
print()
print("Menu:")
print(" 1. Pupusa de queso ........ $0.50")
print(" 2. Pupusa revuelta ........ $0.60")
print(" 3. Pupusa de chicharron ... $0.60")
print(" 4. Curtido (extra) ........ $0.25")
print(" 5. Refresco de tamarindo .. $1.00")
print()
print("=" * 35)
Ejecutá:
python3 pupuseria.py
Salida esperada:
===================================
Pupuseria La Esquina
San Miguel, El Salvador
===================================
Menu:
1. Pupusa de queso ........ $0.50
2. Pupusa revuelta ........ $0.60
3. Pupusa de chicharron ... $0.60
4. Curtido (extra) ........ $0.25
5. Refresco de tamarindo .. $1.00
===================================
En el próximo capítulo aprendemos a guardar datos (los precios y nombres) en variables, en lugar de tenerlos pegados al código. Eso nos prepara para que el programa pueda calcular totales en capítulos siguientes.
2.7 Resumen visual
| Concepto | Una línea para recordar |
|---|---|
| Python | Intérprete que lee tu archivo .py y lo ejecuta línea por línea. |
print(...) |
Muestra en pantalla lo que esté entre paréntesis. |
# comentario |
Nota para humanos; Python la ignora. |
"texto" |
Cadena de caracteres (texto). Lleva comillas. |
123 |
Número entero. Sin comillas. |
python3 archivo.py |
Comando para ejecutar tu programa desde la terminal. |
| Mayúsculas | Importan: print ≠ Print. |
2.8 Ejercicios
✏️ Ejercicio 2.1 — Tu tarjeta
Escribí un programa tarjeta.py que imprima tu propia tarjeta de presentación: nombre, carrera, ciclo, email, materia favorita. Usá líneas de = o - para enmarcar.
Solución
print("=" * 40)
print(" Carlos Hernandez")
print(" Ing. en Sistemas - UNIMO")
print("=" * 40)
print("Ciclo: 1")
print("Email: carlos@unimo.edu.sv")
print("Favorita: Programacion I")
print("=" * 40)
✏️ Ejercicio 2.2 — Caracteres especiales
Escribí un programa que imprima:
El profesor dijo: "El examen es el lunes"
Pista: ¿cómo metés comillas dobles dentro de una cadena que está entre comillas dobles?
Solución
Hay tres formas:
# Opcion 1: escapar las comillas internas con \
print("El profesor dijo: \"El examen es el lunes\"")
# Opcion 2: usar comillas simples por fuera
print('El profesor dijo: "El examen es el lunes"')
# Opcion 3: usar comillas dobles por fuera y simples por dentro (no aplica aqui)
La opción 2 es la más legible para este caso. La barra \ se llama carácter de escape y le dice a Python "el siguiente carácter es literal, no especial".
✏️ Ejercicio 2.3 — Bandera de El Salvador
Escribí un programa que imprima en la terminal una representación ASCII de la bandera de El Salvador (azul-blanco-azul):
##############################
##############################
##############################
##############################
Usá print con multiplicación de cadenas ("#" * 30).
Solución
azul = "#" * 30
blanco = " " * 30
print(azul)
print(azul)
print(blanco)
print(blanco)
print(azul)
print(azul)
Bonus: podemos hacerlo más conciso después de aprender bucles, pero por ahora con esto basta.
✏️ Ejercicio 2.4 — Lectura de errores
Cada uno de estos programas tiene un error. Sin ejecutarlo, decí qué error daría Python y cómo se arregla.
# A
print("Hola)
# B
Print("Hola")
# C
print(hola)
# D
print("Hola"
print("Mundo")
Solución
- A —
SyntaxError: EOL while scanning string literal. Falta cerrar la comilla. Arreglo:print("Hola"). - B —
NameError: name 'Print' is not defined. Python distingue mayúsculas. Arreglo:print("Hola")(minúscula). - C —
NameError: name 'hola' is not defined. Falta comillas, Python piensa queholaes una variable. Arreglo:print("hola"). - D —
SyntaxError: '(' was never closed. Falta cerrar el paréntesis del primerprint. Arreglo: agregar)al final de la primera línea.
2.9 Para profundizar
- Documentación oficial: https://docs.python.org/es/3/tutorial/index.html — tutorial oficial en español. La parte 1-3 cubre lo de este capítulo y un poco más.
- PEP 8: la guía oficial de estilo de Python — vale la pena leerla rapidito una vez ya cómodos con la sintaxis.
- Próximo capítulo: Variables y tipos de datos, donde aprendés a guardar datos para usarlos después.
Definiciones nuevas: intérprete, función, argumento, cadena (string), comentario, traceback, sintaxis.