h1

Python – Post 01

20/04/2011

Programar con python es algo satisfactorio. Un lenguaje simple, poderoso, y muy ordenado. Veamos algunas cosas:

Indentación:

Indentar el código es la práctica de “acomodar” el texto de manera que se entienda que código pertenece a cada bloque. Es decir agregar las tabulaciones necesarias al inicio de cada línea para que el texto quede más “adentro” del bloque. En Python indentar el código es estrictamente necesario, pues es la única forma que tiene el interprete de saber que instrucciones pertenecen a cada bloque; esto es porque en Python no hay delimitadores de bloque. Los delimitadores de bloques, son esos símbolos que nos permiten “encerrar” el código por bloques. En C++ y Java los delimitadores de bloque son las llaves. Así un condicional en C++ y en Java tiene la siguiente forma:

if (condicion){sentenciasDentroCondicional;}
SentenciasFueraCondicional;

Actualización: En el comentario de Javier Albornoz tenemos varios puntos que deben tomarse en cuenta:

  • C/C++ y Java obligan a utilizar “paréntesis” en el predicado de la estructura condicional.
  • C/C++ y Java obligan a utilizar “corchetes” para marcar el inicio y el fin del bloque.
  • C/C++ y Java obligan a utilizar “punto y coma” para indicar el final de la instrucción.
  • En Python se utilizan los “dos puntos” sólo para marcar el inicio del bloque, ya que el bloque _debe_ estar indentado.

Mientras que en Python tiene la siguiente forma:

if condicion:
    sentenciasDentroCondicional
sentenciasFueraCondicional

Cómo pueden ver, lo que diferencia un código de otro es el indentación, el margen o la sangría. Ahora ¿por qué es tan importante saber esto? Pues simple, porque por costumbre los desarrolladores utilizamos la tabulación para indentar el código y los editores de texto avanzado, que están preparados para codificar, e incluso los que no tan avanzados, tienen distintas formas de hacer esa tabulación en el texto (por ejemplo, gedit por defecto coloca lo que en una cadena de texto es un “\t” o una tabulación ASCII, algunos coloca 3 ó 4 espacios en blanco), y esto suele traer problemas a la hora de codificar en distintas computadores, distintos editores y/o en la edición colaborativa de código. Así que asegurate de establecer bien claro en las opciones de tu IDE, o editor de textos la forma en la que se deben comportar las tabulaciones; yo recomiendo utilizar 4 espacios en blanco, pero es decisión de cada quién.

Una última cosa antes de empezar con las estructuras condicionales y bucles: el separador de sentencias es la nueva línea, es decir que una sentencia se separa de otra sólo si está en otra línea. Por ejemplo:

sentencia1

sentencia2

sentencia3

En Java y C/C++ el delimitador es el punto y coma (“;”), pudiendo tener (aunque no sea lo que se estila normalmente):

sentencia1;sentencia2;sentencia3;

Las Estructuras condicionales

Ya les dí un abreboca de lo que son los condicionales en Python. La estructura es la siguiente:

if condicion:

En esta estructura condición es cualquier expresión booleana, es decir, una expresión que devuelva verdadero o falso, o incluso una variable de tipo booleana. En Python la tabla de comparadores es muy similar a la de otros lenguajes e incluso los operadores booleanos:

Operador Significado
== Igual
!= Distinto
< Menor
> Mayor
<= Menor o Igual
>= Mayor o Igual
AND “Y” lógico
OR “O” lógico
NOT “No” lógico

Después de la condición se colocan dos puntos (“:”), para dar comienzo en la siguiente línea a las sentencias que se ejecutaran si la condición es verdadera (“True“) Luego del “if” tenemos el “else“, para lo cual se le coloca la palabra reservada “else” seguida de los “dos puntos” y las sentencias que se ejecutarán en caso de que la condición no se cumpla deben ir indentadas. La estructura queda así:

if condicion:
    sentenciasQueSeEjecutanSiCondicionEsVerdadera
else:
    sentenciasQueSeEjecutanSiCondicionEsFalsa

Y para terminar con las estructuras condicionales, en python contamos con el “elif” para hacer estructuras condicionales anidadas, es decir, cuando necesitamos condiciones dentro de condiciones.

if condicion1:
    sentenciasQueSeEjecutanSiCondicion1EsVerdadera
elif condicion2:
    sentenciasQueSeEjecutanSiCondicion2EsVerdadera
elif condicion3:
    sentenciasQueSeEjecutanSiCondicion3EsVerdadera
else:
    sentenciasQueSeEjecutanSiNingunaCondicionEsVerdadera

En C/C++ y en Java esas estructuras no existen, sino que para hacer estructuras condicionales con varias condiciones se anidan las instrucciones “if” unas dentro de otras:

if (condicion1){
   sentenciasQueSeEjecutanSiCondicion1EsVerdadera;
}else{
   if (condicion2){
      sentenciasQueSeEjecutanSiCondicion2EsVerdadera;
   }else{
      if (condicion3){
         sentenciasQueSeEjecutanSiCondicion3EsVerdadera;
      }else{
         sentenciasQueSeEjecutanSiNingunaCondicionEsVerdadera;
      }
   }
}

Recordando siempre que en estos lenguajes el indentado no es obligatorio, ni el cambiar de línea; y que las llaves no tienen que estar alineadas, siempre que estén completas. Pudiendo quedar el código de la siguiente manera:

if (condicion1){sentenciasQueSeEjecutanSiCondicion1EsVerdadera;}
else{if (condicion2){sentenciasQueSeEjecutanSiCondicion2EsVerdadera;}
else{if (condicion3){sentenciasQueSeEjecutanSiCondicion3EsVerdadera;}
else{sentenciasQueSeEjecutanSiNingunaCondicionEsVerdadera;}}}

Así el código es menos legible.

Los Bucles ó Ciclos

Los ciclos son el último tópico que tocaré en este post. Dividimos esta sección en dos partes: “while” y “for”. El “repeat” no existe en python, por eso no lo trataremos. Realmente un ciclo “repeat” se puede escribir como un ciclo “while”, asegurando que la condición se cumpla por lo menos la primera vez.

Ciclo “while”

El ciclo “while” tiene una construcción muy sencilla, consta de la palabra reservada while seguida de la condición y luego dos puntos (“:”). El código queda así:

while condicion:
   sentenciasQueSeEjecutanMientrasLaCondicionEsVerdadera
sentenciasQueSeEjecutanCuandoLaCondicionDejeDeCumplirse

Cabe destacar que siempre es necesario que la condición cambie en algún punto del programa porque sino no dejará de ejecutarse la parte interna de un ciclo.

También hay que tomar en cuenta los mismos tópicos de comparación que con el “if” cuando comparas el “while” de python con el “while” de C/C++ o Java, es decir, en Python no se requiere que la condición esté entre paréntesis, es necesario que los dos puntos (“:”)sigan a la condición y que las sentencias que se ejecuten dentro del ciclo estén indentadas.

Ciclo “for”

El ciclo “for” es algo un poco más difícil de entender al principio para los que venimos de lenguajes “estilo-C” como C++, Java o PHP. En Python el ciclo “for” es un iterador sobre listas (las listas las veremos en otro post), pero para hacer la comparación contra C/C++ y Java, haremos uso de la función “range()” para recorrer una secuencia de números (sólo mostraré un uso simple, la función tiene más usos que los que veremos acá).

Un ciclo “for” en Python se hace así:

for variable in range(10):
   sentenciasQueSeEjecutaranDuranteLasVueltasDelCiclo

Cómo podemos ver el ciclo es algo más natural. Podríamos leer el ciclo de la siguiente forma: “Para el valor de la variable dentro del rango”. La función range() genera una secuencia de números desde 0 (cero) hasta el valor que se coloca como parámetro.
En C/C++ y Java, el “for” tiene una construcción un poco diferente:

for (variable=valorInicial; condicionDeVariable; cambioDeVariable)
{sentenciasDentroDelCiclo;}

En esta construcción se debe recordar que condicionDeVariable es una condición donde normalmente se indica que la variable es menor o mayor a algo, y cambioDeVariable es una cambio que se ejecuta en la variable del ciclo, puede ser un incremento o un decremento, depende de lo que se quiere hacer. Esa diferencia es importante, en Python nos movemos en un rango incremental, para ir en una secuencia decremental hay que proporcionarle más parámetros a la función range(), pero eso lo veremos en otro post.

En conclusión Python es un lenguaje bastante simple, y con una forma de codificar muy limpia y ordenada que es obligada por el lenguaje. Espero que puedan engancharse al igual que me he enganchado yo.

Saludos,
Be Free, Be Linux…

Advertisements

3 comments

  1. La primera línea de ejemplo no la hiciste más fea porque no pudiste. En efecto, es una manera poco elegante de programar -que a muchos he visto utilizar- pero que no todos usamos.

    Sin embargo, esa línea presenta otras pocas diferencias con Python que no mencionaste, a parte de la indentación:

    * Obliga a utilizar “paréntesis” en el predicado de la estructura condicional.
    * Obliga a utilizar “corchetes” para marcar el inicio y el fin del bloque.
    * Obliga a utilizar “punto y coma” para indicar el final de la instrucción.
    * Se utilizan los “dos puntos” sólo para marcar el inicio del bloque, ya que el bloque _debe_ estar indentado.

    IMNSHO, creo que Python es uno de los mejores lenguajes de programación; pero no es útil para algunos casos particulares, como escribir el kernel o la fabricación de drivers, para lo cual sigue siendo la mejor alternativa programar en Lenguaje C.

    Java, ni hablar.


    • Muy de acuerdo, gracias por las correcciones, las tomaré en cuanta para la actualización del artículo. Por cierto, está incompleto cómo te pudiste dar cuenta, fue un error que cometí que le dí “Publicar” en vez de “Guardar Borrador”, pero bueno, así salió.

      Saludos,
      Eduard “X3MBoy” Lucena


  2. LOL… No pille que ya tenias más post sobre python!! xD…



Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Google+ photo

You are commenting using your Google+ account. Log Out / Change )

Connecting to %s

%d bloggers like this: