Tabla de Contenidos
Cómo leer y escribir código
No vas a aprender todavía a construir programas grandes, sino algo más fundamental: a leer código con criterio y a escribir código que otra persona (o tú mismo dentro de un mes) pueda entender. Ese es el primer paso para dejar de copiar y empezar a programar de verdad.
Este módulo forma parte del curso de programación desde cero con Python
El código no es magia, es un texto con reglas
Imagina que encuentras una nota escrita a mano que dice: “mañana lleva el coche al taller”. Entiendes la instrucción, pero también entiendes que si estuviera escrita como “coche mañana taller el lleva al”, seguiría siendo una lista de palabras reconocibles, pero no una orden clara. El orden y la forma importan.
Con el código pasa lo mismo. Python no “adivina” lo que quieres decir: lee tu archivo como un texto y comprueba que cumple unas reglas. Si las cumple, ejecuta las instrucciones en orden. Si no las cumple, se detiene y te muestra un mensaje explicando qué regla se ha roto y dónde. Aprender a leer ese mensaje es una de las habilidades más útiles que puedes desarrollar desde el primer día, porque te convierte en alguien capaz de corregirse a sí mismo en lugar de depender de que otra persona te diga qué está mal.
Instrucciones y expresiones
Un programa Python está formado por instrucciones (statements). Una instrucción es una orden completa que Python puede ejecutar. Por ejemplo:
print("Hola")
Esta línea es una instrucción. Le dice a Python “ejecuta la función print con el texto «Hola»”.
Dentro de una instrucción puede haber expresiones. Una expresión es una combinación de valores y operaciones que produce un resultado. En print("Hola"), el texto "Hola" es una expresión (un valor literal). Si escribieras print(2 + 3), la expresión 2 + 3 produce el valor 5, y luego print lo muestra.
Analogía: una instrucción es como una frase completa (“Cierra la puerta”), mientras que una expresión es como un sintagma dentro de ella (“la puerta”). La frase tiene sentido por sí sola; el sintagma necesita formar parte de algo más para convertirse en una orden.
Por ahora no necesitas distinguir expresión e instrucción con precisión técnica. Lo importante es que veas que cada línea ejecutable de Python es una orden, y que dentro de esa orden puede haber partes que producen valores.
[PYTHON] La distinción entre instrucción (statement) y expresión (expression) existe en casi todos los lenguajes, aunque los límites varían. En Python, por ejemplo, una asignación comox = 5es una instrucción, no una expresión: no “devuelve” un valor utilizable dentro de otra expresión. Esta diferencia será relevante más adelante, en el Módulo 15, cuando estudies características idiomáticas del lenguaje.
Sintaxis: las reglas del juego
La sintaxis es el conjunto de reglas que determinan si una secuencia de texto es un programa Python válido. Igual que en español una oración necesita concordancia y puntuación, en Python una instrucción necesita paréntesis equilibrados, comillas cerradas y palabras clave en el lugar correcto.
Ejemplos de sintaxis válida:
print("Hola") print(42)
Ejemplos de sintaxis inválida:
print("Hola" # falta el paréntesis de cierre print "Hola" # faltan los paréntesis (esto era válido en Python 2, no en Python 3)
[ERROR HABITUAL] El segundo ejemplo,print "Hola", es un error muy frecuente en quien ha visto código antiguo o tutoriales obsoletos. En Python 3,print "Hola", obtendrás unSyntaxError. No es que Python “no entienda” el texto; es que la regla sintáctica exige paréntesis.
[PYTHON] La sintaxis de Python es relativamente estricta con los paréntesis y las comillas, pero muy permisiva con el espaciado horizontal (puedes poner más o menos espacios entre elementos dentro de una línea). La indentación (el espaciado al principio de la línea), en cambio, es parte de la sintaxis y se trata en el apartado 5.4.
Orden de ejecución
Python ejecuta las instrucciones de arriba abajo, una detrás de otra, en el orden en que aparecen en el archivo. Esto se llama ejecución secuencial.
print("Primera") print("Segunda") print("Tercera")
La salida será:
Primera Segunda Tercera
Si cambias el orden de las líneas, cambia el orden de la salida. No hay magia: el intérprete lee la línea 1, la ejecuta; lee la línea 2, la ejecuta; y así sucesivamente.
Analogía: una receta de cocina. No puedes “hornear el pastel” antes de “mezclar los ingredientes”. El orden de los pasos determina el resultado. En programación, el orden de las instrucciones determina qué ocurre y en qué momento.
Dentro de una misma instrucción, Python también sigue un orden: evalúa las expresiones de izquierda a derecha, y en una asignación (que verás en el Módulo 4), el lado derecho se evalúa antes que el izquierdo. Por ahora, con print y literales, este detalle no cambia nada, pero conviene que sepas que el orden no es arbitrario.
Indentación: cuando el espacio forma parte de la gramática
En la mayoría de los lenguajes, los espacios al principio de una línea son solo estética. En Python, la indentación es sintáctica: indica a qué bloque pertenece una instrucción.
Observa este ejemplo (que aún no deberías entender del todo, porque incluye una estructura que verás más adelante, pero sirve para ilustrar el concepto):
if True: print("Dentro del bloque") print("Fuera del bloque")
La línea print("Dentro del bloque") está indentada con 4 espacios. Eso le dice a Python que forma parte del bloque que empieza después de if True:. La línea print("Fuera del bloque") no está indentada, así que está fuera de ese bloque.
Si eliminas la indentación de la segunda línea:
if True: print("Dentro del bloque")
Python mostrará un IndentationError: expected an indented block. La indentación no es un adorno: es una instrucción gramatical.
[BUENA PRÁCTICA] PEP 8, la guía oficial de estilo de Python, recomienda 4 espacios por nivel de indentación y nunca usar tabulaciones. Las tabulaciones y los espacios se mezclan mal y producen errores difíciles de diagnosticar. Configura tu editor para que la teclaTabinserte 4 espacios.
[PYTHON] La indentación significativa es una de las características más distintivas de Python. En C, Java o JavaScript, los bloques se delimitan con llaves{}y la indentación es solo una convención de legibilidad. En Python, las llaves no existen para ese propósito: la estructura del programa es la indentación. Esto no significa que Python sea “mejor” o “peor”, sino que exige disciplina visual desde el principio.
Comentarios: notas para humanos, ignoradas por Python
Un comentario es texto que Python ignora por completo. Sirve para explicar el código a las personas que lo lean (incluido tu yo del futuro). En Python, un comentario empieza por # y llega hasta el final de la línea.
# Este es un comentario de línea completa. print("Hola") # Este comentario está al final de una instrucción.
Python ejecuta print("Hola") y no hace nada con el texto que sigue al #.
[BUENA PRÁCTICA] PEP 8 distingue entre comentarios de bloque (líneas completas que explican un fragmento de código) y comentarios en línea (al final de una instrucción). Los comentarios en línea deben estar separados de la instrucción por al menos dos espacios y empezar con#(almohadilla y un espacio). Los comentarios de bloque también empiezan con#y suelen limitarse a 72 caracteres por línea.
¿Cuándo es útil un comentario? Cuando explica el porqué de una decisión, no el qué evidente. # Incrementa x en 1 es un comentario inútil si la línea es x = x + 1. # Reintentamos porque la API a veces devuelve un error temporal sí aporta información que el código por sí solo no revela.
[ERROR HABITUAL] Un comentario mal cerrado o mal colocado puede “comerse” código. Por ejemplo:
print("Hola") # Muestra un saludo # print("Adiós") # Esta línea no se ejecuta
La segunda línea no produce error, pero si olvidas el#, el código se ejecuta. Revisa tus comentarios cuando algo “no se ejecuta” sin motivo aparente.
Errores de sintaxis: cuando Python no puede ni empezar
Un error de sintaxis (SyntaxError) ocurre cuando Python ni siquiera puede interpretar la estructura del programa. No es que la operación sea imposible (como dividir entre cero), sino que el texto no cumple las reglas gramaticales. El programa no se ejecuta en absoluto: el intérprete se detiene al analizar el archivo.
Ejemplo:
print("Hola"
Salida (aproximada, en Python 3.15):
File "ejemplo.py", line 1
print("Hola"
^
SyntaxError: '(' was never closed
El mensaje tiene varias partes:
- La ubicación:
File "ejemplo.py", line 1indica el archivo y la línea. - La línea problemática: repite el contenido de esa línea.
- El cursor (
^): señala el punto aproximado donde el analizador detectó el problema. En este caso, apunta al paréntesis de apertura, porque nunca se cerró. - El tipo de error y una explicación:
SyntaxError: '(' was never closed.
[PYTHON] En Python 3.15 los mensajes de error han mejorado notablemente: son más precisos, incluyen sugerencias y, en la terminal, pueden aparecer con resaltado en color para que el punto del error sea más fácil de localizar. Esto es una ventaja pedagógica real: el mensaje no solo dice “error”, sino que a menudo explica qué falta o qué se esperaba.
[ERROR HABITUAL] El cursor^no siempre señala el lugar exacto que hay que corregir. A veces apunta al lugar donde el analizador se dio cuenta de que algo iba mal, que puede estar después del error real. Por ejemplo, si olvidas cerrar unas comillas, el cursor puede señalar el final de la línea o el principio de la siguiente. Úsalo como una pista, no como una verdad absoluta.
Modificar programas existentes sin romperlos
Una habilidad esencial es modificar un programa que ya funciona. Antes de cambiar nada, hazte tres preguntas:
- ¿Qué hace este programa? Ejecútalo y observa la salida.
- ¿Qué quiero que haga después del cambio? Formula el resultado esperado en una frase.
- ¿Qué línea o líneas debo tocar? Localízalas y cambia lo mínimo necesario.
Por ejemplo, dado:
# archivo: saludo.py print("Hola, Ana") print("Bienvenida al curso")
Si quieres que salude a “Luis”, cambia solo la primera línea:
print("Hola, Luis")
[BUENA PRÁCTICA] Haz un cambio cada vez y vuelve a ejecutar. Si cambias cinco cosas a la vez y el programa falla, no sabrás cuál de los cinco cambios causó el problema. Este hábito se llama desarrollo incremental y te acompañará durante todo el curso.
Seguimiento de la ejecución
Cuando ejecutas un programa, el intérprete realiza dos fases bien diferenciadas:
Análisis (parseo): lee todo el archivo y comprueba que la sintaxis es válida. Si encuentra un SyntaxError, se detiene aquí y no ejecuta ninguna instrucción. Esto explica por qué un error en la última línea impide que se ejecute la primera.
Ejecución: si la sintaxis es válida, recorre las instrucciones de arriba abajo y las ejecuta una por una.
Esta distinción es importante: un SyntaxError es un error antes de la ejecución. Otros errores, como dividir entre cero o usar una variable que no existe, ocurren durante la ejecución, en la línea concreta donde se producen. En el Módulo 11 profundizarás en esa diferencia; por ahora quédate con que los errores de sintaxis bloquean el programa entero desde el principio.
Errores habituales
| Error | Causa | Cómo diagnosticarlo |
|---|---|---|
SyntaxError: '(' was never closed | Falta un paréntesis de cierre. | Revisa la línea que indica el mensaje y cuenta los paréntesis: deben estar equilibrados. |
SyntaxError: invalid syntax (genérico) | Puede deberse a múltiples causas: palabra clave mal escrita, falta una coma, un = donde debería haber ==, etc. | Mira el cursor ^. A menudo señala el token problemático. Si no está claro, revisa la línea anterior por si el error real está allí. |
IndentationError: unexpected indent | Hay espacios al principio de una línea que no debería estar indentada. | Elimina los espacios sobrantes. Comprueba que no has mezclado tabulaciones y espacios. |
IndentationError: expected an indented block | Falta la indentación después de una línea que introduce un bloque (como if, for o def). | Añade 4 espacios en la línea siguiente. |
print "Hola" sin paréntesis | Sintaxis de Python 2, inválida en Python 3. | Añade los paréntesis: print("Hola"). |
[ERROR HABITUAL] ElSyntaxError: invalid syntaxes el más frustrante para principiantes porque es genérico. Cuando lo veas, no te quedes mirando solo la línea que señala el cursor: revisa también la línea anterior. Un paréntesis sin cerrar en la línea 3 puede hacer que el error se detecte en la línea 4.
Particularidades de Python frente a otros lenguajes
La indentación es sintáctica, no estética. En C, Java o JavaScript, un bloque se delimita con {} y puedes indentar como quieras. En Python, la indentación es la estructura. Esto obliga a ser visualmente ordenado desde el primer día, pero elimina la ambigüedad de las llaves mal puestas.
Los comentarios empiezan por # y llegan al final de la línea. En C o Java se usan // y /* */; en HTML se usa <!-- -->. Cada lenguaje tiene su convención, y mezclarlas produce errores.
El print es una función, no una palabra clave especial. En Python 3, print se usa como cualquier otra función: print(algo). Esto permite cosas como print("a", "b") para imprimir varios valores separados por espacios, algo que en Python 2 no era posible de la misma manera.
Buenas prácticas de legibilidad
Incorrecto (poco legible):
print("Hola")#comentario print( "Mundo" )
Mejor:
# Programa que muestra un saludo. print("Hola") # Comentario en línea, separado por dos espacios print("Mundo")
[BUENA PRÁCTICA] Deja un espacio después de#en los comentarios (# texto, no#texto). PEP 8 lo recomienda y mejora la legibilidad. También es buena idea dejar una línea en blanco entre bloques lógicos de instrucciones, aunque en programas de dos o tres líneas no sea imprescindible.
[BUENA PRÁCTICA] No comentes lo obvio.print("Hola") # imprime Holano aporta nada. Un comentario útil explica por qué haces algo o qué intención hay detrás, no qué hace la línea, que ya se ve en el código.
Windows y Linux
La sintaxis, la indentación y los comentarios son idénticos en Windows y Linux. El intérprete de Python se comporta igual en ambos sistemas. Las diferencias que has visto en el Módulo 2 (el comando py frente a python3, los separadores de ruta) afectan a cómo lanzas el programa, no a cómo escribes el código.
Un detalle menor: los editores de Windows suelen guardar los archivos con finales de línea \r\n (CRLF), mientras que Linux usa \n (LF). Python acepta ambos sin problema y no producen errores de sintaxis. No necesitas preocuparte por ello al escribir código.
[WINDOWS / LINUX] Si usas un editor que muestra caracteres extraños al abrir un archivo creado en el otro sistema, configura el editor para usar finales de líneaLFde forma consistente. Es una buena práctica de portabilidad, aunque no afecta a la ejecución de Python.
Resumen
- Una instrucción es una orden ejecutable; una expresión es una parte que produce un valor.
- La sintaxis son las reglas que hacen que un texto sea un programa Python válido.
- Python ejecuta las instrucciones de arriba abajo, en orden secuencial.
- La indentación (4 espacios por nivel, según PEP 8) es sintáctica en Python: define bloques.
- Los comentarios empiezan por
#y son ignorados por el intérprete; deben explicar el porqué, no el qué evidente. - Un
SyntaxErrorimpide que el programa se ejecute: el intérprete se detiene antes de empezar. - El mensaje de error indica el archivo, la línea, un cursor
^aproximado y una descripción; en Python 3.15 es más claro y puede incluir sugerencias y color. - Modificar código requiere cambios pequeños y verificables, no reescrituras masivas.
