Un programa no es demasiado complejo, en especial si tomamos como base el hecho que los programas solo se dedican a tomar decisiones según lo que esté ocurriendo en ese momento o lo que el usuario haya elegido; nuestros programas ya pueden interactuar con variables, mostrarlas por pantalla y muchas cosas bonitas, pero no pueden tomar decisiones por ellos mismos, tal y como estamos en este momento, no es mucha diferencia entre programar algo y ejecutarlo, ya que si quieres que el programa tenga algún comportamiento diferente, se lo has de tener que reprogramar en el código, pero no se permite eso de escribir partes de código que se ejecuten si algo es cierto o falso.
Un buen programa se define en hacer que el usuario tenga una posibilidad de elegir algo, según que sea lo que el usuario haya elegido, el programa dará un valor a una variable, luego, mediante una sentencia especial que ahora mismo veremos, el valor de la variable se compara con otro que ya tiene definido el programa, si el valor de la variable es igual que el que ya tiene el programa, se hace una acción, si es diferente, se compara con otro o se ignora, eso es programable por nosotros en todo el código fuente.
A este tipo de sentencias que se encargan de comparar si algo es cierto o falso se le llaman condicionales, y es lo que vamos a ver aquí.
IF
La sentencia if se da a la tarea de comparar si dos datos son iguales, diferentes o lo que se le indique, para esto también sirven los operadores que habíamos visto en la segunda entrada.
La sintaxis de la sentencia es como sigue:
if 0 == 0:
código que ejecutará el programa
else:
otro códigoAquí vemos la simplicidad de if, lo que dice esto es que comparará que 0 sea igual a 0(recuerda que en los operadores los dos signos de igualdad representaban que un dato era igual a otro) y en caso de que sea positivo, es decir, que 0 sea igual a 0, ejecutará el código que se muestra después de los dos puntos y sangrado, es muy importante utilizar la tabulación, espaciado o algún método que haga que Python pueda identificar que es indentado, ya que en eso se basa Python para saber si ese código es el que se debe ejecutar al cumplirse la condición.
El creador de Python sugiere que se tome como indentación espacios antes que tabuladores, es decir, en tiempos antiguos se utilizaba el tabulador para sangrar el código fuente, pero creo que esta convención ha quedado un poco anticuada, así que en lugar de dar una tabulación se sugiere que se utilicen 4 espacios antes del inicio de cada línea de un bloque de código o de una función.
Después de esto, podemos ver una línea que dice “else:”, esto se ejecutará en caso de que la condición que 0 sea igual a 0 sea negativa.
En sentencias como las condicionales o los iteradores, es muy importante no olvidar dos cosas: Primero, que no se debe escribir la sentencia sin olvidar los dos puntos al final y segundo, que después de eso, es necesario pasar un tabulador para poder escribir el bloque de código que se ejecutará al cumplirse la condición.
Vamos a solidificar esto con un útil programa que puede tomar decisiones según una variable que vamos a definir; como ya lo has de saber, ve a tu editor de textos y guarda el ejercicio en la carpeta que has designado para ello, aquí el código:
#!/usr/bin/env python
# -*- coding: utf-8 -*-
variable = 25
if (variable < 10):
print 'el número que has ingresado es menor a 10'
print 'número: %i ' % (variable)
raw_input()
else:
print 'el número que me has ingresado es mayor a 10'
print 'número: %i ' % (variable)
raw_input()si lo ejecutamos, vamos a ver porqué es tan importante la condicional if, ya que como podemos ver, hacemos que compare el valor de variable y verifique si el número es menor a 10, en caso de que sea menor a 10, se ejecutarán solo las líneas de código que tengan una tabulación, pero también podemos ver lo que usamos en este programa, que fue la sentencia else, viene junto con if y se caracteriza por ser una alternativa, como en este ejemplo, si la condicional comparaba el número 25 que tenía la variable, daba como resultado falso, ya que no es menor a 10, entonces, si el programa no tuviera una condicional else, terminaría y jamás mostraría nada por pantalla, ya que if solo ejecutará su código cuando la condición sea positiva, entonces, al escribir una sentencia else, le decimos al programa “ejecuta este código si no se cumple la condición”.
A muchos nuevos programadores les resulta enredoso meterse de lleno a comparar valores y hacer una u otra cosa según su resultado, a otros no les importa en lo más mínimo y solo con leer la documentación pueden comenzar a probar, no es del todo importante que lo hagas a la primera vez que lo intentas, lo que sí es bastante importante, es que no dejes dudas en nada de este procedimiento, ya que esto puede y muy seguramente va a traer consecuencias muy grabes en tu futuro como aficionado en la programación, así que es mejor dedicarle la cantidad de tiempo que tú creas necesario para que puedas lograr un mejor dominio de las condicionales y los iteradores.
Si el código de el programa queda como lo hemos guardado, significa que jamás se ejecutará el código que tiene if, ya que la variable será siempre mayor de 10, pero no por eso necesitamos eliminarlo, ya que uno como programador no sabe si el usuario tomará una u otra decisión y necesitamos estar preparados para todo.
Solo para comprobar que la condicional está funcionando, cambia el valor de variable a un número como 6 o 5, para que se ejecute el código que tiene if.
Solo una vez que hayas comprendido como utilizar if, pasamos al siguiente párrafo de información, que creo que será bastante útil a la hora de programar.
La sentencia if se encarga de comprobar, pero he aquí una desventaja, imaginemos que necesitamos hacer muchas comprobaciones, por ejemplo, que tenemos un número y necesitamos comprobar que sea mayor que 10 o mayor que 20 o mayor que 30 o mayor que 40 o mayor que 50; con nuestros conocimientos actuales y teniendo en cuenta que existe una variable d nombre num, podríamos resolver el problema de la siguiente manera:
if (num > 10):
print 'num mayor que 10'
if (num > 20):
print 'num mayor que 20'
if (num > 30):
print 'num mayor que 30'
if (num > 40):
print 'num mayor que 40'
if (num > 50):
print 'num mayor que 50'
else:
print 'esto no es un número'Aquí podemos ver que cada if es un bloque de código diferente, pero aunque ningún if lleve un else, solo es necesario uno para que se pueda tomar una alternativa, de hecho la condición else es opcional al 100%, no pasaría nada si no se escribe, pero necesitamos dar por asumido que el programa jamás cometería errores o que el usuario jamás manipularía de forma equivocada el programa, cosa que es imposible de asegurar.
Como cada if es un código independiente, esto quiere decir que si num toma un valor de 11, será mayor que 10, pero no por ello acabará el código, nosotros como programadores esperaríamos que se mostrara el resultado de que sea mayor que 10 y terminara el programa, y sí, solo mostrará el resultado y cerrará, pero no sin antes hacer comprobaciones inútiles.
Explico: al dar como positivo que num valga mayor que 10, la sentencia no se detendrá, más bien, ejecutará el segundo if(como había dicho, cada if es independiente) y comprobará y dará negativo, luego ejecutará el tercero y así llegará hasta el else y ejecutará su contenido, dando errores en el resultado.
Si decidieras no escribir else por el error ya comentado, aún sería una fuga de memoria ya que aún y cuando los resultados de la primera comprobación indiquen que lógicamente debe de dejar de comparar, lo seguirá haciendo porque cada if se atiende por separado.
En este caso no se notará ningún retraso, pero es difícil acostumbrarse a malos hábitos de programación porque esto al comparar datos complejos sí tardará muchísimo tiempo.
Lo que Python nos brinda para hacer solo una comprobación y cerrar si es positivo es la sentencia elif(else if) y se usa de la misma manera que en los ejemplos anteriores, entonces, en el caso que necesitemos que la condicional termine si un número es mayor a 10, 20, 30, 40 o 50 es hacer el mismo código, pero poniendo elif en lugar de if, así:
if num > 10:
print 'el número es mayor que 10'
elif num > 20:
print 'el número es mayor que 20'
...
elif num > 50:
print 'el número es mayor que 50'
else:
print 'esto no es un número'como podemos leer, no se puede usar un “elif” al principio, este solo se puede usar después de poner una sentencia if.
Lo que pasa con esto es que al momento de hacer la comprobación, si el primer resultado(es decir: cuando compara al primer y único if) da negativo pasa a comprobar al elif y sigue con las comprobaciones hasta detenerse en el elif o else, según sea el caso, pero aquí, en el ejemplo que num valga 11, se detendrá en el primer if que dice que num sería mayor que 10 y ya no hará nada, porque todos los demás condicionales forman parte del primero, es como si ahora sí estuvieran unidos y no se tomara a cada una de las líneas de condición como un algo independiente, ahora esas líneas corresponden un todo.
También se puede hacer uso de la anidación para comprobar una condición dentro de otra, en todo caso, podríamos hacer que una condición comprobara que el número sea mayor que 10 y que dentro de esa condición se encuentre otra comprobación que revise si la variable es mayor o menor a 15 de la siguiente manera:
if num > 10:
if num < 15:
print 'la variable es menor a 15'
if num > 15:
print 'la variable es mayor a 15'
else:
print 'la variable no se encuentra entre 10 y 15'En esta condición se puede ver que si se desea meter una condicional dentro de otra solo se necesita de una doble indentación, es decir, indentar en lugar de con 4 espacios con 8 el bloque de código de la segunda condicional, se pueden anidar tantas condicionales como se necesite.
Operadores or y and
Para recordar un poco, los operadores de comparación de valores que se pueden utilizar son la comparación de mayor(Símbolo de >), menor(símbolo de <), igual a(símbolos de ==), mayor o igual que(símbolos de <=), menor o igual que(símbolos de <=), pero existen operadores para elaborar condicionales múltiples, es decir, en el ejemplo anterior, si se deseara que el número fuera evaluado mayor que 10 y menor a 15, puede escribirse una sola condicional en lugar de una condicional con otra dentro de ella.
Para este caso se puede utilizar el operador and, que como puedes imaginar, significa y en inglés, así que puedes hacer dos o más comparaciones de la variable.
La sintaxis de una sentencia if utilizando el operador and es así:
if variable1 == 0 and variable2 == 0:Esta condicional ejecutará su código interno si las dos variables dan positivo a la evaluación, no es recomendable escribir este tipo de condicionales cuando no se sabe si una de nuestras variables no dará el resultado que esperamos, en este ejemplo, tenemos que estar seguros de que el resultado de ambas variables puede ser 0 para que se ejecute la condición, pero si una de estas dos variables cambia el valor no se ejecutará la condicional.
En el ejemplo que se desee comprobar que num tenga un valor mayor a 10 y menor a 15, se puede escribir una condicional de la siguiente forma:
if num > 10 and num < 15:
print 'la variable es mayor que 10 y menor que 15'Las sentencias if no se encuentran limitadas a un número de 2 comprobaciones, se puede usar el operador and tantas veces como se desee, pero no es muy recomendable si una de las variables puede adquirir otro valor; el uso de este tipo de sentencias sería recomendable cuando el cambio de valor de una de las variables comprobadas afectara a todas las demás.
Por último, el operador or se utiliza para dar una opción(or es o en inglés), a la comprobación, también se debe tener cuidado con el número de opciones, por ejemplo, se necesita para saber que se debe hacer si la variable vale una cantidad u otra, se puede usar así:
if var == 'hola' or var == 'que onda':
print 'Me saludas?'Esta condicional se utiliza para saber si una variable vale hola o que onda, en caso de ser cierto, se mostrará el mensaje por pantalla.
Cabe decir, sin embargo, que debes de utilizar este tipo de operadores solo cuando sea necesario, no debes de hacer malas costumbres y querer meter todas las verificaciones de datos dentro de una sola condicional.
Bucles.
Sin duda alguna, las condicionales aportan bastante flexibilidad a nuestros programas python, pues pueden hacer que el programa tome una u otra decisión según el valor de una variable, para imaginar más allá, puede que el usuario escoja un valor que se le puede dar a la variable y ese valor sea el que se pase por la condicional... pero muchas veces no queremos que se ejecute un bloque de código una sola vez, en bastantes ocasiones lo que se necesita es que un código se ejecute un número de veces que nosotros elijamos.
Por ejemplo, podríamos tener una variable y querer que desde el número 1, la variable sume uno a su valor y lo muestre por pantalla hasta llegar al número 100, con la condicional if también se puede hacer, y sería algo de la siguiente manera:
if variable < 101:
print 'la variable vale %i' % variable
variable +=1
print 'la variable vale %i' % variable
variable +=1
...Esta forma obligaría al programador a escribir las dos líneas de código de manera repetitiva por 100 veces, cosa que haría muy pesado el programa, tanto para la ejecución por medio de la computadora como para escribirlo sin cometer errores.
Como una nota antes de seguir, al momento en el cual yo utilicé la sentencia(variable +=1) en sintaxis python significa algo como(variable = variable+1), aunque el segundo procedimiento es perfectamente válido, prefiero utilizar el primero, ya que es muy simple:
se escribe el nombre identificador de la variable, se escribe seguido de un espacio la operación que se realizará con ella, suma, resta, multiplicación, división o alguna otra; se escribe el signo de igual y se escribe el valor que se sumará, restará, multiplicará, dividirá o lo que hará...
Estos ejemplos son bastante válidos:
variable +=2 #suma 2 a variable
variable *=5 #multiplica por 5 el valor original de variableaunque como dije, no es la obligación de los programadores python adoptar el método que comento, es solo una sugerencia que permite ahorrar un poco de escritura al programador.
Ahora sí podemos proseguir... en promedio para mostrar una cuenta de número desde el 1 hasta el 100 utilizando algún método que no recurra a los bucles se deberían de escribir el programa en 200 líneas de código, bastante si consideramos que el uso de los bucles puede hacer maravillas.
While.
Quizá el bucle más utilizado es el bucle while(mientras) que repetirá un bloque de código mientras se compruebe con éxito el valor de algo.
En este ejemplo podremos ver su funcionamiento, puedes guardarlo en un script para ejecutarlo con el intérprete:
#!/usr/bin/env python
var = 1
while var <= 100:
print 'valor: %i' % var
var +=1
raw_input()El resultado es el que esperamos, quizá de una forma muy rápida, pero a final de cuenta lo es; este programa muestra los valores del 1 al 100.
while se puede usar con todos los operadores, pero es bastante preferible utilizarlo con menor o igual que(<=) o mayor o igual que(<=) por la simple razón de saber que no podemos usar igual a(==), ya que generalmente lo que necesitamos es ir incrementando una variable y si se comprueba su igualdad y no es igual no se ejecutará más el bucle.
Otro de los errores que no podemos permitirnos cometer mientras usamos el bucle while es olvidar incrementar el valor de la variable, ya que si no lo hacemos, el bucle comprobará de nueva cuenta el valor de la variable y como sería el mismo resultado, valdría lo mismo y el bucle jamás terminaría por no poder llegar jamás al valor esperado, a eso en el mundo de la programación se le llama bucle infinito y en el 90% de los usos está mal.
Por ejemplo, puedes volver a hacer el ejercicio del contador que iba hasta el número 100,, pero ahora con este bloque de código en lugar del while anterior:
#!/usr/bin/env python
# -*- coding: utf-8 -*-
var = 1
while var <= 100:
print 'valor: %i' % var
raw_input()Si aún y con este claro ejemplo de lo que será un bucle infinito no puedes comprender lo que sucederá, te invito a ejecutar el script para que puedas ver un resultado parecido a este:
valor: 1
valor: 1
valor: 1
valor: 1
valor: 1
...
Ese bucle por eso se considera infinito, el código se repetirá hasta que la variable llegue a 100, pero como puedes ver, eso jamás sucederá, aunque no creas que todos los usos de los bucles infinitos están mal, más adelante veremos la manera de hacer un menú principal para una aplicación gracias a esta característica que aportan los bucles de ser infinitos.
Bien, para la próxima entrada haremos unas cuantas monerías nuevas, a lo que yo llamaré amablemente “introducción a uso de funciones”, veremos los tipos de datos que faltan y que pueden ser algo así como la esencia de Python a lo que llamaré “listas y diccionarios” y veremos el último de los iteradores, pff, tenemos demasiado que ver para una o dos próximas entradas.
Saludos.