17. Bucles IV
Vídeo
Notas personales
Estudiemos el bucle while, que es tipo indeterminado porque no sabemos a priori cuántas veces ejecutará el bloque de código contenido en su interior. Su sintaxis es:
while condición:
instrucciones
En el siguiente ejemplo, no obstante, vemos cómo programar un bucle while
para que funcione como uno de tipo determinado:
i = 1
while i <= 10:
print(f"Iteración: {i}.")
i += 1
print("Fin de ejecución del bucle while.")
# Iteración: 1.
# Iteración: 2.
# Iteración: 3.
# Iteración: 4.
# Iteración: 5.
# Iteración: 6.
# Iteración: 7.
# Iteración: 8.
# Iteración: 9.
# Iteración: 10.
# Fin de ejecución del bucle while.
Generemos ahora un programa que nos solicite la edad y, en caso de ser el dato introducido un número negativo, vuelva a preguntarnos de nuevo (siendo así un ejemplo de bucle while
de tipo indeterminado):
edad = int(input("Introduce tu edad: "))
while edad < 0 or edad > 110:
print("Has introducido una edad incorrecta. Vuelve a intentarlo.")
edad = int(input("Introduce tu edad: "))
print(f"Tienes {edad} años. Gracias por colaborar.")
Si un usuario se empeña en introducir datos negativos o muy elevados, puede dar lugar a la aparición de un bucle ‘‘infinito’’. Veamos una estrategia para evitar este tipo de situaciones con un programa que nos permita hallar la raíz cuadrada de un número:
import math
print("Programa de cálculo de raíces cuadradas")
numero = int(input("Introduce un número: "))
intentos = 0 # Para ejecutar el bucle while un número de veces determinado
while numero < 0:
print("No se puede hallar la raíz de un número negativo.")
if intentos == 2:
print("Has consumido demasiados intentos.")
print("El programa ha finalizado")
break
numero = int(input("Introduce un número: "))
if numero < 0:
intentos += 1
if intentos < 2:
solucion = math.sqrt(numero)
print(f"La raíz cuadrada de {numero} es {solucion}.")
Notas:
- La instrucción
break
detiene la ejecución del bucle. Es decir, si durante el transcurso de la ejecución de un bucle llegamos a una situación donde se lee una instrucciónbreak
, en ese instante, el flujo del programa deja el bucle y salta a la primera línea de código que se encuentra a continuación del mencionado bucle. - En la línea
solucion = math.sqrt(numero)
introducimos el uso de la clasemath
, que hemos importado en la primera línea de código (import math
). Es un concepto que se estudiará posteriormente en el curso, pero dicha instrucción sirve para encontrar la raíz cuadrada de un número. La utilidad de importar clases reside en que podemos aprovechar funciones ya programadas y no hemos de ‘‘reinventar la rueda’’.
Ejercicio 1: crea un programa que pida números infinitamente. Los números introducidos deben ser cada vez mayores. El programa finalizará cuando se introduce un número menor que el anterior.
numero = int(input("Introduce un número entero: "))
condicion = True
while condicion:
num1 = numero
numero = int(input("Introduce un número entero mayor que el anterior: "))
if num1 > numero:
print(f"Valor incorrecto: {num1} no es mayor que {numero}.")
condicion = False
else:
print(f"Valor correcto: {numero} es mayor que {num1}")
Ejercicio 2: crea un programa que pida números positivos indefinidamente. El programa termina cuando se introduce un número negativo. Finalmente el programa muestras la suma de todos los números introducidos.
print("Cálculo de la suma de una serie de números positivos.")
print("Instrucciones: ")
print("- Introduce tantos números positivos como desees sumar.")
print("- Introduce un número negativo para calcular la suma.")
suma = 0
num = int(input("Introduce un número positivo: "))
while num > 0:
suma += num
num = int(input("Introduce un número positivo: "))
print(f"La suma de los valores positivos introducios es {suma}.")
Código fuente
El código fuente y los posibles ficheros externos generados correspondientes a esta lección se encuentran disponibles para su consulta en la carpeta /lecciones/17/
del
repositorio.