{ "cells": [ { "cell_type": "markdown", "metadata": { "id": "view-in-github", "colab_type": "text" }, "source": [ "\"Open" ] }, { "cell_type": "markdown", "metadata": { "id": "d3TpnaFXjYkN" }, "source": [ "# Bucle ```while``` [1]" ], "id": "d3TpnaFXjYkN" }, { "cell_type": "code", "execution_count": 1, "metadata": { "id": "DPuyLq7qjYkO", "outputId": "f066b10a-19fc-4218-af7e-b5864e8465c2", "colab": { "base_uri": "https://localhost:8080/" } }, "outputs": [ { "output_type": "stream", "name": "stdout", "text": [ "1\n", "2\n", "3\n", "4\n", "5\n" ] } ], "source": [ "a = 1\n", "b = 5\n", "while a <= b: # mientras se cumpla la condición\n", " print(a) # imprime los números del 1 al 10\n", " a += 1 # equivale a la expresión: a = a + 1 (contador)" ], "id": "DPuyLq7qjYkO" }, { "cell_type": "markdown", "metadata": { "id": "Q5w0c_UXjYkP" }, "source": [ "### Diferencia con un bucle ```for``` \n", "La gran diferencia entre un bucle ```for``` y un bucle ```while``` es la siguiente: \n", "\n", "En un bucle ```for``` se conoce a priori el número de iteraciones que se han de realizar y \n", "en un bucle ```while``` el número de ciclos se producirá de forma continua hasta que se deje de cumplir la condición. \n", "Por lo tanto en un bucle ```while``` algo tiene que cambiar que haga que la condición deje de cumplirse. " ], "id": "Q5w0c_UXjYkP" }, { "cell_type": "markdown", "metadata": { "id": "1XIyylcGjYkQ" }, "source": [ "## Bucle sin fin\n", "La siguiente estructura es un bucle sin fin. \n", "Finalmente detendremos su ejecución de forma manual o dará un error y se interrumpirá su ejecución." ], "id": "1XIyylcGjYkQ" }, { "cell_type": "code", "execution_count": null, "metadata": { "id": "VXZY1iVKjYkQ" }, "outputs": [], "source": [ "a = 1\n", "\n", "# BUCLE INFINITO\n", "\n", "'''\n", "while True: # siempre se cumple\n", " print(a) # imprime continuamente valores de a hasta que pulsemos CONTROL+C\n", " a += 1 # o bien, hasta que reestablezcamos el Kernel en Jupyter Notebook\n", "'''" ], "id": "VXZY1iVKjYkQ" }, { "cell_type": "markdown", "metadata": { "id": "UFVhMOb9jYkR" }, "source": [ "### Salir de un bucle con un ```if``` ... ```break```\n", "Para salir del bucle añadimos un ```if``` con un ```break```." ], "id": "UFVhMOb9jYkR" }, { "cell_type": "code", "execution_count": 4, "metadata": { "id": "3s_CD03JjYkR", "outputId": "c3fc41ca-50de-4419-9cb2-2c81daa70033", "colab": { "base_uri": "https://localhost:8080/" } }, "outputs": [ { "output_type": "stream", "name": "stdout", "text": [ "1\n", "2\n", "3\n", "4\n", "5\n" ] } ], "source": [ "a = 1\n", "while True:\n", " print(a)\n", " if a == 5: break\n", " a += 1" ], "id": "3s_CD03JjYkR" }, { "cell_type": "markdown", "metadata": { "id": "-A66ZLzejYkS" }, "source": [ "![bucle while](https://github.com/financieras/pyCourse/blob/main/jupyter/img/while.png?raw=1)" ], "id": "-A66ZLzejYkS" }, { "cell_type": "code", "execution_count": 5, "metadata": { "id": "CUE6qM95jYkS", "outputId": "96c4cfd7-de5e-4a89-c921-692e975b9ab7", "colab": { "base_uri": "https://localhost:8080/" } }, "outputs": [ { "output_type": "stream", "name": "stdout", "text": [ "El valor de a es: 1\n", "\tAún no hemos llegado al final\n", "El valor de a es: 2\n", "\tAún no hemos llegado al final\n", "El valor de a es: 3\n", "\tAún no hemos llegado al final\n", "El valor de a es: 4\n", "\tAún no hemos llegado al final\n", "El valor de a es: 5\n", "El valor de a alcanzó el límite\n", "Fin del programa\n" ] } ], "source": [ "a=0\n", "while a >= 0:\n", " a += 1\n", " print(\"El valor de a es: \", a)\n", " if a == 5:\n", " print(\"El valor de a alcanzó el límite\")\n", " break\n", " print(\"\\tAún no hemos llegado al final\")\n", "print(\"Fin del programa\")\n" ], "id": "CUE6qM95jYkS" }, { "cell_type": "markdown", "metadata": { "id": "2iJpY1l0jYkT" }, "source": [ "### Saltar una iteración con un ```if``` ... ```continue```\n", "Para saltarnos una iteración del bucle añadimos un ```if``` con un ```continue```.\n", "Al llegar al ```continue``` no se siguen ejecutando el resto de las líneas de código internas al ```while``` que corresponden a esa iteración. Se salta a la siguiente iteración." ], "id": "2iJpY1l0jYkT" }, { "cell_type": "code", "execution_count": 6, "metadata": { "id": "DB4I85P-jYkT", "outputId": "83650d96-f7f9-4e96-98e6-939341f5fe1e", "colab": { "base_uri": "https://localhost:8080/" } }, "outputs": [ { "output_type": "stream", "name": "stdout", "text": [ "1\n", "2\n", "4\n", "5\n" ] } ], "source": [ "i = 0\n", "while i < 5:\n", " i += 1\n", " if i == 3:\n", " continue # cuando llega aquí no sigue ejecutando líneas y continúa con la siguiente iteración\n", " print(i)\n", "\n", "# Observe que falta el 3" ], "id": "DB4I85P-jYkT" }, { "cell_type": "markdown", "metadata": { "id": "8xMxb8ILjYkT" }, "source": [ "## Uso de ```else```\n", "Si se sale del bucle mediante una interrupción ```break```, la cláusula else no se ejecutará." ], "id": "8xMxb8ILjYkT" }, { "cell_type": "code", "execution_count": 7, "metadata": { "id": "YwrnvhmJjYkU", "outputId": "a4eea246-c625-4801-8b09-bdc80a457c6f", "colab": { "base_uri": "https://localhost:8080/" } }, "outputs": [ { "output_type": "stream", "name": "stdout", "text": [ "1\n", "2\n", "3\n", "4\n", "5\n", "Hemos llegado a 5\n", "Fin del programa\n" ] } ], "source": [ "i = 1\n", "while i <= 5:\n", " print(i)\n", " i += 1\n", "else:\n", " print(\"Hemos llegado a 5\") # solo se ejecuta una vez que el bucle se ha completado\n", "print(\"Fin del programa\")" ], "id": "YwrnvhmJjYkU" }, { "cell_type": "code", "execution_count": 8, "metadata": { "id": "mhAHtZdYjYkU", "outputId": "db5e3ab3-0ea3-45a0-b4e8-2ad28b616c53", "colab": { "base_uri": "https://localhost:8080/" } }, "outputs": [ { "output_type": "stream", "name": "stdout", "text": [ "1\n", "2\n", "3\n", "Fin del programa\n" ] } ], "source": [ "i = 1\n", "while i <= 5:\n", " print(i)\n", " if i == 3:\n", " #print(\"El bucle se rompe en i=\",i)\n", " break\n", " i += 1\n", "else:\n", " print(\"Hemos llegado a 6\") # no llega a ejecutarse debido al break\n", "print(\"Fin del programa\")" ], "id": "mhAHtZdYjYkU" }, { "cell_type": "markdown", "metadata": { "id": "mUYEcr6ZjYkU" }, "source": [ "### Ejercicio\n", "Crear un caso donde se use un bucle ```while``` en el que podamos usar las sentencias ```break```, ```continue```, ```else```." ], "id": "mUYEcr6ZjYkU" }, { "cell_type": "markdown", "metadata": { "id": "rcKsjB-ajYkU" }, "source": [ "## Ejemplo: ver si un elemento está en una lista\n", "Solicitar al usuario que introduzca un número entre 20 y 99, ambos incluidos. Si el número no está en ese rango se seguirá pidiendo otro número. \n", "Con el número introducido comprobaremos si se encuentra en la lista primos. \n", "primos = [23, 29, 31, 37, 41, 43, 47, 53, 59, 61, 67, 71, 73, 79, 83, 89, 97]" ], "id": "rcKsjB-ajYkU" }, { "cell_type": "code", "execution_count": 10, "metadata": { "id": "Fp9mIT07jYkV", "outputId": "5385bbdd-f89c-4427-8230-7e3915de01aa", "colab": { "base_uri": "https://localhost:8080/" } }, "outputs": [ { "output_type": "stream", "name": "stdout", "text": [ "Indique un número entre 20 y 99 97\n", "97 si está en la lista de primos\n" ] } ], "source": [ "primos = [23, 29, 31, 37, 41, 43, 47, 53, 59, 61, 67, 71, 73, 79, 83, 89, 97]\n", "while True: # estamos preguntando continuamente mientras n no sea válido\n", " n = int(input('Indique un número entre 20 y 99 '))\n", " if 20 <= n <= 99: break # se sale cuando n está en el rango válido\n", "\n", "if n in primos: # comprobamos si el número n está en la lista primos\n", " print(n, 'si está en la lista de primos')\n", "else:\n", " print(n, 'no está en la lista de primos')" ], "id": "Fp9mIT07jYkV" } ], "metadata": { "kernelspec": { "display_name": "Python 3", "language": "python", "name": "python3" }, "language_info": { "codemirror_mode": { "name": "ipython", "version": 3 }, "file_extension": ".py", "mimetype": "text/x-python", "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", "version": "3.8.5" }, "colab": { "name": "0380_bucle_while1.ipynb", "provenance": [], "include_colab_link": true } }, "nbformat": 4, "nbformat_minor": 5 }