Estructuras de Control en Python

En este apartado vamos a conocer las diferentes estructuras de control que nos van a permitir dirigir el flujo de nuestros programas.

El flujo de un programa es el orden en el que se van ejecutando las instrucciones de este. Estas instrucciones se ejecutan de arriba abajo, y de izquierda a derecha, según el orden en que aparezcan las mismas.

Sin embargo, existen ocasiones en las que necesitemos romper este flujo secuencial. Estas pueden ser de muy diverso tipo, puede que necesitemos tomar una decisión entre una o varias opciones posibles, o a lo mejor necesitamos realizar algunas instrucciones varias veces. Por tanto, necesitamos instrucciones que nos permitan interrumpir el flujo secuencial del programa, y pasar a ejecutar otros bloques de código.

Podemos identificar dos tipos de estructuras de control:

Condicionales: Nos permiten determinar el flujo que sigue el programa en función del resultado de la evaluación de ciertas condiciones.

Iterativas: Para realizar un conjunto de instrucciones de forma repetitiva.

Estructuras condicionales

Las estructuras condicionales nos permiten evaluar condiciones en Python y modificar el flujo del programa, en función del resultado de la evaluación de la condición.

Sentencia if

La sentencia if, evalúa una condición y ejecuta un bloque de instrucciones en el caso de que la condición sea verdadera.

Flujo de la sentencia If
Flujo de la sentencia if

Su estructura general es la siguiente:

 if condición:
      instrucciones si se cumple la condición
numero=5
if numero>0:
    print(f"{numero} es mayor que cero")

Para evaluar estas condiciones, disponemos de los siguientes operadores:

OperadorSignificado
==Igualdad
!=Desigualdad
Mayor que
<Menos que
>=Mayor o igual que
<=Menor o igual que
inEstá en la lista
Operadores de comparación

En el siguiente código puede apreciarse el uso de algunos de estos operadores:

lista=[1,3,5,7,9,11]
numero=5
if lista[0]==1:
    print("el primer elemento es igual a 1")
if lista[1]>0:
    print(f"{lista[1]} es mayor que cero")
if lista[2]!=lista[1]:
    print("los elementos segundo y tercero son distintos")
if numero in lista:
    print(f"el numero {numero} esta en la lista")
otro_numero=4
if otro_numero not in lista:
    print("el otro numero no está en la lista")

Este código arroja el siguiente resultado:

el primer elemento es igual a 1
3 es mayor que cero
los elementos segundo y tercero son distintos
el numero 5 esta en la lista
el otro numero no está en la lista

¡¡OJO!! -> No confundir el operador de asignación: “=” , con el de igualdad: “==”. El primero es un único signo: “=” y se emplea para asignar un valor a una variable. El segundo son dos signos: “=” seguidos y se emplea para la comparación de igual, arrojando un valor de verdadero cuando ambos operandos sean iguales.

Combinando condiciones

La comprobación a realizar puede combinar varias condiciones, empleando los operadores lógicos: and, or y not

lista=[1,3,5,7,9,11]
numero=5
if lista[0]==1 and numero==5:
    print("se cumplen ambas condiciones")
if lista[1]>0 or numero<4:
    print("Se cumple al menos una de las dos condiciones")

Al ejecutar el programa obtenemos el resultado:

se cumplen ambas condiciones
Se cumple al menos una de las dos condiciones

Instrucción else

La instrucción “else” provee un camino adicional en el caso de que la condición se evalué como falsa. Es decir, si es falsa, pasamos a ejecutar otro bloque de instrucciones.

Flujo del bloque if-else

Un ejemplo de utilización de esta estructura sería:

numero=3
if numero>5:
    print(f"{numero} es mayor que cinco")
else:
    print(f"{numero} NO es mayor que cinco")

Cuya ejecución arroja el siguiente resultado

3 NO es mayor que cinco

También podemos emplearlo para saber si una lista está vacía. Si empleamos el nombre de una lista como condición, Python devolverá falso si no tiene elementos.

numeros=[]
if numeros:
    print("hay elementos en la lista")
else:
    print ("la lista está vacia")

Instrucción elif

En ocasiones, cuando no se cumpla la condición, querremos comprobar otra cosa y así, varias veces seguidas, concatenando varias comprobaciones. En estos casos empleamos la instrucción elif, que puede verse como una conjunción de las instrucciones else y if.

La sintaxis de la estructura sería:

if condición 1:
     instrucciones si se cumple la condición 1 
elif condición 2: 
     instrucciones si se cumple la condición 2 y no la 1 
elif condición N: 
     instrucciones si se cumple la condición N y no todas las anteriores
else: 
     rama por defecto: instrucciones si no se cumplen ninguna de las condiciones

Aquí tienes un ejemplo de código:

dia="martes"
if dia=="lunes":
    print("Que la fuerza te acompañe")
elif dia=="jueves":
    print("ya queda menos")
elif dia=="viernes":
    print("no queda nada")
elif dia=="sabado" or dia=="domingo":
    print("Buen finde")
else:
    print("Buenos dias")

El resultado de ejecución sería:

Buenos dias

Estructuras iterativas

Las estructuras iterativas permiten ejecutar de forma repetida un conjunto de operaciones un número de veces determinado.  Fundamentalmente vamos a trabajar con dos estructuras iterativas: for y while

Bucle for

El bucle for lo emplearemos para recorrer una estructura iterable, como puede lista, tupla, diccionario o rango de números, y para cada elemento se ejecuta un bloque de código.

La sintaxis es:

for elemento in iterable: 
     operaciones para elemento realizadas en cada iteración

Ejemplo de código:

lista=[1,3,5,7,9,11]
for item in lista:
    print(item)

Cuyo resultado es:

1
3
5
7
9
11

La función range

Genera secuencias de valores desde un valor inicial hasta uno final, indicando el incremento de un valor con respecto al anterior.

La sintaxis es:

Range(valor inicial, valor final, incremento)

Si no se indica incremento se toma por defecto el valor 1. Y el valor final no está incluido en el rango.

Por ejemplo: range(1,9,2) , generará la secuencia de números: 1, 3, 5 y 7

for item in range(1,9,2):
    print(item)

Y si utilizamos un único argumento, toma como valor inicial 0 y como incremento 1.

for item in range(3):
    print(item)

El resultado sería:

0
1
2

Para las estructuras iterativas, como las listas, podemos emplear los dos puntos para indicar un rango a recorrer de dicha lista. Por ejemplo, si queremos recorrer los tres primeros elementos de la lista, utilizaríamos: [:3] (recuerda que los índices empiezan en cero y que el extremo superior no está incluido.

lista=[1,3,5,7,9,11]
for num in lista[:3]:
    print(num)

Y el resultado es:

1
3

Bucles anidados

Podemos incluir bucles dentro de bucles. El ejemplo siguiente imprime las tablas de multiplicar.

for x in range(1,10):
    print(f"TABLA DE MULTIPLICAR DEL {x}")
    for y in range(1,10):
        print(f"{x} x {y} = {x*y}")

Cuya ejecución da como resultado:

TABLA DE MULTIPLICAR DEL 1
1 x 1 = 1
1 x 2 = 2
…….

Iterando con dos variables

En ocasiones nos va a resultar muy útil ser capaz de iterar con dos variables, es decir, recuperar pares de valores. El ejemplo clásico de este uso sería iterar los elementos de un diccionario (nos los devuelve la función ítems( ) ), donde recobraríamos la clave y el valor a la vez.

diccionario={"nombre":"Elena","apellidos":"García Hernández",
             "edad":27,"telefono":613454312}
for c , v in diccionario.items():
    print(f"clave: {c} -> valor {v}")

Que da como resultado:

clave: nombre -> valor Elena
clave: apellidos -> valor García Hernández
clave: edad -> valor 27
clave: telefono -> valor 613454312

Bucle while

La instrucción while también nos permite construir estructuras iterativas. En este caso, se ejecutan las instrucciones del bloque mientras se cumpla la condición del while. 

La sintaxis de esta instrucción es:

while condición: 
     operaciones mientras se cumple la condición

Ejemplo bucle while:

num = 5
while num>0:
    print("numero",num)
    num=num-1

Que arroja el resultado:

numero 5
numero 4
numero 3
numero 2
numero 1

Terminando el bucle

Es fundamental definir correctamente la condición del bucle while. Esta debe de dejar de cumplirse en algún momento de la ejecución del programa, de otra forma estaríamos corriendo un bucle infinito y el programa no terminaría nunca.

Ejemplo de bucle infinito:

num = 5
while num>0:
    print("numero",num)

Lo más inmediato es colocar en el bucle alguna instrucción que modifique la condición del bucle, asegurándonos de que se llegue a una situación en la que la condición será falsa y se saldrá del bucle.

También podemos dar la opción al usuario de que termine el bucle. Para ello será necesario que este introduzca un dato durante cada interacción. Cuando este dato coincida con el mensaje para salir, terminaríamos el bucle.

Ejemplo: siendo el mensaje para salir igual a “salir”

nombre=""
while nombre!="salir":
    nombre=input("introduce un nombre\n")
    if (nombre!="salir"):
        print("Hola ",nombre)

También se puede emplear una variable booleana para terminar un bucle, lo que se denomina una bandera:

terminar=False
while not terminar:
    nombre=input("introduce un nombre\n")
    if (nombre=="salir"):
        terminar=True
    else:
        print("Hola ",nombre)

Y también podríamos introducir la bandera en el sentido contrario, haciendo que mientras fuera verdadera el bucle estuviera funcionando:

trabajando=True
while trabajando:
    nombre=input("introduce un nombre\n")
    if (nombre=="salir"):
        trabajando=False
    else:
        print("Hola ",nombre)

Sentencias continue y break

Dentro de una estructura iterativa existen algunas sentencias útiles para su manejo:

  • continue: pasa a la siguiente iteración del bucle sin completar las instrucciones restantes del bloque de código del bucle
print("Saludos por la mañana")
nombres=["Pepe","Maria","Ana","Lucrecia","Juan"]
print("excluye a alguien de los saludos")
excluido=input("introduce el nombre de la persona a quien no vas a saludar\n")
for persona in nombres:
    if persona==excluido:
        continue
    else:
        print("Buenos días, ",persona)
  • break: termina el bucle sin completar las iteraciones restantes
while True:
    nombre=input("introduce un nombre\n")
    if (nombre=="salir"):
        break
    else:
        print("Hola ",nombre)

NOTA:

Este post es parte de la colección “Python”. Puedes ver el índice de esta colección aquí.

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

Este sitio usa Akismet para reducir el spam. Aprende cómo se procesan los datos de tus comentarios.