Estructuras de Control
Un algoritmo es una receta, tu código fuente, un proceso es un algoritmo en ejecución. Durante el procesamiento del algoritmo muchos caminos (desvíos) necesitan suceder.
Un ejemplo gráfico de un algoritmo bien loco

Este es un claro ejemplo de que varios caminos pueden ser tomados.
Entonces vamos a conocer algunas condicionales. Estas condicionales son las mismas para todos los lenguajes, lo que cambia es cómo declararlas.
Bloques de código
Una gran parte de los lenguajes utiliza llaves { } para delimitar los bloques y al final de cada línea un ; o algún otro delimitador para avisar que la línea acabó quedando más o menos así
statement (condicion) {
primera línea del bloque;
segunda línea del bloque;
tercera línea (condicion) {
primera línea del sub bloque;
}
}
Pero el creador de python prefirió simplificar usando solamente la indentación sin los y sin los delimitadores.
statement (condicion):
primera línea del bloque
segunda línea del bloque
tercera línea (condicion):
primera línea del sub bloque
Sobre la indentación, lo ideal es separar con un tab o 4 espacios que es la convención estándar utilizada. La mayor parte de los editores de código van a ayudar en eso.
IF (Si)
Si una condición es verdadera ejecuta el bloque de abajo sino ejecuta el otro.
Es la condicional más usada en cualquier lenguaje
Vamos a hacer el programa de arriba con la primera pregunta... ¿La cosa funciona? Si es sí, será true, si es no será false. Un if solo ejecuta el bloque de abajo si una condición es verdad y esto sucede cuando algún retorno es booleano, true o false.
# Va a esperar True o false
funciona = bool(input("¿La cosa funciona? "))
if funciona == True:
print("NI RELAJARSE")
else: # Va a continuar el bloque del False (no)
... va a continuar el programa desde aquí
Si funciona es True entonces va a imprimir NI RELAJARSE. Sino continúa el programa.
Necesitamos entender antes de continuar cómo funcionan los comparadores.
==Comparará si uno es igual al otro. Es diferente del=que asigna el valor dentro de una variable.!=Comparará si es diferente.>Mayor>=Mayor o igual<Menor<=Menor o igualinEstá dentro. Usamos más para strings y listasisUsado para verificar si es o no es. Usado en strings.
Ve el ejemplo y observa la indentación (alineación) del bloque debajo del if y del else. Python necesita que esta indentación sea correcta con un tab por ejemplo. Al final del if y del else necesitamos tener el :. Para python es el aviso de que la expresión que formará la condición terminó.
edad = 18
if edad >= 18:
### bloque #### Ve que hay un TAB adelante todo lo que estará dentro de este bloque
print("Eres mayor de edad.")
print("¡Bienvenido(a)!")
else:
### bloque ####
print("Eres menor de edad.")
print("Lo sentimos, acceso restringido.")
Ahora vamos a imaginar en el mismo ejemplo de arriba, si la edad es menor que 10, manda a dormir.
if edad >= 18:
### bloque ####
print("Eres mayor de edad.")
print("¡Bienvenido(a)!")
else:
### bloque ####
if edad < 10:
### bloque ####
print("Ve a dormir.")
else:
### bloque ####
print("Eres menor de edad.")
print("Lo sentimos, acceso restringido.")
print("Continuando...")
También existe la estructura condicional anidada. Es la idea de si, sino si, sino si, sino si, sino si, sino, de forma que la primera condición que satisfaga será ejecutada y el resto saltado.
edad = 25
if edad < 18:
print("Eres menor de edad.")
elif edad >= 18 and edad < 21:
print("Eres mayor de edad, pero aún no puedes beber en Estados Unidos.")
elif edad >= 21 and edad < 65:
print("Eres mayor de edad y puedes beber en Estados Unidos.")
elif edad >= 65:
print("Eres un adulto mayor.")
While (mientras)
Estructura de repeticiones llamamos lazo o bucle
La estructura de control while crea un bucle en la ejecución del bloque mientras la condición sea verdadera. En nuestro algoritmo gráfico la pregunta ¿Se puede echar la culpa a alguien? crea una repetición mientras responda No
Esta vez vamos a crear una condición por ejemplo comparando una string. Mientras no sea "sim" no va a salir del bucle.
# Definiendo el valor de entrada
condicion = "nao"
while condicion != "sim":
### Bloque
print("SE JODIÓ")
condicion = input("¿Se puede echar la culpa a alguien? ")
### Fuera del bloque, va a ejecutar así que salga del while
print("SIN PROBLEMAS")
Ve el ejemplo abajo. Imprimirá un conteo de 0 hasta 4, porque 5 ya no satisfaría la condición.
contador = 0
while contador < 5:
print("Conteo:", contador)
# sumando 1 al contador
contador += 1
# lo mismo que contador = contador + 1
print("¡Fin del bucle!")
Si necesitas entrar en el bloque del while para ejecutar al menos una vez, del tipo primero haz y después pregunta, es posible definir un bloque while como True es decir un bucle infinito y después verificar la condición dentro del bloque utilizando el if. La palabra mágica que parará la ejecución es el break.
El elif es una opción del tipo sino si. Pueden tener cuantos elif quieras, pero para este escenario con muchas opciones tenemos otras estructuras de control. No existe una regla, pero las buenas prácticas dicen que máximo 2 elif es suficiente, arriba de eso ya vamos a partir para una estructura llamada case que veremos después.
En el ejemplo abajo podemos verificar..
- si es s para.
- sino, si, es c continúa.
- sino, intenta nuevamente
Ve el ejemplo:
respuesta = ""
while True:
respuesta = input("Digite 's' para salir o 'c' para continuar: ")
if respuesta == 's':
break
elif respuesta == 'c':
print("Continuando...")
else:
print("Opción inválida. Intenta nuevamente.")
print("¡Fin del bucle!")
Ejercicio 1
Implementa toda la lógica de nuestro algoritmo gráfico. En este ejercicio solo necesitas los controles if else y while. El código está en solucionador.py.
Ejercicio 2
Escribe un programa en python para aprobar un préstamo para la compra de una casa.
Pregunta:
- El valor de la casa
- El ingreso del comprador
- Cuántos años quiere pagar la casa
Salida del programa:
- La cuota mensual
- Si puede o no comprar esa casa siendo que la cuota necesita ser menor o igual al 30% del salario del comprador.
El código está en compra_casa.py.
Ejercicio 3
Escribe un programa que lea un número entero y pregunte al usuario para entrar con 1 2 o 3. Caso digite:
- Convierte a binario
- Convierte a octal
- Convierte a hexadecimal
El código está en converte.py.
Ejercicio 4
Escribe un programa que entre dos números y compare quién es el mayor o si son iguales
El código está en compare.py.
Ejercicio 5
Lee la fecha de nacimiento de un alumno de natación y di cuál categoría pertenece
- hasta 9 años es mirim
- hasta 14 es infantil
- hasta 19 es junior
- hasta 25 es senior
- arriba de 25 es master
El código está en categoria.py.
Un otro código categoriav2.py lleva en consideración hasta el día del nacimiento para hacer el cálculo.
Ejercicio 6
Crea un programa que juegue piedra papel tijera contigo.
El código está en jokenpo.py.
Estructura
For (hasta que)
La estructura de lazo for diferente de la regla while no necesita que algo sea verdadero para ejecutar, sino de un número de ejecución predefinido.
La estructura de lazo for en Python se usa para iterar sobre una secuencia de elementos, como una lista, una string, un range, entre otros. Ejecuta un bloque de código repetidamente para cada elemento de la secuencia.
for elemento in secuencia:
# código a ser ejecutado
Vamos a analizar cada parte de esta estructura:
- La palabra clave
forinicia la declaración del lazo for. elementoes una variable (podría ser cualquier otra) que recibirá el valor de cada elemento de la secuencia en cada iteración.- La palabra clave in separa la variable de la secuencia en que será iterado.
- secuencia es una secuencia de elementos sobre la cual el lazo for va a iterar. Puede ser una lista, una string, un range, una tupla, entre otros.
Se hará para todos los ítems de la lista o hasta encontrar un break.
nombres = ["David", "María", "Pedro", "Juan"]
for nombre in nombres:
print(nombre)
...
David
María
Pedro
Juan
Por ejemplo con el break
nombres = ["David", "María", "Pedro", "Juan"]
for nombre in nombres:
if nombre == "Pedro":
break
else:
print(nombre)
...
David
María
....
Si quieres garantizar la iteración de una lista por algunas veces predefinidas vas a utilizar el range.
# ¿el range de 0 a 10 es qué?
print(list(range(0,10)))
for c in range(0,10):
print(f"c vale {c}")
...
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
c vale 0
c vale 1
c vale 2
c vale 3
c vale 4
c vale 5
c vale 6
c vale 7
c vale 8
c vale 9
....
¿Si quieres imprimir al revés?
print(list(range(10,0,-1)))
for c in range(10,0,-1):
print(f"c vale {c}")
...
[10, 9, 8, 7, 6, 5, 4, 3, 2, 1]
c vale 10
c vale 9
c vale 8
c vale 7
c vale 6
c vale 5
c vale 4
c vale 3
c vale 2
c vale 1
...
Si quieres saltar de 2 en 2 aún..
print(list(range(10,0,-2)))
for c in range(10,0,-2):
print(f"c vale {c}")
[10, 8, 6, 4, 2]
c vale 10
c vale 8
c vale 6
c vale 4
c vale 2
Observa una cosa, necesitas entregar al for la lista que quieres que haga la iteración, entonces prueba siempre la lista, porque si te fijas la lista invertida que mostré no tiene los mismos valores de la lista ordenada. Una fue de 0 a 9 y la otra de 0 a 10. Ten cuidado y haz las pruebas necesarias siempre.
Ejercicio 7
Haz una cuenta regresiva de 10 segundos. El código está en regressiva.py.
Ejercicio 8
Imprime solo los números pares y después solo los impares a partir de un número inicial dado por el usuario hasta otro número final.
El código está en par_impar.py.
Este es un ejercicio muy importante sobre desempeño. La solución de arriba funciona, pero exige más del procesador que la solución de abajo.
El código está en par_imparv2.py.
La diferencia es que el primer intento ejecuta muchos más ifs que el segundo ocupando tu procesador. Si ejecutas un if dentro de un lazo va a ejecutar TODAS las veces. En el segundo ejemplo ya fue dado al for la lista lista para que haga el lazo.
Otro detalle es que la primera lista que no tiene range es ejecutada entera dos veces, mientras la segunda tiene solo la mitad de la lista.
Esta es la diferencia entre un principiante y un experto. Este tipo de detalle hace que un programa sea "ligero" y corra en máquinas con menos poder de procesamiento. Además de la experiencia con programación, la madurez matemática del programador hace diferencia en este tipo de cosa.
Ejercicio 9
Suma todos los valores que son divisibles por 3 y son impares de cero hasta la entrada que el usuario elija.
¡Fíjate en el desempeño!
El código está en div3_impar.py.
Ejercicio 10
Verifica si un número es primo
¡Fíjate en el desempeño!
El código está en div3_impar.py.
Ejercicio 11
Este ejercicio vamos a usar listas y tuplas. Imprimir la lista de niños agrupados por sala que frecuentan cada una de las actividades.
Datos:
sala1 = ["Erik", "Maia", "Gustavo", "Manuel", "Sofia", "Joana"] sala2 = ["Joao", "Antonio", "Carlos", "Maria", "Isolda"]
aula_ingles = ["Erik", "Maia", "Joana", "Carlos", "Antonio"] aula_musica = ["Erik", "Carlos", "Maria"] aula_danca = ["Gustavo", "Sofia", "Joana", "Antonio"]
El código está en div3_impar.py.
Ahora haz el mismo ejercicio usando set y dict
El código está en div3_impar.py. El código está en div3_impar.py.