sábado, 22 de octubre de 2016


sentencias básicas


Sentencias (Programación). Son las unidades ejecutable más pequeña de un programa, en otras palabras una línea de código escrita es una sentencia. Especifican y controlan el flujo y orden de ejecución del programa. Una sentencia consta de palabras clave o reservadas como (cout, cin, for, while, if... else, etc.), expresiones, declaraciones, o llamadas a funciones.

Sentencias Rol Ejemplo
Asignación Crear referencias a, *b = 'bueno', 'malo', 'tonto'
Llamadas y otras expresiones Ejecutando funciones log.write("spam, ham")
print imprimir objetos print("
if/elif/else Seleccionando acciones if "python" in text:
   print(text)
for/else Secuencia e iteración for x in mylist:
     print(x)
while/else Loop general while X > Y:
    print('hello')
pass marcador de posición de vacío while True:
   pass
break finalizar loop while True:
   if exittest(): break
continue continúa el loop while True:
    if skiptest(): continue
def Funciones y métodos def f(a, b, c=1, *d):
     return a+b+c+d[0]
yield Generador de funciones def gen(n):
    for i in n: yield i*2
global espacio de nombres (namespaces) x = 'old'
def function():
     global x, y; x = 'new'
import acceso a módulos import sys
from acceso a atributos from sys import stdin
class construcción de objetos class Subclase(Superclase):
     staticData = []
   def method(self): pass
try/except/finally Capturar excepciones try:
    action()
except:
     print('action error')
raise generar excepciones raise EndSearch (location)
assert Depuración de los controles assert X > Y, 'X demasiado pequeno'
with/as Manejadores de contexto with open('data') as myfile:
process(myfile)
del Eliminar referencias del data[k]
del data[i:j]
del obj.attr
del variable

sentencias de condición o bifurcaciones


Echa un vistazo a la siguiente expresión:

if 2 > 3:
    print("Python no funciona: cree que 2 es mayor que 3.")
elif 2 == 3:
    print("Tampoco: ahora cree que 2 es igual a 3.")
else:
    print("Efectivamente, 2 es menor que 3. Y así debe ser.")

Si no sabes inglés, simplemente te faltaba por saber que if significa “si”, sin tilde, condicional; else significa “en otro caso”, o “si no”;elif es simplemente una contracción de else e if. La parte de elif se podría haber omitido (es opcional) o repetido muchas veces, para evaluar toda una retahíla de condiciones alternativas. El final de la construcción,else, también es opcional pero sólo puede escribirse una vez.

Es obvio que el resultado de la sentencia de ejemplo va a ser la frase “Efectivamente, 2 es menor que 3. Y así debe ser.”

Así, queda clara la estructura de las condiciones en Python: se escriben usando la sentencia compuesta if… elif… else. Nos proporciona una forma de especificar una condición principal que si se cumple, ejecuta un bloque de código. Para los casos en los que esa condición no se cumpla, podremos opcionalmente especificar una serie arbitrariamente larga de condiciones alternativas que si se cumpliesen, harían que el intérprete de Python ejecutase otros bloques de código. Por último podremos especificar opcionalmente un último miembro que se ejecutará si todo lo demás es falso.
Las condiciones de esta sentencia compuesta son excluyentes, tal y como marcan las conjunciones inglesas “else”, que podemos entender como “por el contrario”. if… elif… else especifica lo que se conoce como un árbol de reglas: en el momento en el que se cumple una de sus condiciones, el código toma una dirección y el resto del árbol no se evalúa. Es algo que quiero enfatizar de forma muy clara con un ejemplo:

if 3 > 2:
    print ("3 es mayor que 2.")
elif 3 < 5:
    print ("3 es menor que 3.")

elif 4 < 9:
    print ("4 es menor que 9.")

else:
    print ("Si lees esto, no sé qué está pasando.")

como pueden notar todas las condiciones son ciertas. Sin embargo sólo se va a imprimir la primera cadena, "3 es mayor que 2.". En cuanto Python encuentra una rama del árbol que se cumple, ejecuta su bloque y termina. Ni siquiera se ha molestado en evaluar el resto de las reglas.

Si quisiéramos evaluar estas reglas en cascada en lugar de en forma de árbol, es decir, una detrás de otra, deberíamos haber escrito lo siguiente (si lo intentas copiar todo en un bloque no funcionará, copia de una en una):

if 3 > 2:
      print ("3 es mayor que 2.")
if 3 < 5:
      print ("3 es menor que 5.")
if 4 < 9:
      print ("4 es menor que 9.")
if not (3 > 2 and 3 < 5 and 4 < 9):
      print ("Si lees esto, no sé qué está pasando.")

Si las transcribes todas, por cierto, verás que la última no se ejecuta. Esa condición compuesta es equivalente a un else con respecto a todas las anteriores.


sentencias de repetición 


Además de condicionar el flujo de nuestros algoritmos, también podemos agregarles bucles es decir (bloques que se repiten) que le darán un poco más de complejidad y capacidad. Ya que en todo programa suele hacer falta que un determinado conjunto de instrucciones se ejecute más de una vez. En ese caso no es adecuado multiplicar las líneas del programa copiando y pegando esa secuencia, sino que es mucho más eficaz usar una estructura de control que nos permite decirle al intérprete que queremos repetir una parte del programa varias veces. Dependiendo de lo que necesitemos, Python tiene dentro de su sintaxis dos estructuras de bucle que son: while y for.

Bucle while: Ese tipo de bucle repite un conjunto de instrucciones mientras se cumpla una determinada condición que se evalúa al principio de cada ejecución. Es evidente que las instrucciones del interior del bucle tendrán que hacer algo que pueda cambiar esa condición hasta que en algún momento deje de cumplirse. En caso contrario tendremos un bucle infinito y el programa no terminará nunca su ejecución.

while ((entrada != "s") and (entrada != "n"):
    entrada=raw_input("eres mayor de edad? (s-n) ")

if (entrada=="s"):
    print("El usuario es mayor de edad")
else:
    print("El usuario es menor de edad")

Una de las características del bucle while es que no está fijado previamente el número de veces que se ejecutan las instrucciones del bucle. Se ejecutarán todas las que sean necesarias mientras se cumpla la condición.
Nota: Para crear un bucle while la condición debe de estar dentro de paréntesis () seguidos de dos puntos:, luego lo que hará el programa si se cumple la condición y lo que hará sino se cumple.
Bucle for:  Los bucles for, a diferencia de otros lenguajes de programación en Python tienen una estructura muy simple y potente. Son una forma genérica de iterar sobre una secuencia. Podemos usar como secuencia listas y tuplas (que sirven para agrupar como si fueran un único valor, varios valores que por naturaleza deben ir juntos) o generar una sentencia para ejecutar el bucle un número determinado de veces. La diferencia con el bucle while es que en este caso las instrucciones dentro de él se ejecutarán un número concreto de veces, que será el mismo que el número de elementos que tenga la secuencia.
Veamos un ejemplo:
secuencia = [“uno”, “dos”, “tres”]
for elemento in secuencia:
    print (elemento)

Me imagino que se preguntaran que donde deje la estructura “Switch”,  que es una ramificación condicional con muchos caminos, pero es que en Python esta sentencia no existe, aunque se podría crear con un diccionario que es parecido a lo que en otros lenguajes se llama array asociativo.
La mejor forma de escribir un código en el que se necesite Switch, sería usar en su lugar (if-elif-else)



Sentencias que rompen ciclos: Break, continue,...


Este funciona tal como el break de C. Break se puede usas en bucles for y while y simplemente termina el bucle actual y continua con la ejecución de la siguiente instrucción, por ejemplo:

#!/usr/bin/python

# Primer ejemplo
for letra in "Python":
    if letra == "h":
        break
    print ("Letra actual : " + letra)

# Segundo ejemplo
var = 10
while var > 0:
    var = var -1
    if var == 5:
        break
    print ("Valor actual de la variable : " + str(var))
 print ("fin del script")

que da como resultado:

>>>
Letra actual : P
Letra actual : y
Letra actual : t
Valor actual de la variable : 9
Valor actual de la variable : 8
Valor actual de la variable : 7
Valor actual de la variable : 6
fin del script

Si se fijan en el primer ejemplo al llegar a la letra "h" simplemente se termina (rompe) el ciclo (bucle) y se sigue con el segundo ejemplo. En el segundo ejemplo la variable va disminuyendo su valor hasta que llega a 5, en donde se termina (rompe) el ciclo (bucle), mostrando el print final.

Continue


Al aparecer un Continue en Python, este regresa al comienzo del bucle, ignorando todos los estamentos que quedan en la iteración actual del bucle e inicia la siguiente iteración. Queda más claro con un ejemplo:

Nota: al igual que break, se puede usas en los bucles for y while

System Message: ERROR/3 (<stdin>, line 63)

Error in "code-block" directive: unknown option: "linenos".


.. code-block:: python
    :linenos: table
    :linenostart: 1

    #!/usr/bin/python

    # segundo ejemplo
    for letra in "Python":
        if letra == "h":
            continue
        print ("Letra actual : " + letra)

    # Primer ejemplo
    var = 10
    while var > 0:
        var = var -1
        if var == 5:
            continue
        print ("Valor actual de la variable : " + str(var))

    print ("fin del script")

que da como resultado: 

>>>
Letra actual : P
Letra actual : y
Letra actual : t
Letra actual : o
Letra actual : n
Valor actual de la variable : 9
Valor actual de la variable : 8
Valor actual de la variable : 7
Valor actual de la variable : 6
Valor actual de la variable : 4
Valor actual de la variable : 3
Valor actual de la variable : 2
Valor actual de la variable : 1
Valor actual de la variable : 0
fin del script
En el primer ejemplo al llegar a la letra "h" simplemente termina esa iteración (ignorando al print que sigue en la linea 7) y continua con la siguientes iteraciones (letras o y n) hasta que se termina el ciclo (bucle).

En el segundo ejemplo la variable va disminuyendo su valor hasta que llega a 5, en donde se termina esa iteración del ciclo (bucle) y se continua con las iteraciones que siguen hasta que se termina el bucle y se llega al print final.


Sentencia Pass

Python incorpora una sentencia especial para indicar que no se debe realizar ninguna acción. Se trata de pass y especialmente útil cuando deseamos indicar que no se haga nada en una sentencia que requiere otra. 

Por ejemplo en un sencillo while:
>>> while True:

          pass


Muchos desarrolladores emplean pass cuando escriben esqueletos de código que posteriormente rellenarán. Dado que inicialmente no sabemos qué código contendrá una determinada sentencia, es útil emplear pass para mantener el resto del programa funcional. Posteriormente, el esqueleto de código será rellenado con código funcional y la sentencia pass será reemplazada por otras que realicen una función específica.

La sentencia with se utiliza con objetos que soportan el protocolo de manejador de contexto y garantiza que una o varias sentencias serán ejecutadas automáticamente. Esto nos ahorra muchas líneas de código, a la vez que nos garantiza que ciertas operaciones serán realizadas sin que lo indiquemos explícitamente. Uno de los ejemplos más claros es cuando leemos un archivo de texto. Al terminar esta operación siempre es recomendable cerrar el archivo. Gracias a with esto ocurrirá automáticamente, sin necesidad de llamar al método close(). Por ejemplo:
>>> with open(r'codejobs.txt') as myfile:
        for line in myfile:
            print(line)


Goto


A diferencia de otros lenguajes, Python no incluye por defecto la funcionalidad goto(“ir a”, permite realizar saltos a diversas porciones del código), pero dada su flexibilidad, es posible implementar el operador utilizando este módulo.


Se trata de un decorador que emplea los módulos estándar dis y ctypes para reemplazar el byte-code generado por el intérprete e ingresar instrucciones de salto. Opera con las palabras label, para definir una determinada porción del código, y goto, para realizar el salto.


La instalación es sencilla vía python setup.py install o bien copiando manualmente el archivo goto.py en el directorio Python/Lib/.



Si la entrada no puede ser convertida a un número, en la línea número 10 la ejecución regresa a la número 5, etiquetada con el nombre get_input.