Flujo de Control de Python

Flujo de control de Python

El flujo de control es el orden en que se ejecutan o evalúan las sentencias, instrucciones o llamadas a funciones individuales. El flujo de control de un programa Python se regula mediante sentencias condicionales, bucles y llamadas a funciones.

Operadores de Comparación

OperadorSignificado
==Igual a
!=Distinto de
<Menor que
>Mayor que
<=Menor o igual que
>=Mayor o igual que

Estos operadores se evalúan como True o False dependiendo de los valores que se les asignen.

Ejemplos:

42 == 42
True
40 == 42
False
'hello' == 'hello'
True
'hello' == 'Hello'
False
'dog' != 'cat'
True
42 == 42.0
True
42 == '42'
False
Quiz

Inicia sesión para responder este quiz y rastrear tu progreso de aprendizaje

¿A qué se evalúa 'hello' == 'Hello'?
A. True
B. False
C. None
D. Lanza un error

Operadores Booleanos

Hay tres operadores booleanos: and, or y not. En orden de precedencia, de mayor a menor son not, and y or.

Tabla de Verdad del Operador and:

ExpresiónSe evalúa como
True and TrueTrue
True and FalseFalse
False and TrueFalse
False and FalseFalse

Tabla de Verdad del Operador or:

ExpresiónSe evalúa como
True or TrueTrue
True or FalseTrue
False or TrueTrue
False or FalseFalse

Tabla de Verdad del Operador not:

ExpresiónSe evalúa como
not TrueFalse
not FalseTrue

Mezcla de Operadores

Puedes mezclar operadores booleanos y de comparación:

(4 < 5) and (5 < 6)
True
(4 < 5) and (9 < 6)
False
(1 == 2) or (2 == 2)
True

También puedes usar múltiples operadores booleanos en una expresión, junto con los operadores de comparación:

2 + 2 == 4 and not 2 + 2 == 5 and 2 * 2 == 2 + 2
True
# En la siguiente sentencia, 3 < 4 and 5 > 5 se ejecuta primero evaluando a False
# Luego 5 > 4 devuelve True, por lo que el resultado después de True or False es True
5 > 4 or 3 < 4 and 5 > 5
True
# Ahora, la sentencia entre paréntesis se ejecuta primero, por lo que True and False devuelve False.
(5 > 4 or 3 < 4) and 5 > 5
False

Sentencias if

La sentencia if evalúa una expresión, y si esa expresión es True, ejecuta el siguiente código indentado:

# sentencia if: ejecuta el bloque de código cuando la condición es True
name = 'Debora'

if name == 'Debora':  # Comprueba si name es igual a 'Debora'
   print('Hi, Debora')  # Esta línea se ejecuta si la condición es True
Hi, Debora
if name != 'George':
   print('You are not George')
You are not George

La sentencia else se ejecuta solo si la evaluación de las expresiones if y todas las expresiones elif son False:

# if-else: ejecuta código diferente basado en la condición
name = 'Debora'

if name == 'George':
   print('Hi, George.')
else:  # Se ejecuta si la condición if es False
   print('You are not George')
You are not George
Quiz

Inicia sesión para responder este quiz y rastrear tu progreso de aprendizaje

¿Cuándo se ejecuta el bloque else en una sentencia if-else?
A. Siempre
B. Solo cuando la condición if (y todas las condiciones elif si están presentes) son False
C. Solo cuando la condición if es True
D. Nunca

Solo después de que la expresión de la sentencia if sea False, se evalúa y ejecuta la sentencia elif:

# if-elif: comprueba múltiples condiciones en secuencia
name = 'George'

if name == 'Debora':
   print('Hi Debora!')
elif name == 'George':  # Se comprueba solo si la condición anterior es False
   print('Hi George!')
Hi George!

Las partes elif y else son opcionales.

name = 'Antony'

if name == 'Debora':
   print('Hi Debora!')
elif name == 'George':
   print('Hi George!')
else:
   print('Who are you?')
Who are you?

Operador Condicional Ternario

Muchos lenguajes de programación tienen un operador ternario, que define una expresión condicional. El uso más común es crear una sentencia de asignación condicional simple y concisa. En otras palabras, ofrece código en una sola línea para evaluar la primera expresión si la condición es verdadera, y si no, evalúa la segunda expresión.

<expresión1> if <condición> else <expresión2>

Ejemplo:

age = 15

# esta sentencia if:
if age < 18:
   print('kid')
else:
   print('adult')
kid
# Operador ternario: expresión condicional en una sola línea
# Sintaxis: valor_si_verdadero if condición else valor_si_falso
print('kid' if age < 18 else 'adult')
kid

Los operadores ternarios se pueden encadenar:

age = 15

# este operador ternario:
print('kid' if age < 13 else 'teen' if age < 18 else 'adult')
teen
# es equivalente a esta sentencia if:
if age < 13:
    print('kid')
else:
    if age < 18:
        print('teen')
    else:
        print('adult')
teen

Sentencia Switch-Case

Sentencias Switch-Case

En los lenguajes de programación de computadoras, una sentencia switch es un tipo de mecanismo de control de selección utilizado para permitir que el valor de una variable o expresión cambie el flujo de control de la ejecución del programa mediante búsqueda y mapeo.

Las sentencias Switch-Case, o Coincidencia Estructural de Patrones (Structural Pattern Matching), se introdujeron por primera vez en 2020 a través de PEP 622, y luego se lanzaron oficialmente con Python 3.10 en septiembre de 2022.

Tutorial Oficial

El PEP 636 proporciona un tutorial oficial para la coincidencia de patrones de Python o sentencias Switch-Case.

Coincidencia de valores únicos

response_code = 201
match response_code:
    case 200:
        print("OK")
    case 201:
        print("Created")
    case 300:
        print("Multiple Choices")
    case 307:
        print("Temporary Redirect")
    case 404:
        print("404 Not Found")
    case 500:
        print("Internal Server Error")
    case 502:
        print("502 Bad Gateway")
Created

Coincidencia con el Patrón or

En este ejemplo, el carácter de barra vertical (| u or) permite a Python devolver la misma respuesta para dos o más casos.

response_code = 502
match response_code:
    case 200 | 201:
        print("OK")
    case 300 | 307:
        print("Redirect")
    case 400 | 401:
        print("Bad Request")
    case 500 | 502:
        print("Internal Server Error")
Internal Server Error

Coincidencia por la longitud de un Iterable

today_responses = [200, 300, 404, 500]
match today_responses:
    case [a]:
            print(f"One response today: {a}")
    case [a, b]:
            print(f"Two responses today: {a} and {b}")
    case [a, b, *rest]:
            print(f"All responses: {a}, {b}, {rest}")
All responses: 200, 300, [404, 500]

Valor por defecto

El símbolo de guion bajo (_) se utiliza para definir un caso por defecto:

response_code = 800
match response_code:
    case 200 | 201:
        print("OK")
    case 300 | 307:
        print("Redirect")
    case 400 | 401:
        print("Bad Request")
    case 500 | 502:
        print("Internal Server Error")
    case _:
        print("Invalid Code")
Invalid Code

Coincidencia de Clases Incorporadas

response_code = "300"
match response_code:
    case int():
            print('Code is a number')
    case str():
            print('Code is a string')
    case _:
            print('Code is neither a string nor a number')
Code is a string

Declaraciones Match-Case con Guardia (Guard)

response_code = 300
match response_code:
    case int() if response_code > 99 and response_code < 500:
            print('Code is a valid number')
    case _:
            print('Code is an invalid number')
Code is a valid number

Sentencias de Bucle while

La sentencia while se utiliza para la ejecución repetida mientras una expresión sea True:

# bucle while: repite el código mientras la condición sea True
spam = 0
while spam < 5:  # Continúa mientras spam sea menor que 5
    print('Hello, world.')
    spam = spam + 1  # Incrementa el contador para evitar un bucle infinito
Hello, world.
Hello, world.
Hello, world.
Hello, world.
Hello, world.
Quiz

Inicia sesión para responder este quiz y rastrear tu progreso de aprendizaje

¿Qué hace un bucle while?
A. Repite código mientras la condición sea True
B. Ejecuta el código exactamente una vez
C. Ejecuta el código un número fijo de veces
D. Omite la ejecución del código

Sentencias break

Si la ejecución alcanza una sentencia break, sale inmediatamente de la cláusula del bucle while:

# sentencia break: sale del bucle inmediatamente cuando se encuentra
while True:  # Bucle infinito
    name = input('Please type your name: ')
    if name == 'your name':
        break  # Sale del bucle inmediatamente

print('Thank you!')
Please type your name: your name
Thank you!

Sentencias continue

Cuando la ejecución del programa alcanza una sentencia continue, la ejecución del programa salta inmediatamente al inicio del bucle.

# sentencia continue: omite el resto de la iteración del bucle e inicia la siguiente iteración
while True:
    name = input('Who are you? ')
    if name != 'Joe':
        continue  # Salta a la siguiente iteración, no pidas la contraseña
    password = input('Password? (It is a fish.): ')
    if password == 'swordfish':
        break  # Sale del bucle cuando la contraseña es correcta

print('Access granted.')
Who are you? Charles
Who are you? Debora
Who are you? Joe
Password? (It is a fish.): swordfish
Access granted.

Bucle For

El bucle for itera sobre una list, tuple, dictionary, set o string:

# bucle for: itera sobre cada elemento en una secuencia
pets = ['Bella', 'Milo', 'Loki']
for pet in pets:  # Itera sobre cada mascota en la lista
    print(pet)  # Imprime cada nombre de mascota
Bella
Milo
Loki
Quiz

Inicia sesión para responder este quiz y rastrear tu progreso de aprendizaje

¿Sobre qué itera un bucle for?
A. Solo números
B. Solo cadenas
C. Cualquier secuencia iterable (lista, tupla, diccionario, conjunto, cadena, etc.)
D. Solo listas

La función range()

La función range() devuelve una secuencia de números. Comienza desde 0, incrementa en 1 y se detiene antes de un número especificado:

for i in range(5):
    print(f'Will stop at 5! or 4? ({i})')
Will stop at 5! or 4? (0)
Will stop at 5! or 4? (1)
Will stop at 5! or 4? (2)
Will stop at 5! or 4? (3)
Will stop at 5! or 4? (4)
Quiz

Inicia sesión para responder este quiz y rastrear tu progreso de aprendizaje

¿Qué genera range(5)?
A. Números del 1 al 5
B. Números del 0 al 4
C. Números del 0 al 5
D. Cinco números aleatorios

La función range() también puede modificar sus 3 argumentos predeterminados. Los dos primeros serán los valores de start (inicio) y stop (parada), y el tercero será el argumento step (paso). El paso es la cantidad en que se incrementa la variable después de cada iteración.

# range(inicio, parada, paso)
for i in range(0, 10, 2):
   print(i)
0
2
4
6
8

Incluso puedes usar un número negativo para el argumento step para hacer que el bucle for cuente hacia atrás en lugar de hacia adelante.

for i in range(5, -1, -1):
    print(i)
5
4
3
2
1
0

Sentencia For else

Esto permite especificar una sentencia para ejecutar en caso de que se haya ejecutado el bucle completo. Solo es útil cuando una condición break puede ocurrir en el bucle:

for i in [1, 2, 3, 4, 5]:
   if i == 3:
       break
else:
   print("only executed when no item is equal to 3")

Finalizar un Programa con sys.exit()

La función exit() permite salir de Python.

import sys

while True:
    feedback = input('Type exit to exit: ')
    if feedback == 'exit':
        print(f'You typed {feedback}.')
        sys.exit()
Type exit to exit: open
Type exit to exit: close
Type exit to exit: exit
You typed exit.

Enlaces relevantes