jueves, 5 de marzo de 2009

SENTENCIAS CONDICIONALES

Para escribir programas utiles, casi siempre necesitamos la capacidad de comprobar ciertas condiciones y cambiar el comportamiento del programa segun la condicion presente. Las sentencias condicionales nos dan esta capacidad. La forma mas asencilla es la sentencia if:

SENTENCIA IF:

def main():
numero=-8
if numero > 0:
____print"positivo"
else:
____print"negativo"


if __name__ == "__main__":main()

como vemos manejo un if con un else si numero es mayor que cero imprima positivo else (sino)
pues imprima negativo asi de sencillo :)

ok aqui tenemos otra:

if numero < style="color: rgb(0, 0, 0);">____print “Negativo”
elif numero > 0:
____print “Positivo”
else:
____print “Cero”

el primer lugar verifica que numero sea menor que cero si se evalua con verdadera imprime negativo y elif y else se ignoran, pero si numero no es negativo pregunto si es mayor que 0, si se evalua como verdadera imprimo positivo y else se ignora, si el numero no es negativo ni mayor a cero pues blanco es y gallina lo pone :) pues el ultimo else imprime cero ya que evaluaron como false el if y el elif.

Bueno ahora biene el switch pero momento en python no existe :( pero se podria emular con un simple diccionario :) veamos como:

def hola():
____print "hola"
def adios():
____print "Bye"

def defecto():
_____print "soy el default"


def main():
____switch = {
____0:hola,
____1:adios

____}
____switch.get(5,defecto)()



if __name__ == "__main__":main()

Bueno defini tres funciones hola() que solo imprime hola, adios() que solo se despide y la funcion default o por defecto si se acuerda para lo que han trabajado en otros lenguajes esta se ejecuta cuando si dentro de las opciones switch no coinciden con ninguna pues pasa a ejecutar dicha funcion, lo que llame switch ={0:hola,1:adios} este es nuestro diccionario y con la funcion get que esta explicada en el post de diccionario la funcion busca la key que le paso como argumento si la encuentra en el diccionario me ejecuta la funcion segun la key si no pues me ejecuta la funcion que le paso como parametro opcional en ese caso de no encontrar una key en especifico en el diccionario, como ven yo le paso 5 al buscar el el diccionario solo existe el 0 y el 1 asi que no existe dicho key y al pasar eso pues me imprime mi funcion por defecto () :) si le pasan el 1 pues va imprimir adios, bueno solo practiquen y si les da algun error me lo hacen saber ;)


BUCLES:

Mientras que los condicionales nos permiten ejecutar distintos fragmentos de código dependiendo de ciertas condiciones, los bucles nos permiten ejecutar un mismo fragmento de código un cierto número de veces, mientras se cumpla una determinada condición.


WHILE():
Veamos un ejemplo pra ver como funciona el while imprimiendo los numeros del 1 al 10:

def main():
i=1
while i <= 10: ____print i
____i+=1
if __name__ == "__main__":main()

Bueno esto es muy facil tambien aqui i inicia valiendo 1 el cual while lo evalua preguntando si i en menor o igual a 10 en caso de ser verdadero ejecuta el print y aumenta en uno el i la expresion i+=1 es igual que decir i=i+1 o i++ ahora i vale 2 y pregunta de nuevo 2 es menor o igual a 10 verda!!! pues imprime i y aumenta la i y ahora vale 3 bueno en ese ciclo va dura hasta que llegue a 10 y pregunta 10 es menor o igual a 10 verda!! son igual imprime 10 y aumenta i y ahora vale 11 vuelve y pregunta 11 es menor o igual 10 ni menor ni gual asi que falso!!!! y termina el ciclo :)
una explicacion muy prekinder pero vale si sos totalmende principiante :)

tambien lo podemos hacer en un ciclo infinito y preguntar que si llego a 10 para romper nosotros mismos el ciclo:


def main():
___i=1
___while True:
_____print i
_____if i==10:
________break
i+=1


if __name__ == "__main__":main()

Aqui lo que hago es un ciclo infinito no saben que es infinito ?? pues eliminen del algoritmo el break y lo corren asi y me dicen si algun dia termina de ejecutarse :) aqui el simpre va imprimir i
que incia en 1 bueno la imprime y de inmediato preguntamos que si la i vale 10 sino aumenta en 1
asi sigue imprimiendo 1 2 3 4 5 6 7 8 9 10 cuando llega a 10 se jecuta el break que rompe el ciclo infinito en caso de eliminar el break siguira imprimiendo sin terminar nunca 11 12 13 14 15 ...........................................................................................................................................................................


ahora miren este:

def main():
__i=1
__print i
__while True:
____if i==10:
______break
____i+=1
____if i % 2 == 0:
______continue
print i

if __name__ == "__main__":main()


cual sera el resultado de este codigo ?????? bueno se los dejo de tarea :) pero les voy a explicar que hace continue pues simplemente salta a la proxima iteracion :D bueno por esta vez lo voy a explicar el print que esta fuera del while me imprime 1 ya que i la inicie en 1 :) bueno entramos al ciclo infinito i==10 falso ya que 1 no es igual a 10 pues no ejecuta el break asi que seguimos i+=1
ahora desde aqui i vale 2 ;) ahora pregunta if % 2 == 0 pues aqui solo digo si el modulo de la division es igual a 0 si es verdadero pues nuestro numero es par ahora como nuestra i vale 2 es par asi que ejecuta continue y esto hace que salte a la siguiente iteracion asi que ignora el print y pasa a la siguiente iteracion, asi que esto al final me va imprimir solo numeros impares :)

FOR ...IN

secuencia = [“uno”, “dos”, “tres”]
for elemento in secuencia:
____print elemento


Los for en python se utilizan para recorrer secuencias en el caso anterior utlize una lista, el algoritmo es sencillo para cada elemento en la secuencia imprima elemento asi se lee de una forma natural bueno la primera vez elemento contiene uno imprime uno, la segunda contiene dos e imprime dos, la tercera elemento contiene tres e imprime tres asi va elemento por elemento hasta el final de la secuencia, los que han programado en C/C++ saben que el for lo han utilizado para iterar sobre las posiciones y no sobre los elementos

int mi_array[] = {1, 2, 3, 4, 5};
int i;
for(i = 0; i <>
printf(“%d\n”, mi_array[i]);
}

El enfoque e Python es mucho mas natural :)

Bueno si muy bonito pero en C/C++ para imprimir numero del 50 al 100 con for es muy facil pero como le hago con python ??? no me digas que tengo que contruir una lista del 50 al 100 para
luego recorrerla con for :( pues si pero para eso existe range() una funcion para generar secuencias de numeros veamos:

def main():
___i=range(50,101) #si estan con Python3 hacen i=list(range(50,101))
___for numero in i:
_____print numero
if __name__ == "__main__":main()


1 comentario: