Sentencias de control

Condicionales

La sentencia condicional por autonomasia es if. La sentencia if conlleva la evaluación de una condición lógica que implica una bifurcación en el flujo de ejecución del programa. Esto a su vez nos lleva a la definción de bloque.

El bloque es un conjunto de sentencias que conceptualmente se ejecutarán como una unidad (asumeindo que no se produce un error que interrumpa la ejecución). Por ejemplo, en el lenguaje C, los bloques se identifican como secuancias de sentencias entre llaves. El Python el bloque se define de una forma un tanto particular: la indentación. Es decir, el nivel de indentación determina qué instrucción son parte del mismo bloque.


In [4]:
if 5 > 2:
    print("1 sentencia 1")
    print("2 sentencia 2")
else:
    print("3 imposible")
print("4 fin")


1 sentencia 1
2 sentencia 2
4 fin

En este ejemplo se puede comporbar fácilmente que las dos primeras invocaciones a print forman un bloque que se ejecuta cuando la condición se cumple, mientras que el tercero se ejecutaría en el caso contrario. La cuarta invocación se ejecuta siempre porque está fuera del cuerpo del condicional (en el mismo nivel de indentación). También se puede comprobar que para crear un bloque se utilizar el carácter dos-puntos (:).

Por tanto:

En Python la indentación no es una cuestión estética, sino que determina la organización del código

Existe una combinación de else + if llamada elif que permite ahorrar algo de código y simplificar la sentencia.

Operadores lógicos y relacionales

Están disponibles los habituales:

  • igual: ==
  • mayor (igual) >, >=
  • menos (igual) <, <=
  • distinto: !=
  • negado (para valores lógicos): not

while

El bucle while es conceptualmente el más simple. Está compuesto por una condición lógica y un bloque. Mientras la condición se cumpla el bloque se seguirá ejecuando:


In [5]:
a = 3
while a > 0:
    print("sigue")
    a = a - 1


sigue
sigue
sigue

for

En los lenguajes modernos el bucle for ha cambiado respecto a los lenguajes clásico como C. Python utiliza la modaliza un for cuyo único objetivo es iterar un contenedor. La variable de control va tomando cada uno de los valores almacenados en el contenedor en cada una de las iteraciones.


In [7]:
fruits = ['orange', 'strawberry', 'pineapple']
for fruit in fruits:
    print(fruit)


orange
strawberry
pineapple

Esto es más útil que tener un contador para recorrrer el contenedor en la mayoría de los casos. Pero, para los casos en los que se requiera disponer del contador se puede utilizar la función *+enumerate()**.


In [8]:
fruits = ['orange', 'strawberry', 'pineapple']
for index, fruit in enumerate(fruits):
    print(index, fruit)


(0, 'orange')
(1, 'strawberry')
(2, 'pineapple')

El for de Python también dispone de las palabras reservadas break y continue, que tiene el comportamiento habitual en otros lenguajes.

Si se necesita un bucle for cuya variable de control toma valores entre dos dados (típicamente entre 0 y n-1) se puede utilizar la función range, que devuelve una lista de enteros:


In [1]:
for i in range(8):
    print(i)


0
1
2
3
4
5
6
7