Sintaxis en Python – Importancia de la comprensión de lenguaje

 

Sintaxis ¿?

Si desglosamos el título veremos una palabra que te suena en chino mandarín «sintaxis» y por cierto no significa ausencia de taxis!! pero es muy importante en los lenguajes de programación. Veamos porqué!

Pero antes, si algo te suena en chino, pídele al chino que lo repita.. Vuelve a leer una y otra vez hasta que comprendas lo que estas leyendo!

 

¿Qué es la sintaxis en python?

Con sintaxis nos referimos como en todo lenguaje al correcto uso y orden de las palabras que utilizamos para comunicarnos, en Python es igual, es necesario cumplir ciertos requisitos a la hora de expresarnos para evitar errores de comprensión del intérprete, primeramente deberás aprender ciertas palabras en inglés, su significado y el uso adecuado dentro del lenguaje. A lo largo de todo el recorrido de aprendizaje estarás aprendiendo la sintaxis, es decir, que no es cosa de una sola lección, cada expresión en particular tiene su forma correcta de escribirla y juntas conforman un bloque de código.

Para ejemplificar esto supongamos que Pepe se quiere comunicar con Juan y enviarle el siguiente mensaje: «Hola Juan yo soy Pepe, alcánzame la cuchara», si Pepe no respeta la sintaxis (en este caso el correcto orden de las palabras) y envía un mensaje desordenado como este «Hola Pepe soy yo Juan, cuchara la alcánzame». Juan no comprenderá nada, porque ni se llama Pepe ni Pepe se llama Juan, entonces Juan sabrá que Pepe comete un error de sintaxis y está enviando un mensaje erróneo.

En Python si cometemos un error de sintaxis nos mostrará un mensaje que dice: Sintax Error

La sintaxis en python es el correcto orden y uso de las palabras para indicar una instrucción al intérprete.

 

¿Qué es una instrucción en python?

 

Una instrucción es un conjunto de datos insertados en una secuencia estructurada para ordenar al intérprete realizar una operación determinada.

 

Si te gustan Los Simpson seguramente habrás visto el capitulo donde Homero le ordena a su computador matar a Flanders! Homero envió una instrucción a su computador pero con la sintaxis incorrecta! Sintax Error!

homerMe encanta este ejemplo para recordar que es una instrucción!!

A lo largo de cada lección aprenderemos instrucciones diferentes y la correcta sintaxis de cada una, por ejemplo al declarar una variable (instrucción) se debe hacer de «cierta» forma y no puede ser de otra, al declarar una función (instrucción) se debe hacer de «tal forma» y no de otra.

 

Tipos de instrucciones

Existen dos tipos de instrucciones en python:

Instrucciones simples

Son aquellas órdenes que python comprende respetando su sintaxis que comienzan y culminan en una sola línea.

Instrucciones compuestas

Son aquellas que python comprende respetando su sintaxis comenzando con una cláusula de sentencia compuesta y terminando con «:»  continúan debajo con una identación conformando así un bloque de código.

Ejemplo de instrucciones simples y compuestas:

Las instrucciones compuestas en Python ocupan más de una linea como puedes ver, pero el interprete necesita seguir un orden de ejecución (el orden en que se va a ejecutar cada línea de código de tu programa, normalmente estructurado de arriba a abajo.)

Este orden de ejecución esta determinado en un principio obviamente comenzando por la primera linea de código, la cual en el ejemplo anterior se trata de un comentario. Pero luego al llegar a la ante-ultima linea se encuentra con una instrucción compuesta que sirve para comparar en este caso si b == c, a partir de allí, si esta condición se cumple y efectivamente b == c deberá descender a través del identado a la línea que vemos como siguiente print(a).

Pero si esta condición no se cumple, se saltará esa linea y continuará hasta terminar.

Y esto sucede gracias al identado, sin el identado la linea que esta dentro de la condición o el bloque de código if b==c. Se ejecutaría de todas maneras, y así ¿que sentido tendría nuestro programa?.

 

 

El identado en Python

El identado en Python resulta crucial para definir donde comienza un bloque y termina otro, ya que en Python como habrás leído no existen caracteres de cierre como en otros lenguajes, aquí no utilizamos ni llaves {}, ni el tan histérico punto y coma. En python todo esto lo define el identado en estructuras o bloques y por supuesto los paréntesis dentro de cada instrucción simple.

Para identar una línea basta con pulsar la tecla «Tabulador» o «tab» en algún IDE. También hay quienes hacen 4 espacios.. Ya que una «Tabulación» corresponde a 4 espacios en blanco.

Por ende podemos definir la identación en Python y solo en Python en este caso como una practica que se utiliza para delimitar la estructura del programa estableciendo bloques de código.

Voy a presentarte esta idea de dos maneras, muy similares. Para ello deberás conocer a Maria. (Aquí es donde mis lectores piensan, ya se le cruzó el cable al cabrón.)

 

Ejemplo practico 1

Aquí viene Maria!!:

¿Te das cuenta lo que pasa si Maria tiene el pelo negro?

Se nos quema la cabeza!. Pero primero nos damos cuenta que es «morocha» y si es «morocha» entonces nos gusta, y si nos gusta nos pasan «cositas».

¿Y si Maria no tiene el pelo negro?

Es rubia..

Aquí podríamos interpretar las afirmaciones como que son instrucciones simples!

Y las condiciones como que conforman un bloque de código y son instrucciones compuestas!

Por lo que si Maria == Pelo negro desencadenará una reacción en cadena que nos hará afirmar lo siguiente:

  1. Que Maria es Morocha.
  2. Que Maria me gusta.
  3. Que tengo verguenza y me ruborizo.

Pero si Maria == Pelo amarillo desencadenará solo la siguiente afirmación:

  1. Maria es rubia

Fíjate el diagrama:

Entonces el flujo de ejecución de este «programa» estará determinado por el «color de pelo de Maria» (Condicional). Su color de pelo lo decide todo, porque si no es negro, el programa simplemente afirmará que es rubia!. Aunque Maria sea colorada, según nuestro «programa» será rubia y ya nos vale madres!

Volvamos al pseudo-código de nuestro corazón:

 

 

 

 

 

Tenemos 3 niveles de identación como puedes ver que determinan uno de los posibles flujos de ejecución del programa, si se cumple que tiene el pelo negro.

Y tenemos otro flujo (en rojo) que se cumplirá si Maria no tiene el pelo negro.

Pero como al principio (violeta) afirmamos que tiene el pelo negro entonces seguirá el camino del flujo verde.

  • Las primeras dos afirmaciones «Maria es mujer» y «Maria tiene el pelo negro» son instrucciones simples.
  • 1, 2 ,3 son instrucciones compuestas porque tienen «:» al final. También son Bloques de código uno dentro de otro.
  • Las afirmaciones «Maria es morocha», «Maria me gusta» y «Tengo vergüenza y me ruborizo» pertenece cada una a su bloque de código que le precede y también a un Bloque de código general que determina que estamos ante una sentencia de condición (condicional) anidada.

Si nosotros eliminamos la identación de 1, 2 y 3. Además de un error grave tendríamos que las afirmaciones se ejecutarían sin comprobar nada por los condicionales, por lo que daría igual si tiene el pelo negro o no, empezaríamos a tartamudear afirmaciones como idiotas revelando nuestros sentimientos y diciendo que es morocha y también es rubia. Que vergüenza!

 

Esto no era Python, por supuesto. Era un ejemplo para presentarte una idea de la utilidad del identando. Ni siquiera quiero que comprendas los condicionales todavía, sino mas bien para que sirve «Identar».

 

 

Ejemplo practico 2

A continuación voy a ponerte código Python de ejemplo, el cual en si no debes tratar de comprender al 100% sino enfocarte solo en aquellos aspectos que señalo y el porque se producen:

Identar en Python

Salida cuando ejecutamos:

-Aprender Python es Fácil si comprendo su Sintaxis
-Se acaba de ejecutar una instrucción compuesta..
-Pero ahora estamos ejecutando instrucciones simples..
-Simplemente una tras otra.

Cuando ejecutemos el siguiente archivo .py:

  1. Python comienza por la primera línea. La cual en este caso da información de que se trata de un archivo Python.
  2. Luego la segunda linea le da información de codificación al interprete. Lo que le permite saber que caracteres tiene permitido utilizar en este caso UTF-8.
  3. Continuamos con comentarios, los cuales el interprete reconoce como tal a causa de que son precedidos por la almohadilla «#».
  4. A continuación declaramos variables, por lo que una a la vez serán almacenados los datos que allí especificamos (texto). Recuerda que va avanzando desde arriba hacia abajo (Flujo normal del interprete).
  5. Pero al llegar a la línea 17 verás que Geany está marcando con un recuadro y un símbolo «-» se encontrará con una instrucción compuesta porque termina en (dos puntos «:»). Así Geany asume que hay código dentro de ella.
  6. Como ves la linea 18 esta identada!. Esto le está indicando al interprete que esa línea pertenece a un bloque de código y «puede ejecutarse o no». Se identifica como una «desviación del flujo de ejecución» basada en una condición, que el valor de la variable «d» sea «True». Si se cumple, el interprete está obligado a ejecutar esta línea identada (línea 18). Pero, si la variable «d» fuera «False», evitará esa línea y simplemente ejecutará la siguiente, por lo que no descenderá a un sub-nivel de código. ¿Me explico?

sintaxis python

Salida cuando ejecutamos:

-Aprender Python es Fácil si comprendo su Sintaxis
-Se acaba de ejecutar una instrucción compuesta..
-Pero ahora estamos ejecutando instrucciones simples..
-Simplemente una tras otra.

Aquí te he marcado el flujo del interprete, hasta la línea 17 simplemente continua descendiendo, pero al encontrarse con esta línea existe la posibilidad de tener que desviarse. Y de hecho lo hace, ejecuta la linea identada (18), es decir, en un sub-nivel y luego pasa a continuar con la ejecución normal con las siguientes lineas.

 

¿Pero que pasaría si la variable «d» tomara un valor false y nuestra condición no se cumpliera?

Sintaxis en Python Identación

 

Simplemente, el interprete de Python va a ignorar esa linea (18)

Pero luego de comprobar primero, que la tiene que ignorar… Por ende, la linea 17 si se ejecuta hee!!

 

Python tutorial

Y así a diferencia del primero, nos va a brindar esta salida:

-Se acaba de ejecutar una instrucción compuesta..
-Pero ahora estamos ejecutando instrucciones simples..
-Simplemente una tras otra.

Seas mamooon! Sabes que el interprete está mintiendo!!. La instrucción compuesta (línea 18) no se ejecutó!

Y entonces, ¿por que dice que si?

Pues porque la línea que imprime «Se acaba de ejecutar una instrucción compuesta..» está fuera del bloque de código que comprueba la variable!!!

  • ¿Ves ahora la importancia de identar?
  • ¿Ves ahora como se conforma un bloque de código y que pasa si una línea se nos escapa de él?
  • Pues claro, un programa así no sirve, está mal desarrollado!. Así que para corregirlo debemos meter la línea (18) dentro del bloque de código. Entonces cuando el programa compruebe que la variable es falsa, no va a decir esa estupidez de que se ha ejecutado una instrucción compuesta cuando no es cierto!

 

Bloque de código Python2

Fíjate ahora como movimos la linea dentro del bloque de código!

Salida ahora que «e» sigue siendo false:

-Pero ahora estamos ejecutando instrucciones simples..
-Simplemente una tras otra.

Comprender la identación en Python es fundamental porque sin ella no podríamos establecer bloques de código y solo estaríamos limitados a ejecutar una linea tras otra sin la posibilidad de desviar el flujo de ejecución.

Nuestro programa terminado queda así, aquí te dejo el código:

Verás resaltado lo que es «un bloque de código» (Líneas 17, 18 y 19)

Si te animas puedes guardarlo como «.py» y probar a ejecutarlo, luego puedes ir probando cambiar el valor de «e» por True..

Y si lo vemos en un diagrama se vería algo así:

Diagrama Python

 

Importante
Puede parecerte algo complicado en un inicio porque he utilizado código que no he explicado del todo, si es así continua con las siguientes lecciones y verás que tarde o temprano comprenderás de que hablamos en este post.

Lo importante aquí es que logres recordar lo siguiente:

  • Una linea identada pertenece a algún bloque de código. Si o si!. No puede haber una linea identada que no pertenezca a algún bloque de código, y para ello debe existir por supuesto una linea más arriba que termine en «:».
  • Si una linea esta identada, pero no pertenece a un bloque de código obtendremos un error de identación.
  • Una instrucción es Simple cuando no pertenece a un Bloque de código, pero tampoco está identada.
  • Una instrucción es Compuesta cuando termina en dos puntos («:») y generalmente conforma uno o más Bloques de código.
  • Puedes tener un bloque de código dentro de otro bloque de código, como unos ricos fideos con salsa todos mezclados.
  • Pero debes tratar de NO IDENTAR HASTA MÁS DE 3 NIVELES!

Recomendaciones finales

El ejemplo de Maria aunque poco practico en la realidad consta de instrucciones anidadas, como pudimos contar en hasta 3 niveles, así siempre sean diferentes estructuras como condicionales, bucles, etc deben permanecer en lo posible en hasta 3 niveles y no excederse de más de 3. Solo por una buena practica de programación y consumo de recursos.

Cuando comienzas a programar debes tener en cuenta estos aspectos, pensando en bloques, estructuras y niveles. Si obtienes un error del tipo IndentationError: unexpected indent. Es porque has identado mal alguna línea, ya sea que no debía ser identada o que has identado dos veces mandando una linea a otro nivel!

Espero hallas logrado comprender bien la diferencia entre los tipos de instrucciones en Python, que es un Bloque de código y cuando debes o no debes identar.

Si aún resulta de dificultad sigue avanzando, es una dificultad que se quita practicando y analizando mucho código a lo largo del tiempo.

Adiooos!

Pues, no hay más que hacerle, nos vemos en la siguiente entrada donde veremos funciones y volveremos a tratar este tema, aunque con menos profundidad!. Si no lo has comprendido lo vas a terminar de entender en la siguiente!. Allí nos vemos..

 

 

 

Ayudame compartiendo este blog de programación