-
Notifications
You must be signed in to change notification settings - Fork 90
4. Python 101: Introducción al código
¿Por qué utilizaremos Python?
Python es uno de los lenguajes de programación más utilizados en el mundo y es un lenguaje de propósito general que se usa para el desarrollo de videojuegos, desarrollo web, scripting y ciencia de datos por mencionar algunos. Específicamente es un lenguaje interpretado, lo que significa que un intérprete corre y ejecuta tu código línea por línea en vez de compilar un programa para crear un archivo ejecutable, también es **multiparadigma **ya que nos permite programar de manera estructurada, orientado a objetos o funcional y multiplataforma.
No entraremos a fondo sobre qué significa todo esto pero siéntete libre de buscar un poco más sobre cómo funcionan los lenguajes de programación.
Este lenguaje es usado en servicios populares como YouTube, Instagram, Dropbox, entre muchas más y tiene un gran soporte por parte de la comunidad, ya que lo mejor de todo es que es Open Source. Y también es un lenguaje muy popular para aprender a programar ya que es relativamente fácil y sencillo.
Los programas de Python se pueden correr en cualquiera de los principales sistemas operativos. Python se puede instalar en Windows descargándolo desde la página oficial, o bien tanto en Mac como en las distribuciones de Linux, ya se encuentra incluido en el sistema, sin embargo siempre es buena idea revisar la versión con la que cuentan ya que esta puede estar desactualizada. Para este curso podrás usar cualquiera de las versiones 3.x en adelante.
Como nota, a menudo se usa la palabra "script" en lugar de "programa" para describir un archivo de código de Python pero usualmente suelen referirse a lo mismo.
Bien, ahora veamos cómo crear y correr programas en Python, si bien lo podemos instalar y correr en nuestra máquina local, usaremos una herramienta interactiva llamada Google Colab para nuestros ejercicios. Colab es un servicio gratuito en la nube que nos permite correr notebooks o cuadernos (específicamente Jupyter Notebooks) en los servidores de Google y son muy utilizados en el campo de ciencia de datos para trabajar de manera colaborativa. Estos notebooks interactivos nos permitirán hacer lo siguiente:
- Escribir y ejecutar código desde nuestro navegador.
- Combinar texto, imágenes o ecuaciones con nuestro código.
- Usar Markdown para darle formato a nuestros cuadernos.
- No requieren de instalación o configuración.
La conveniencia de usar Notebooks y Google Colab es que podemos compartir o explorar otros proyectos disponibles en internet y modificarlos o ejecutarlos directamente en ese momento desde nuestro navegador.
Un Notebook está compuesto de celdas, estas pueden ser de texto o de código ejecutable, sin embargo no solo nos limita a esto, sino que podemos tener visualizaciones interactivas, importar paqueterías y compartir este documento como cualquier otro archivo de Google Drive e incluso sincronizarlo con GitHub o descargarlo para abrirlo en otro servicio que soporte este tipo de Notebooks.
Si entramos a https://colab.research.google.com/ , desde aquí podemos abrir o crear un nuevo notebook o abrir el cuaderno de bienvenida que nos explica un poco más sobre cómo funciona:
- Empecemos por crear un nuevo notebook en blanco y cambiarle el nombre al documento.
- Agregaremos una nueva celda de texto, las celdas de texto sirven para darle una narrativa y explicar el código que estamos escribiendo. Utilizan la sintaxis de Markdown para darle formato por lo que podemos agregar imágenes, enlaces y demás.
- Ahora agregaré una celda de código e imprimiré el mensaje “hola mundo”. Podemos ejecutar el código dándole clic al botón de play o desde el teclado con shift + enter.
Cuando escribimos un programa, el intérprete de Python lee el código y ejecuta las instrucciones que contiene de manera secuencial, en este caso las celdas pueden contener una o varias líneas de código y se ejecutan una por una, el número que aparece entre los corchetes denota el orden en que se ejecutando cada celda. Aunque también existe la manera de ejecutar todo el cuaderno de una sola vez.
Con la barra de opciones que aparece de lado derecho podemos eliminar la celda, moverla de posición, copiarla, etc.
Para crear una copia en GitHub de uno de nuestros notebooks, le damos en archivo, guardar una copia en GitHub y nos pedirá que demos acceso a Colab de acceder a nuestros repositorios. Una vez que lo hayamos hecho podemos seleccionar el repositorio en donde queremos guardarlo, la rama y la ruta y nombre del archivo, en este caso si quisiéramos guardarlos en nuestra carpeta de notebooks, ponemos el nombre de la carpeta seguido de una diagonal y el nombre del archivo y le damos en aceptar.
Bien, ahora, antes de empezar a escribir código en Python, comentaremos un par de cosas importantes que hay que tomar en cuenta.
Python al igual que muchos lenguajes de programación, distingue entre el uso de mayúscula y minúsculas, lo que significa que si escribimos dos palabras idénticas pero una con mayúsculas y la otra no, serán tomadas como 2 cosas completamente diferentes.
A diferencia de otros lenguajes, la indentación es muy importante en Python, con esto nos referimos al espacio que usamos entre las líneas de código, ya que no cuenta con elementos como punto y coma o una sintaxis más estricta para darle estructura. Esto puede ser un poco frustrante en un inicio ya que aunque estemos haciendo todo bien, si no usamos correctamente los espacios, nuestro programa no correrá en Python, pero a la larga nos ayuda a tener un código más limpio y legible.
Es normal que cometamos errores al escribir código y estos nos saldrán resaltados en mensajes que nos indicarán la línea o líneas exactas en donde se encuentran estos errores. Esto no es algo malo, simplemente nos indica que hay algo en nuestro código que no está sabiendo interpretar. Algunos errores serán muy obvios de corregir pero no siempre es el caso, no tengas miedo de copiar y pegar el mensaje de error en Google para saber de qué se trata.
En este video aprenderemos los fundamentos sobre el lenguaje Python que nos ayudarán a programar cosas más complejas en el futuro.
En Google Colab, usaremos las celdas de código para ejecutar nuestros bloques de código de Python, después de ejecutar una de estas celdas tendremos justo abajo los mensajes de salida, donde se mostrará nuestro resultado. Es importante notar que si no indicamos explícitamente que se muestre o “imprima” (como comúnmente le llamamos en programación) una salida , no siempre veremos que algo está pasando pero esto no significa que el código no se haya ejecutado.
Por defecto todos los lenguajes de programación tiene varias funciones, palabras reservadas y estructuras integradas dentro del mismo. Dos de las más fundamentales son las funciones de entrada y de salida:
-
input()
tiene como argumento una cadena de texto que da las instrucciones que se deseas desplegar. -
print()
es una función integrada que muestra el valor de entrada como texto en la salida.
Como vimos cuando imprimimos nuestro primer “Hola mundo”, usaremos print muy a menudo para mostrar los resultados, todo lo que tenemos que hacer será escribir la palabra print, seguido de paréntesis alrededor de lo que queramos que se muestre.
También podemos agregar comentarios dentro de nuestro código usando el símbolo de hashtag para comentarios de una sola línea o triple comillas dobles para comentarios de múltiples líneas. Estos no serán ejecutados en nuestro programa, su función principal es describir el código para que sea más entendible.
Podemos pensar que una variable es como un contenedor de información. Python puede albergar distintos tipos de datos, como valores numéricos, booleanos y cadenas de texto. Al ser Python de tipado dinámico, no hace falta declarar el tipo de variable, sino que sólo basta con definir sus valores.
Para declarar una variable simplemente escribimos el nombre que le queremos dar, el signo de igual y el valor que le queremos asignar. Es importante aclarar que esta no es una expresión de igualdad matemática, en Python el signo de igual es un operador que asigna el valor de la derecha al nombre de la variable en la izquierda.
Por ejemplo podemos escribir esta variable que se llame poblacion = 126200000, que representa los aproximadamente 126 millones de habitantes que hay en México. Si imprimimos la variable población podemos ver que nos regresa el valor que está almacenado en ella.
También podemos reutilizar las variables y sus valores para crear nuevas, por ejemplo:
x = 2
y = x
print(y)
Es recomendable nombrar nuestras variables con un nombre que describa lo que están representando y no con nombres genéricos como X o Y. También existen ciertas limitantes sobre cuál es un nombre válido para una variable y cuál no.
- No se pueden usar espacios, pero podemos sustituirlos con guión bajo.
- No se pueden usar caracteres especiales.
- No se puede iniciar con un número.
- No se puede usar palabras reservadas, como la palabra print.
- Y por último es recomendable usar solo minúsculas, aunque esto no es obligatorio.
Hasta ahora hemos visto cómo declarar variables, pero los valores que almacenan pueden ser de distintos tipos como te habrás dado cuenta. Estos son:
int
- Tenemos los números enteros o integers.
float
- Número decimales o flotantes.
Cada uno de ellos es un tipo de datos diferente y no es lo mismo tener un 4 entero que un 4.0 flotante. Como comentamos cada valor que guarda una variable tiene un tipo, podemos checar el tipo de este valor utilizando la función type()
.
Una operación que involucra a un número entero y un número flotante, siempre produce como resultado un número flotante.
Habrá ocasiones en las que queramos convertir de un tipo de dato a otro, para esto podemos usar las funciones int y float. Convertir de flotante a entero lo que hará será quitar la parte decimal, esta no se redondea. Y de entero a flotante simplemente se agrega el punto decimal.
bool
- El tipo de dato booleano puede representar los valores verdadero o falso.
string
- Cadenas de texto.
Las variables que son cadenas de texto se declaran de la misma manera que los números, solo que estas llevan ya sea comillas dobles o simples al inicio y final del texto. Y pueden contener cualquier carácter.
Hay un par de operaciones que son usadas con número que también podemos usar con cadenas de texto. Por ejemplos podemos utilizar el símbolo de más para poner dos cadenas de texto juntas, en este caso agregué un espacio intermedio para separar las palabras.
Y el signo de multiplicación sirve para repetir una cadena de texto.
Aritméticos
Python tiene varios operadores aritméticos que siguen la lógica matemática para hacer operaciones.
-
+
Suma -
-
Resta -
*
Multiplicación -
/
División -
%
Módulo (este regresa el restante de una división) -
**
Exponenciación (ten en cuenta que ^ no realiza esta operación, como puede haber visto en otros idiomas) -
//
Divide y redondea al número entero más cercano
El orden de las operaciones en el que se interpreta cada expresión aritmética como "2 + 3 * 5" es de acuerdo al orden usual que se que se usa en matemáticas.
Asignación
Podemos sobreescribir una variable al volverla a escribir y cambiar el valor asignado, o por ejemplo en el caso de la variable población, supongamos que el número de habitantes creció y queremos agregar estos nuevos a la población. Podemos aplicar esto directamente al sobreescribir la variable con ella misma más el nuevo número de habitantes y esto nos da como resultado la suma.
Debido a que estas operaciones de reasignación e incremento de los valores en las variables es muy común en Python, existen operadores especiales de asignación para facilitar esto. En vez de escribir dos veces población, símplemente podemos usar + y signo de igual para decirle a Python que queremos incrementar el valor original con el valor de la derecha. Esto hace que nuestro código sea más conciso y funciona con el resto de los operadores aritméticos también.
Bien, ahora veremos las últimas dos operaciones que podemos realizar, ya que estas van de la mano.
Comparación
Las operaciones de comparación operan a nivel matemático de comparación sobre las variables, aquí podemos tener operaciones como mayo que o menor que para comparar 2 valores y esto nos genera un valor booleano de verdadero o falso.
Aquí tenemos una lista completa de las operaciones de comparación que podemos realizar. Nótese que para la operación de igual que se usa doble signo, esto es porque como comentábamos antes usar solo uno sirve para asignar una variable.
Lógica
Además de los operadores de comparación los operadores lógicos son muy útiles cuando estamos trabajando con valores booleanos:
and - evalúa si ambos lados de la expresión son verdaderos.
or - evalúa si al menos uno de los lados de la expresión es verdadero.
not - actúa como el inverso de cualquier booleano.
Podemos ver en este ejemplo que si quisiéramos determinar si cierta edad entra dentro de un rango para ser considerado como adolescente podríamos crear la variable adolescente, en donde si la edad es mayor que 12 y menor que 20 nos regresa que es verdadero, de lo contrario si la edad estuviera fuera de ese rango, la variable adolescente nos regresaría que es falso.
Bienvenidos, en este video veremos control de flujo o cómo ejecutar instrucciones en un orden específico para agregar más funcionalidad a nuestro código. Aquí, aprenderemos sobre varias maneras en Python que podemos usar para determinar la secuencia de nuestro código.
Pongamos una analogía, para entender qué es el control de flujo, supongamos que tenemos un camino, este puede tener varias salidas a otros caminos, puede tener semáforos que nos indican cuándo parar y cuándo seguir, o incluso si queremos dar vueltas y regresar por el mismo camino varias veces. Este tipo de control y reglas también aplican para programación en donde muchas veces queremos que nuestro código haga algo o time ciertos caminos dependiendo de ciertas reglas, existen 2 maneras principales de cómo podemos controlar esto, las condicionales y los ciclos.
Primero veamos cómo implementar declaraciones condicionales, estas las utilizaremos para validar si se cumple una o más condiciones para ejecutar cierto bloque de código, en esencia nos ayuda a tomar decisiones sobre el flujo de nuestro código.
Pensemos primero en un ejemplo, supongamos que tenemos datos históricos de la calidad del aire en nuestra ciudad, el gobierno usa estos datos para tomar medidas de salud, medio ambiente, movilidad, entre otras. Nosotros queremos usar estos datos para saber cómo ha sido la calidad del aire en determinado momento, y para esto usaremos como ejemplo Índice Metropolitano de la Calidad del Aire (IMECA), el cual mide siete contaminantes como dióxido de azufre, monóxido de carbono, partículas suspendida en el aire, entre otros y asigna una calificación general que se representa con una escala que va de 0 a 500, en donde un valor menor a 100 se considera satisfactorio y con un bajo riesgo para la salud. Cualquier nivel superior a 100 implica algún riesgo para la salud, entre más grande es el valor del índice, mayor es la contaminación y el riesgo.
Después usaremos una condicional IF que ejecuta o salta una serie de instrucciones basada en si una condición es verdadera o falsa. Para declarar una expresión condicional, utilizamos la siguiente sintaxis de código:
Primero declaramos una variable llamada valor_imeca
que almacenará el dato de calidad del aire promedio en un determinado día, pondremos como valor de ejemplo 35 por ahora.
La condición IF, seguida de la condición que queremos evaluar, en este caso evaluaremos si el valor_imeca es mayor a 100 y después dos puntos. La condición está especificada como expresión booleana que evalúa para falso o verdadero, lo que significa que usamos los operadores de comparación y los operadores lógicos para determinar dicha condición, y ésta nos debe regresar un valor booleano.
Después de esto escribiremos un bloque de código que se ejecutará si esta condición es verdadera, en este caso quiero que me imprima el mensaje “La calidad del aire es mala”. Cabe notar que este bloque debe estar indentado para poder correr, en Python, se usan cuatro espacios para cada nivel de indentación, también podemos usar tabulador aunque la guía de estilo de Python recomienda usar espacios. Debemos ser muy cuidadosos de seguir estas reglas, ya que intercambiar la manera de indentar puede cambiar completamente el significado del código.
Bien ahora corramos esta celda de código, ya que el valor que definimos de 35 es menor que el límite de 100, la condición evalúa a falso y por lo tanto no ejecutará el código indentado. Pero si cambiamos este valor a uno superior a 100, digamos 170, la condición será verdadera y se imprimirá el mensaje.
Hemos visto cómo los operadores de comparación de Python (por ejemplo, ==
y !=
) son diferentes a la asignación de variables (=). Veamos otro ejemplo, en las condicionales, si quisiéramos utilizar operadores de comparación. Por ejemplo, si quisiéramos saber si una variable que contenga nombres de ciudades es igual a la ciudad de León, pondremos en nuestra condicional IF ciudad == “León” : entonces imprimimos el mensaje “¡La ciudad es León!”
. Nótese que usamos doble signo de igual, justamente para que Python lo interprete como comparación y no como la asignación de una variable.
De la misma manera si en lugar de evaluar si es igual a León, comparamos si es diferente a León, y cambiamos el mensaje a “¡La ciudad no es León!”. Cambiaremos la ciudad a CDMX para que la condición se cumpla y nos muestre el nuevo mensaje.
Ya vimos cómo ejecutar código si se cumple cierta condición, pero qué pasa si queremos también ejecutar una serie de instrucciones diferentes en caso de que nuestra condición sea falsa?
Para esto podemos usar la palabra else, también seguida de dos puntos y el código indentado que queremos que se ejecute en caso de que la condición sea falsa.
Veamos ahora un ejemplo y donde además de la comparación haremos una operación aritmética: porque bien en el ejemplo usamos una condición para imprimir un mensaje, se puede usar para realizar cualquier operación como cálculos, modificación de variables y cualquier cosa que queramos ejecutar.
Tenemos la variable número, para este ejemplo solo usaremos números enteros. Queremos hacer una condicional que nos diga si un número es par o impar, si dividimos el número entre dos y el residuo de esta división es cero, esto significa que el número es par, de lo contrario, será impar. Este residuo lo podemos sacar usando el operador aritmético de módulo que está representado por el signo de porcentaje.
Entonces si la condición es verdadera imprimimos el número como número par y si es falsa imprimimos el número como impar. Usaremos los símbolos de más para insertar el número que estamos evaluando dentro del mensaje, el término correcto para esto es concatenación.
Primero veremos que pasa si ponemos como número uno par como 4. Si ejecutamos esta celda así como está tendremos un error, esto se debe a que no podemos concatenar un variable que no sea un string con el resto del texto, que es lo que nos está intentando decir el mensaje de error. Una solución simple es convertir la variable a un string usando la función str directamente sobre la variable al momento de imprimir el mensaje y ahora sí, nuestro código corre sin problemas y nos imprime el mensaje de que es par.
En cambio si pusiéramos un el número 7 que sabemos que es impar, y corremos el código la condición evalúa a falso lo que causa que se salte la primera instrucción y ejecute la que está debajo de else.
Si tenemos más de dos casos posibles, podemos usar ELIF (nombre corto para else if) para implementar la cantidad de posibilidades que sean necesarias. Al igual que IF, ELIF también requiere una condición a evaluar.
Retomemos el ejemplo de calidad del aire, usaremos la misma tabla que antes para determinar exactamente en qué categoría se encuentra un valor de acuerdo a los rangos que establece. En este caso tenemos 5 categorías posibles, así que iremos evaluando una por una,
Primero si el valor es menor a 51 entraría dentro del rango de calidad buena en el segundo caso nos dice que si el valor está entre 51 y 100, por lo que pondremos elif valor mayor a 50 y valor menor a 101 entonces la calidad del aire es regular. Como habrás notado aquí utilizamos una operación lógica para obtener un valor booleano de dos comparaciones, esto para definir exactamente el rango que queremos, siempre es buena idea ser lo más explícitos posibles cuando estamos programando, ahora solo copiaré y pegaré este bloque y reemplazaré los valores para el resto de las categorías dejando al último un else para cubrir todos los casos que sean mayores a 200.
Tenemos que ser cuidadosos al escribir expresiones que use operadores lógicos en nuestra condición, si solo pusiéramos valor > 150 and < 201
aunque quizás suene bien, esto solo estaría haciendo la comparación de valor mayor a 50 y la otra parte no se estaría comparando con nada y no sería una sintaxis válida, por eso tenemos que repetir la variable que queremos comparar.
Las condicionales If a veces usan expresiones más complicadas para sus condiciones. Pueden contener múltiples operadores de comparación, operadores lógicos e incluso cálculos, lo importante es que el resultado final siempre sea verdadero o falso.
Los ciclos nos permiten repetir bloques de código, y existen dos tipos, los ciclos FOR y los ciclos WHILE. Empecemos por los ciclos FOR.
For
Un ciclo FOR se usa para "iterar", o hacer algo repetidamente, sobre un iterable. Con un iterable nos referimos a un objeto que puede devolver cada uno de sus elementos a la vez.
Similar a como declaramos las condicionales, para este ciclo pondremos la palabra reservada for y enseguida pondremos una variable de iteración, la cual es una variable que representará el elemento que se está ejecutando en ese momento del ciclo. Después la palabra reservada in y por último necesitamos algo sobre que iterar, este objeto iterable del que hablamos puede ser un rango de números o una colección de objetos pero estas las veremos más adelante.
Volvemos a poner dos puntos y en el código indentado ponemos lo que queremos que se ejecute cada vez que se itere. Podemos usar la variable de iteración dentro del código para acceder al valor durante la iteración. Este código es ejecutado una vez por cada elemento iterable.
Función range
Bien ahora veamos un cómo se hace, en este caso para poder hacer nuestro ciclo for usaremos la función range como iterable. range() es una función incorporada en Python que se utiliza para crear una secuencia iterable de números. Esta se usa en los ciclos FOR para repetir una acción un cierto número de veces dentro de este rango que definamos.
La estructura para definir un rango es la siguiente: range(start, stop, step) recibe 3 argumentos los cuales deben de ser número enteros. Tenemos:
- Start es el primer número en donde empezará la secuencia.
- Stop es uno más del número donde terminará la secuencia.
- Step es la diferencia de los saltos entre los números de la secuencia.
Siempre es necesario especificar el número en el que debe parar osea el stop, en cambio el de start y step son opcionales. Si no especificamos el número en el que debe iniciar la secuencia, por defecto empieza en cero y el número del salto será uno.
Pongamos un ejemplo, si creamos un for y ponemos la función range y entre los paréntesis sólo indicamos un número, este será interpretado como punto en el que debe parar y regresará una secuencia de números desde el cero hasta este número menos uno. Es importante aclarar que siempre se empieza a contar desde cero y no desde uno a menos que indiquemos lo contrario. También, siempre obtendremos una secuencia que finaliza con un número menos del que indicamos como el número de stop.
for i in range(3)
print(i)
o podemos imprimir un mensaje tres veces por ejemplo.
for i in range(3)
print(“Hola”)
En cambio vamos un ejemplo en donde usemos los 3 parámetros, si quisiéramos imprimir todos los números que son múltiplos de 5 del 1 al 100 podríamos hacerlo con el siguiente ciclo for y la función range
. O en otras palabras empezará a contar 5 en 5 hasta llegar al 100.
for numero in range(0, 101, 5)
print(“El número: ” + str(numero) + “ es múltiplo de 5.”)
También podemos hacer ciclos más complejos como hacer operaciones aritméticas e incluir condicionales y en realidad programar cualquier acción.
While
Los ciclos for son un ejemplo de una "iteración definida", lo que significa que el ciclo se ejecuta un número predefinido de veces. Esto difiere de los ciclos while en donde tenemos "iteración indefinida", que es cuando un bucle se repite un número desconocido de veces y finaliza cuando se cumple alguna condición
Componentes de un ciclo while:
- La primera línea comienza con la palabra reservada while, lo que indica que se trata de un ciclo while.
- Después de eso, es una condición que se debe verificar.
- El encabezado del ciclo while siempre termina con dos puntos:.
- Después de esto está el código que ejecutará si la condición para el ciclo es verdadera. Recordemos que debe estar indentado.
- una vez que se haya ejecutado este código la condición del ciclo se evalúa nuevamente. Este proceso de verificar la condición y luego ejecutar el ciclo se repite hasta que la condición se vuelve falsa.
- Cuando la condición se vuelve falsa, saldremos del ciclo y se dejará de ejecutar el código.
Empecemos con un ejemplo sencillo para entender las diferencias sobre cómo funciona este ciclo a comparación de un for. Imprimamos el mensaje “hola” 3 veces. Para esto primero declararemos una variable llamada numero en cero, esta será la que no ayude a iterar. Entonces mientras numero sea menor a 3 imprime el mensaje hola y ahora sumamos uno a esa variable para que vaya incrementando en cada iteración y así poder salir del ciclo una vez que se haya llegado a 3.
numero = 0
while número < 3:
print(“Hola”)
numero = numero + 1
Es muy importante que el código que se esté ejecutando modifique al menos una variable en la condición que se está evaluando. Si el valor de la condición de prueba nunca cambia el resultado será un ciclo infinito.
Ahora que ya sabemos un poco mejor cómo funcionan los ciclos for y while, consideremos cuándo es más útil utilizar cada uno de ellos.
- Los ciclos for son ideales cuando el número de iteraciones es conocido o finito.
- Los ciclos while son ideales cuando las iteraciones deben continuar hasta que se cumple una condición.
Pongamos un último ejemplo, supongamos que hay un virus que está enfermando a las personas y queremos saber cuántos personas se podrían contagiar de este virus en un periodo determinado de tiempo si el ritmo de contagios es constante, digamos en 10 días.
Primero declaramos la variable personas_enfermas, ésta representará el número de casos que hay, supongamos que inicialmente tenemos 3 personas enfermas y esta será nuestra base.
Después usaremos una variable llamada dia, esta nos servirá para determinar en qué dia estamos desde que iniciaron los contagios e irá aumentando uno por uno en nuestro ciclo. Lo inicializamos en 0.
Nuestro ciclo while debe evaluar y ejecutar el código hasta que esta variable día sea 10.
Lo primero que haremos será imprimir el día y el número de contagios por cada iteración, en este caso lo estoy haciendo antes del resto del código ya si cambio el orden me imprimirá los valores después de haber aumentado el número de contagios y no antes.
Mientras va pasando de un día a otro el número de personas enfermas se va multiplicando por una constante, entonces digamos que el factor de crecimiento es del doble de personas enfermas cada día, por lo que multiplicaremos nuestra variable por 2 y se la asignaremos a la misma.
Y por último sumamos 1 al día actual para actualizar el contador de días y que nuestro ciclo pueda llegar a 10 eventualmente y parar.
Si ejecutamos esta celda podemos ver el crecimiento exponencial de casos de personas enfermas por este virus, en tan solo 10 días pasamos de tener 3 a 1536, osea más de 500 veces el número de casos.