• Curso De Python3 Desde 0 (4ta Parte)

 #398857  por KHC
 23 Dic 2012, 05:10
Bueno santa bien duro esta navidad
Les dejo la 4 lectura donde nos enfocamos al control de flujo. DISFRUTEN LA LECTURA

Control De Flujo
------------------


El control de flujo de un programa, son de los temas principales temas que deben dominarse y deben quedar bastante claros y tomaremos el tiempo necesario para explicarlos.


If / else / elif
---------------


Lo clásico y como en la mayoría de los principales lenguajes de programación contamos con palabras reservadas y un formato que tenemos que respetar para poder hacer uso de las mismas.
Python, nos brinda el básico if/else/elif para poder tomar decisiones en el comportamiento del programa.

Si obtenemos una respuesta verdadera ‘True’ al momento de hacer uso de if/else se ejecuta el código que nosotros indicamos, en caso contrario ‘False’,
se ejecuta el resto del código indicado debajo de else.
No olvidemos que la marginación o identación que Python nos brinda, es para orientaron y saber en que parte del código estamos y al usar if/else no es la excepción,
también es imprescindible saber que para indicar que entramos en el bucle usemos ‘ : ’ después de poner nuestra palabra clave if/else y las condiciones:
>>> a = 1
>>> b = 3
>>> if a == 1:
	print('La variable vale: {0}'.format(a))
else:
	print('La variable vale {0}'.format(b))

La variable vale: 1
Este ejemplo realmente no es muy útil, pero nos servirá para explicar.
Primero indicamos que utilizaremos el bucle ‘if’
Segundo pasamos a decir nuestras condiciones, en este caso le decimos que si la variable ‘a’ es igual ‘==’ con el operador de comparación
–no confundir con el de asignación que es ‘=’—, que si es igual a el ‘int’ 1 y terminamos las condiciones con ‘ : ‘.
Después, Python nos da el marginado o identación para indicarnos que TODO lo que escribamos dentro de esa identación será tomado para el bucle ‘if’.
Indicamos que muestre en pantalla con print(), y como argumento le pasamos un string ‘La variable vale: {0}’ y ya sabemos que ‘{0}’ sirve para indicarle a format() donde colocar las cosas.
--Objeto, Método y Argumento(s)—
Entra format() como método de nuestro string y le pasamos como argumento la variable ‘a’ que seteamos antes de entrar al ciclo.
Realmente no es muy complicado, ahora modificare un poco el código para poder utilizar else –cuando la condición sea falsa—:
>>> if a == 2:
	print('La variable vale: {0}'.format(a))
else:
	print('La variable vale: {0}'.format(b))
	
La variable vale: 3
Bueno aquí no se me confundan, parece ser que el if está adelante del else y no tienen la misma marginación, pero realmente la tienen, si quitamos los ‘>>>’
el código se ve más claro.
Explico, indicamos que usaremos el bucle ‘if’ con la palabra reservada ‘if’, seguido de nuestras condiciones y es simple, que si la variable ‘a’ es igual ‘==’ a el int 2,
ejecute lo que esta abajo.
Y no es más que mostrar en pantalla el string y usamos format() para meter la variable dentro del string. Esto en caso de que la condición sea verdadera y como NO LO ES,
entra en juego ‘else’, que no es más que la otra cara de la moneda y se activa cuando se hacen las comprobaciones indicadas después del ‘if’ del principio.
En este caso es muy concreto lo que queremos hacer y tan solo tome este ejemplo para explicar, solo imprimirá el valor referenciado por la variable ‘b’ con format()
y meterlo en la string para mostrarlo en pantalla.

Realmente es muy sencillo esto del control de flujo, solo tenemos que tener claro lo que queremos hacer para saber que nos conviene usar más si un bucle ‘for’, ‘while’, ‘do/while’, etcétera…

También tenemos una pequeña variación que no existe en otros lenguajes y esta nace a partir de la famosa anidación de bucle –meter un bucle dentro de otro—
y para facilitar esta tarea Python nos brinda ‘elif’. Y esta simple como después de poner el código que se usara en ‘if’, salir del margina e indicar ‘elif’ y
la condición seguida de ‘ : ’, de esta forma:
>>> if a == 0:
	print('La variable contiene: {0}'.format(a))
elif a == 1:
	print('La variable contiene: {0}'.format(a))
elif a == 2:
	print('La variable contiene: {0}'.format(a))
elif a == 3:
	print('La variable contiene: {0}'.format(a))
else:
	print('La variable es mayor de del int 3')

	
La variable contiene: 1

Como vemos podemos utilizar los ‘elif’ que queramos sin limitarnos y la explicación es simple.
El código anterior se leería de la siguiente forma:
Código: [ Debe registrarse para ver este enlace ]
Si ‘a’ es igual a 0:
	muestra en pantalla bla bla bla
Si no intenta esto, si a es igual a 1:
	muestra en pantalla bla bla bla
Si no intenta esto, si a es igual a 2:
	muestra en pantalla bla bla bla
Si no intenta esto, si a es igual a 3:
	muestra en pantalla bla bla bla
Si ninguna de estas es VERDADERA ‘True’, haz lo siguiente:
	muestra en pantalla Que ninguna de la variable es mayor de 3
Bueno creo que se entiende sin problemas.
Pero en lo que es control de flujo muchas veces necesitamos hacer mas que simple comprobaciones, por ejemplo queremos saber si una variable es distinta de un valor,
entonces entran nuestros operadores en juego:
>>> if a != 10:
	print('La variable es distinta de 10')
else:
	print('La variable es {0}'.format(a))

La variable es distinta de 10
Y así de simple, podemos usar cualquiera de los que nos brinda Python y en el texto #2 les deje la tablita con operadores.
También podemos utilizar los operadores ‘lógicos’ como es ‘and & ’ or |’ para evitar muchas líneas de código:
>>> if a > 0 & a < 5:
	print('La variable se encuentra entre 1 y 5')
else:
	print(‘La variable es mayor a 5 o menor a 0’)

La variable se encuentra entre 1 y 5
En este caso usando ‘&’ nos permite agregar otra condición para ser evaluada y de ser las dos correctas ejecuta el bloque de código del ‘True’,
de lo contrario brinca directamente a else.
Y podemos también complicar un poco más el código para utilizar lo aprendido:
>>> if a < 0 | a > 10:
	print('Variable fuera del rango')
elif a == 10:
	print('La variable es 10')
elif a == 0:
	print('La variable es 0')
else:
	print('La variable esta dentro del rango de 1 a 9')

La variable esta dentro del rango de 1 a 9
El operador ‘ or ’ ‘ | ‘, se comporta de forma que con cualquiera de las condiciones se cumpla, ejecuta el código del ‘True’, de lo contrario –en nuestro programa—
antes de pasar directamente al ‘ else ‘, le indicamos unos ‘ elif ‘ para saber si la variable es 10 o 0 de no ser ninguna de estas, llega a ‘ else ’ y ejecuta lo que contiene este bloque.

También hay una forma de hacer más abreviado estos bucles, solo hay que tener cuidado al usarlos, puesto que si no se les emplea bien pueden confundir
mucho hasta al mismo programador o desarrollador y a los que le den mantenimiento al código o lo quieran leer:
>>> if a == 1: print('La variable es 1')
elif a == 0: print('La variable es 0')
else: print('La variable es distinta de 0 y 1')

La variable es 1
Como notaron evitamos la identación que Python por defecto nos ofrece y como dije deben tener cuidado con esta, con cosas simples si es conveniente usarla pero para condiciones más complejas tener cuidado. –un buen uso es cuando se anida un if dentro de otro sin usar elif—

Bucle For
------------


Este bucle al igual que ‘while’ es muy útil al momento de iterar sobre elementos.
Es simple y Python incorpora la función ‘range()’ para iterar sobre los elementos que se indiquen:

>>> for x in range(1, 6):
	print(x)

	
1
2
3
4
5
Para empezar, en los textos pasados les di una intro a cómo funciona el bucle ‘for’ y los entendemos pero no bien, asi que me dedicare a explicar como funciona este.

Primero, indicamos que entramos en el bucle con la palabra reservada ‘for’, seguido de una variable local ‘x’ que contendrá el valor del elemento dependiendo
en que numero de ciclo vaya el bucle.
Seguido de la variable local indicamos la palabra reservada ‘in’ –en– y seguido de la función ‘range()’ que toma como argumento el elemento sobre el que vamos a iterar.
Damos return –mejor conocido como enter— y Python nos cambia de línea y nos da la identación para escribir lo que hara nuestro bucle en cada ciclo que complete.
En este caso mostrar en pantalla la variable local en cada ciclo y asi es como conseguimos obtener todos los elementos.

Si pusieron atención en la función range() solo indicamos dos argumentos y es donde inicia a contar y donde termina –tomar en cuenta que evita el ultimo carácter—.

Sencillo yo? El truco es prestar atención en que el bucle ‘for’ trabajo por ciclos y lo que tu indiques dentro del ciclo es lo que hará una y otra vez,
hasta terminar de iterar los elementos indicados.

Y como vimos en el texto anterior también podríamos hacerlo sobre una lista, tupla, diccionario o array:
>>> for x in li1:
	print(x*2)

	
2
4
6
8
10
Solo que en lugar de indicar la función range() y el rango, ya lo tenemos y son los elementos dentro de nuestra lista.
Y le decimos que cada elemento lo multiplique por 2 dentro de print().

Tambien el bucle ‘for’ admite la palabra reservada ‘else’ y sabemos para que funciona en la toma de decisiones con ‘if’, solo que en el bucle ‘for’ cambia un poco el uso
y si no se contiene un ‘break’ –que veremos más adelante— esta se ejecuta al terminar el bucle, es decir cuando no tenga más elemento que recorrer:
>>> for x in li1:
	print(x*2)
else:
	print('Fin del bucle \'for\' ')

	
2
4
6
8
10
Fin del bucle 'for'
Muy simple, no tiene mayor problema. Lo nuevo aquí si lo notaron es que como parámetro dentro del print(), puse un string y dentro algo asi ‘\for \‘,
y no se mostraron las ‘ \ ‘ digonales, esto es por que al tratar strings y dentro de uno todo lo que siga de la ‘ \ ’, será ignorado y tratado como string,
en este caso las ‘ ‘ ‘ comillas simples.

Y ya sabiendo esto pueden jugar con los bucles ‘for’:
>>> for x in range(1,11):
	print(x*5)
else:
	print('Tabla del cinco')

	
5
10
15
20
25
30
35
40
45
50
Tabla del cinco
El clásico ejemplo de la tabla de multiplicación con un bucle ‘for’ y a partir de aquí es jugar con estos para dominarlos.

Bucle While
---------------


Bueno llegando a este punto iremos comprendiendo porque es control de flujo y como funciona.
El bucle ‘while’ al igual que ‘for’, nos permite iterar sobre objetos y es un bucle, solo que con distintas características. Una de ellas es que ‘while’ es necesario que se cumplo una condición o condiciones para seguir la ejecución del bucle, de lo contrario termina:
>>> while a <= b:
	print(a)
	a += 1

	
0
1
2
3
4
5
6
7
8
9
10
Explico, primeramente indicamos con la palabra reservada ‘while’ que entraremos en el bucle, seguido de nuestras condiciones que en este caso
comprobara que el valor de la variable ‘a’ sea menor o igual al valor de la variable ‘b’ y mientras esta condición se cumpla ‘True’, será ejecutado el ciclo
y así sucesivamente hasta que la condición de ‘False’ y se interrumpe el ciclo. También esta operación ‘a+=1’ equivale a ‘ a = a +1’ solo que abreviado.

Es muy similar al bucle ‘for’, pero si se ponen a analizar, entenderán las pequeñas diferencias que tienen y como pueden sacarle ventajas y en qué casos : ).

También, el bucle ‘while’ al igual que el ‘for’ admite el uso de la palabra reservada ‘else’:
>>> a = 1
>>> while a <= 10:
	print(a)
	a += 1
else:
	print('fin del bucle')

	
1
2
3
4
5
6
7
8
9
10
fin del bucle

Este entra en juego al no cumplirse la condición como podemos ver en el ejemplo.


Sentencia Break En For / While
------------------------


Bueno esta es una palabra reservada que el mismo nombre indica su función y es detener el flujo de un programa en determinado punto.
Es muy utilizada en control de flujo y podemos utilizarla tanto en el bucle ‘for’ como en ‘while’ .
Pondré un ejemplo de cada uno utilizando break:



FOR
>>> for x in range(1,10):
	print(x)
	if x == 8:
		print('Entra break')
		break

1
2
3
4
5
6
7
8
Entra break
WHILE
>>> x = 0
>>> while x <= 10:
	print(x)
	x+=1
	if x == 8: break

	
0
1
2
3
4
5
6
7
Sentencia Continue En Bucles For / While
---------------------------------


Esta palabra reservada también, está asociada con el control del flujo. Sirve para hacer un ‘skip’, es decir brinca directamente al siguiente ciclo del bucle,
si por ejemplo iteraramos sobre un rango de números y solo quisiéramos imprimir los que son pares:

FOR
>>> for x in range(1, 11):
	if x % 2 != 0:
		continue
	print(x)

	
2
4
6
8
10
Ahora si lo queremos hacer en el bucle ‘while’, debemos seguir el mismo principio.

Sentencias Pass
---------------------


Python tiene una sentencia especial que no hace nada xD. Así es se trata de ‘pass’, esta palabra reservad, siempre y sencillamente función para no hacer nada.
El truco de esta sentencia, es que muchos programadores la aplican para crear esqueletos de código, para después pasar a rellenar con código
donde antes se utilizaba ‘pass’. Por ejemplo, si quieres limitar las funciones de un programa por que es una beta o una versión free,
‘pass’ sirve bastante ya que no tienes que dar en blanco las parte a limitar, simplemente las rellenas con pass y si algún cracker o breaker quiere crackear,
tendrá que reconstruir la parte de código que falta ; ).
>>> x = 1
>>> if x == 0:
	print('Igual a 0')
elif x == 1:
	pass
elif x== 2:
	pass
else:
	print('desconocido')

Un ejemplo muy simple, suponiendo que no sabemos que queremos que realice si la variable ‘x’ es igual a 1 o a 2.

Sentencia With
-------------------


La palabra reservada ‘with’ se utiliza con objetos que soportan el protocolo de manejador contexto y garantiza que una o varias sentencias serán ejecutadas automáticamente.
Por ejemplo, al tratar ficheros de texto es necesario cerrarlos al terminar de trabajar con estos y ‘with’ nos garantiza esto automáticamente sin
ser necesario llamar al método close() –lo veremos más adelante—:
>>> with open('README.txt','r') as fichero:
	for linea in fichero:
		print(linea)

		
This is Python version 3.2.3

============================



Copyright (c) 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011,

2012 Python Software Foundation.  All rights reserved.
Y así logramos leer el fichero README.txt en el c:/Python32

Suficiente por este texto, como siempre espero haya sido de su agrado la lectura.
Y como vimos no es tan difícil el control de flujo de los programas y mas adelante iremos haciendo cosas mas interesante con todo lo que hemos aprendido.

[ Debe registrarse para ver este enlace ]
@Greydotsec
@julianstafari