Y vamos allá. Habíamos quedado en los bucles, habíamos visto el bucle FOR. Vamos a terminar hoy con el bucle WHILE. Si os acordáis, el bucle FOR, básicamente lo que hacía era hacer una secuencia de órdenes X veces, entre otras cosas. Por ejemplo, le podías mandar haz algo 50 veces o 40 veces o hasta que se cumpla una condición. Por ejemplo, hasta la 101 vez. En la 101 vez o hasta que un número sea mayor que otro o hasta que el sexo en una base de datos sea masculino o femenino, tú le puedes poner una condición y entonces se acaba. Sin embargo, el WHILE es un bucle que se pertenece. Y se permite hasta que se cumpla una condición, básicamente. Entonces, vamos a ver. Aquí teníamos un ejemplo. ¿Qué hace un bucle WHILE? Pues eso. Se hace las órdenes que le mandes, las líneas de código que le mandes, las hace X veces. X veces no, perdón, eso es FOR. Las haces hasta que se cumpla una serie de condiciones y acabe por la condición TRUE. Vale. Como dice aquí, tenéis que tener mucho cuidado porque con los bucles WHILE tenéis el riesgo de que os metáis en un bucle infinito. Es decir, que nunca salgáis de ahí. Que la condición que pongáis para que termine el bucle pues nunca se llegue a cumplir. Imaginaros que estáis calculando, haciendo un cálculo de... De X personas y le ponéis la condición para que llegue a un número determinado y ese número determinado nunca se llega a dar. Entonces, se queda haciendo el bucle de forma infinita. Pero bueno, eso no... Es cosa habitual en la programación que pasen esas cosas. Vamos a poner un pequeño ejemplo para que entendáis el bucle WHILE. Que es sumar los 10 números, los 10 primeros números naturales. Entonces, vamos a hacerlo. Vamos a nuestro Python. Y os voy a ir explicando línea a línea. Fijaros. Disculpad. Entonces, ¿qué hace este ejercicio? Pues mirad. Este ejercicio lo primero que hace es... Estableces un bucle, un WHILE, que dice... Ejecuta el bucle tantas veces hasta que se cumpla la condición de que el número, la variable número, sea menor o igual que 10. Entonces, teóricamente esto se hará 10 veces, ¿no? Porque en realidad lo que hace esta condición es sumar los 10 primeros números naturales. Vamos a ponerle aquí para que veáis un título. Sabéis que los títulos para el programador, no para el operador. No para el usuario del programa. Esto es para el programador. Esto el usuario del programa jamás lo va a ver, ¿no? El usuario del programa, todo lo que ve se lo tendríais que mostrar por print. Y esto es para un poco como un título para que el programador sepa lo que hace este programa, ¿no? ¿Qué hace este programa? Suma los 10 primeros números naturales. Entonces, fijaros. Aquí hay una variable que se llama número. Y que va a cambiar de valor un poco más abajo. Va cambiando de 1 en 1. Cuando ese número llegue a 10 o más de 10, se sale por aquí. Se sale por esta línea de print. Entonces, ¿qué es lo que hay dentro del bucle? En este caso, dentro del bucle solo hay dos líneas de código. Una suma y otra suma. Os voy a explicar ahora lo que hace cada suma. ¿Por qué sé que estas dos líneas de códigos es lo que va a hacer el bucle, el while? Porque están intentadas. Intentadas. Es lo mismo decir que tienen un pequeño tabulador. Es decir, fijaros. Esto estaría mal. ¿Por qué? Porque lo que va a hacer el bucle, lo que hay dentro del while, tiene que estar tabulado. Tabulado o intentado. Si no, no lo haría. Esto sería como una línea más de código del programa, pero no dentro del bucle. Sino una suma como muchas que hemos hecho en otros ejercicios, ¿no? Entonces. Para decirle. Para decirle que estas dos líneas de código pertenecen al bucle, tiene que estar intentado o tabulado. Llamarlo como queráis. Ahora él ya sabe que estas dos líneas están dentro del while. Esta línea que hay acá abajo, no. Esta línea está fuera del while. Es decir, no pertenece al bucle. Es decir, que el bucle haría primero esta suma, luego esta suma, volvería arriba. Acordaos que un bucle es como... La misma palabra lo dice, ¿no? Es cíclico. Volvería arriba. Haría otra vez la suma, otra vez la suma, volvería... ¿Y cuántas veces lo haría? Lo haría una, dos, tres... Pues mirad. La primera línea de código que hay dentro del bucle es... Que suma... La palabra... Número... Perdón, la variable número y la variable suma. La suma de estas dos cosas... Las metemos en la variable suma. Y en la siguiente línea de código incrementamos en uno la variable número. Os lo voy a ir explicando un poco más despacito, a ver si lo entendéis. Vamos a hacer una cosa. Vamos a dejar, para que lo veáis claro... Vamos a inicializar a cero la variable suma y la variable número. Empiezan en cero. Ya sabéis que por asignación yo puedo meter en una variable, puedo meter lo que quiera. En este caso... Empieza por cero, ¿vale? Eh... Me hacen una pregunta porque... En el chat que dicen que ¿por qué la variable número empieza siendo cero? Bueno, pues que normalmente... En programación las variables siempre empiezan en cero. A no ser que tú digas lo contrario. Si tú quieres que comience en uno, la inicializas como tú quieras. Es decir, tú la puedes inicializar en uno. Yo le puedo decir, no, el número quiero que empiece en uno. Y entonces ahí... Le pongo un uno, ¿vale? Pero vamos a empezar por cero. Vale. Aunque me preguntan, pues ya lo estoy explicando, ¿vale? Que la he inicializado en cero. Pero que la puedo inicializar en lo que quiera. Si no la inicializo funciona igual el programa. Porque cuando tú ejecutas un... Cuando empiezas un programa siempre las variables toman como valor inicial el cero. No hace falta hacerlo, pero por si acaso quedan restos de memoria o... Siempre me gusta inicializar las variables. Vale. Fijad lo que hace la primera línea del bucle. ¿Cuánto vale cero la primera vez? ¿Cuánto vale número la primera vez? Cero. Entonces la primera vez que entra en el bucle, pregunta. Mientras el número sea menor o igual que diez, hace el bucle. Como número vale cero la primera vez, el bucle lo hace. ¿Qué hay dentro del bucle? Hay una cajita que se llama suma. Que vale cero la primera vez. Hay una cajita que se llama número. Que vale cero la primera vez. ¿Y qué está diciendo? Pues suma el número cero más el número cero la primera vez. Mete un cero. Vale. Con el número cero no suma nada. Pero luego incrementa el número en uno. Fijaros cómo se incrementan los contadores. Esto es un contador. Esto que veis aquí es un contador. Un contador en programación es algo que cuenta de uno en uno, de dos en dos, lo que tú quieras. En este caso estoy contando de uno en uno. ¿Cómo se incrementa en uno el contador? Pues diciéndole que el número es igual al número más uno. Acordaros que este igual en programación no es comparación. No, es asignación. Estás metiendo dentro del número, estás metiendo el valor. Entonces, si el número... Bueno, aquí hay alguien que tiene problemas y dice que si no inicializa la variable le dice que no está definida. Bueno, puede ser algunas veces, pero sin embargo depende de la versión que tengáis de Python. Hay veces que no hay que inicializar las variables. Vamos, de hecho yo muchas veces no las inicializo y me funciona. Vale, entonces, lo que vamos a hacer ahora... Ah, vale. Entonces, esto es un contador. Está diciendo que número es igual al número más uno. La primera vez es número vale cero, número vale cero, cero más uno, uno. Número ya vale uno. Entonces, vuelvo otra vez al while. Vuelvo otra vez al bucle para ver si tiene que seguir o se acaba. Y en dos números acordaros que vale uno ya, ¿eh? Y dice, ¿número que vale uno es menor que diez? Sí. Haz otra vez el bucle. Entonces, ahora ya suma. Valía cero. Número vale uno. Con lo cual, suma uno más cero. Ya vale uno. ¿Vale? Siguiente línea. Número valía uno. Uno más uno, dos. Número ya vale dos. Entonces, hace... Hace otra vez el bucle porque vale dos. Y fijaros en la siguiente. Suma. Ahora, ¿qué valdrá? Dos, que vale número, más uno, que antes se quedó en la cajita el valor de suma, ya son tres. Dos más uno, tres. La cajita suma, ya tiene un tres. Después sumará tres más tres, seis. Tres más cuatro, vale, siete. Y así va sumando, va sumando de uno a uno, ¿vale? Entonces, suma. Va haciendo el bucle unas cuantas veces hasta que número... Aquí, imaginaros que el número ya vale diez. Entonces, viene aquí al contador y se incrementa en once. Porque diez es igual a diez más uno. Con lo cual, por asignación, metemos un once en número. Vuelve al while. Y como ya vale número once, dice... Once es más pequeño o igual que diez. No. Se sale del bucle. Y continúa en la siguiente línea de... El programa continúa siempre. Siempre, acordaros, los programas siempre van de arriba a abajo. A no ser que haya funciones, que son como saltos en la programación. Es como si fuera un perform, que va, hace una serie de código y vuelve, que ya la veremos. Sin embargo, en condiciones normales, aquí no existe el go to como en otras lenguajes de programación. Es lineal. Y esto quiere decir que cuando se acabe el bucle... Esta línea de código que hace es este print. Este print ya... ¿Y por qué no pertenece al bucle el print? Porque no tiene tabulación. Si tuviera tabulación, por ejemplo, así... Ya sería... Esa línea de código pertenecería al while. Pero como eso es lo que se hace después del while... No está intentado. ¿Y qué hace esto? Pues simplemente lo que le estamos diciendo es... Que muestre el resultado de... La suma. Le pongo un print con un literal que se llama, con una línea de texto... Y el contenido de la variable suma. Y entonces ahí ya le digo que muestre el valor. Vamos a ejecutarlo. F5. Aquí está. La suma es 55. La suma de los números del 1 al 10 es 55. Vale. ¿Qué pasa si no inicializo los valores? Vamos a ver. Pues puede ser que de error... A veces de error... A veces no. A ver... F5. Vale, sí, me da error. Hay veces que da error y hay veces que no. Pero vamos a inicializarlo y evitamos el error. ¿Vale? Inicializamos 0 y inicialemos 1. Vamos a ver. Como dicen en el chat... Este programa... Efectivamente solo da la suma total. Si quisierais ir viendo los pasos que va dando... Es decir... ¿Cómo va yendo la suma? Es decir... 1 más 2... 3. 3 más 2... 5. 5 más 4... Si quisierais ver todo el proceso... Dentro del bucle habría que meter un print. Entonces tendría que ir tabulado. Entonces ahí sí. Y podríamos ir viendo cómo va la suma. F5. Y aquí está. ¿Estáis viendo? El 1 con el 1, el 1 con el 2... Así hasta el final. ¿Vale? ¿Veis por qué han salido tantos resultados por esta línea? Porque dentro del bucle he metido esto. Entonces acordaros que el bucle... Voy a hacer algo aquí. Es como si fuera así. Fijaros. A ver si así lo entendéis. Es un poco parecido a... Esto y esto es lo mismo. Le estamos diciendo... Hace el bucle mientras... Mientras el número sea menor o igual... Igual que 10. Entonces lo hace una vez, lo hace otra vez... Y cuando acabe... Cuando no se cumple la condición de que sea menor o igual... Si no es menor que igual... Entonces se va por el else. Es de lo contrario... De lo contrario... Me muestras el resultado total. ¿Vale? En este caso es lo mismo hacer esto... Que hacer esto. Esto es lo mismo. Porque cuando se sale del bucle... Es como si aquí hubiera un else que no estáis viendo. Un else implícito. Muy bien. El símbolo que hay delante del string... Es un más. Esto es un... Te permite... Es concatenar texto. Es lo mismo eso... Que si pusieras una coma... Y suma es lo mismo. Esto... Vamos a ver... Esto y esto... Viene a ser lo mismo. Es lo mismo. ¿Veis aquí las dos formas de hacer lo mismo? En este caso es lo mismo. Aquí muestro el valor de la palabra suma... De la variable suma... Y aquí lo que estoy es concatenando con el más. Concatenar es como pegar. Unir. Esto y esto en este caso es lo mismo. Poniendo una coma y poniendo la variable... O poniendo un más. Vamos a dejar con el más, que es como estaba. Vale, pues esto es el while. Creo que había algún ejercicio más interesante con el while. Vamos a ver... Creo que estaba por aquí. Había uno muy interesante. A ver... Creo que os lo han enviado también. Mirad, este está muy bien. Para que entendáis el... Mirad lo que vamos a hacer ahora. Vamos a mostrar... Por pantalla... Los 100 primeros números naturales. Vale, abrimos una cajita que se llame x... Y la inicializamos a 0. Y hacemos un bucle. ¿Veis? Un bucle... Que se haga 100 veces. ¿No? Y que diga... Mientras... While, acordaros que es mientras. Mientras x sea menor que 101... Hace el bucle. ¿Qué dos líneas le vamos a mandar hacer dentro del bucle? ¿Qué dos instrucciones le vamos a mandar dentro del bucle? Que muestre en pantalla algo... Y que haga un contador. Vamos a llamar a contador... Vamos a llamar a x contador para que lo entendáis mejor. En lugar de x lo vamos a llamar contador. Contador, contador y contador. Contador es igual a contador más 1. Acordaros que los contadores siempre se incrementan de la misma manera. También hay otra forma que es... Luego os lo digo, no recuerdo ahora. Pero que yo soy de la vieja escuela... Y me gusta utilizarlo así. Pero ahora Python tiene una forma también de incrementar los contadores de una forma más corta. ¿No? Creo que es así. Creo que es con... Luego lo miro. Entonces, fijaros. Ponemos el contador a 0. Hacemos un bucle que diga que mientras el contador sea menor de 101, el bucle se sigue haciendo. ¿Y qué hay dentro del bucle primero? Muéstrame. Hay un print. Lo que tenga la variable contador... Aquí está el print. Print contador. Muéstrame el contenido de la cajita contador. Y me incrementas el contador en 1. ¿Cómo se incrementan los contadores en 1? Diciéndole al contador, por asignación, le vamos a meter lo que tenía el contador antes más 1. Si el contador antes tenía un 1, 1 más 1, 2. Si tenía un 5, el contador, 5 más 1, 6. Esa es una forma de decirle 6, 7, 8. Cada vez que haga una vuelta al bucle, va subiendo de valor. Y ya está. Vamos a ver qué hace. Esto, F5. Aquí está. Fijaros, empieza en el 0 y muestra los 100 primeros números naturales. Cuando llega al 100, fijaros, cuando llega al 100 se acabó. Vamos a ponerle una cosita al contador. Vamos a ver si... Me parece que era así. No me acuerdo porque yo utilizo el otro sistema. Sí. Vale. Mirad, esto es lo mismo que esto. Estas dos líneas son idénticas. Son dos formas de incrementar un contador. Diciéndole, contador más igual 1, es decir, por asignación, incrementame en 1 lo que tenga contador. Resumiendo, cuenta uno más. Si quieres contar de 2 en 2, aquí pones un 2. Entonces contaría de 2 en 2. Y esta es un poco la vieja escuela. Contador, lo que tenga contador, renuevas el contenido de la caja contador como lo que tuviera contador más 1. Si tenía un 5, 5 más 1, 6. Vale, son dos formas de hacer la misma historia. A mí me gusta más esto, pero podéis utilizar el que queráis. Vamos ahora a hacer un... a poner una línea más. Cuando se acabe el bucle, es decir, cuando llega al 101 el contador, voy a ponerle un... un comentario para el programador. Aquí llegamos si se acaba el bucle. Aquí llegamos cuando se acabe el bucle. Cuando se acabe el bucle, ¿qué le decimos? Un print. Vamos a decirle que imprima fin del bucle. F5. Ahí está. ¿Veis abajo? Fin del bucle. Me preguntan si se puede sacar en horizontal el resultado. Sí. A ver si me acuerdo. No me acuerdo, a ver. Tengo que mirarlo. Creo que hay una... Lo dimos además al principio del curso cuando dimos los tipos de datos. Ahora os lo digo. Y si no, ya lo miro después detenidamente y os lo digo, pero sí que hay una forma. Era cuando dimos los tipos de datos. A ver. Variables. Vamos a ver. Tipo de dato, tipo de dato, string. Aquí era. Vamos a ver dónde era. Creo que era con... Creo que era con barra T. Vamos a ver. Tabulación. A ver, ¿cómo era con barra T? Bueno, os lo miro el próximo día. No me acuerdo ahora cómo era. Creo que era con barra T. A ver. Bueno, lo miramos el próximo día. Más cosas. Había otro ejercicio que os quería enseñar con Guay y con Else. Bueno, podemos aprovechar este porque prácticamente es lo mismo. Mirad. Vamos a decirle. El mismo ejercicio, ¿eh? Vamos a decirle... Vamos a mostrar los 100 primeros números naturales y terminamos con mensaje. De... Con mensaje de el número final. El número en el que se salió. Vale. Fin del bucle. Y vamos a decirle terminado porque contador llegó a... Y aquí le decimos contador. Vale. A ver si lo entendéis. El Guay y el Else. Y el Else. Entonces, hace el bucle mientras valga 101. Mientras llegue, sea menor de 101. Cuando sea igual o mayor de 101 haces el Else. ¿Y el Else qué dice? Se acabó el bucle porque el contador llegó a... Y vamos a mostrar un mensaje. Es decir, el Guay y el Else lo que hace hace una serie de... de instrucciones dentro del bucle y cuando se acabe el bucle que es el Else hace otra serie de instrucciones. Entonces, vamos a ver. F5. Aquí pasó algo. ¿Alguien sabe el error? A ver si alguien se da cuenta del error. He ejecutado este programa que antes funcionó perfectamente y al ponerle esta línea el Else fijaos lo que me da. Aquí en rojo me ha generado un error. En esta línea me dice. En la línea 12. Cuando hay errores te dice en qué línea está el error. En este caso, la línea 12. Vamos a ver cuál es la línea 12. 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12. En esta línea hay un error. Vale, ¿os dais cuenta del error? ¿Por qué ha fallado? Muy bien. Porque contador... ¿Cómo definí contador aquí? Minúsculas. Con lo cual, a partir de aquí cada vez que me haga referencia al contador, siempre, siempre, siempre tengo que ponerlo en minúsculas. Aquí está en minúsculas. Aquí bien, aquí bien, aquí bien. Aquí mal. Para él son dos variables completamente diferentes. La variable contador en minúsculas y la variable contador en... Son diferentes, ¿vale? Con lo cual, aquí tendría que haber puesto contador en minúsculas. Vale, vamos a ejecutarlo. Muy bien. Y fijaros lo que dice al final. El Else. Esto es el Else. Fin del bucle. Terminado porque el contador llegó a 101. Bueno. Muy bien. Ya vais viendo un poco los bucles, ¿no? La diferencia entre el Else, el whileElse y el for del otro día. Vale. Vamos a ver más cosas. Creo que me queda solo un ejercicio con... con whileElse y acabamos. Y nos metemos en más cosas. Creo que es la tabla de multiplicar con while. Sí. Vamos a hacer la tabla de multiplicar con while. Para multiplicar del 3 os escondo esto para que no lo veáis. Vamos a ir poco a poco. Pongo un título para el programador que diga muestra la tabla de multiplicar del 3. Inicializo la variable número a 0 y hago dos print por cuestiones simplemente de estética que quede más o menos bonito que diga tabla del 3. Me hago un bucle. El bucle se ejecutará ¿cuántas veces? Hasta que el número llegue a 10. Es decir, se hará con el 0, con el 1, con el 2, con el 3, con el 4, con el 5, con el 6, hasta el 10 incluido. Porque es menor o igual el 10 también hace el bucle. Cuando la variable número llegue al 10 también se hará el bucle y acabará cuando el número valga 11 porque... en este bucle dirá ¿11 es igual que 10? No. Como no se cumple, se sale del bucle y sigue las líneas de abajo. ¿Qué hacemos en el bucle? Pues fijaros una variable que se llama resultado donde yo voy multiplicando el contador que vaya en ese momento la primera vez el contador vale 0 multiplicado por 3 Acordaos que intento hacer la tabla del 3. Entonces será 3 por 0, 0 Después, ¿número cuánto valdrá? 1 3 por 1 Después número, valdrá 2 3 por 2 y así. Entonces, fijaros aquí hago la multiplicación multiplico el valor de número el valor de la variable número el que tenga, que es un contador lo multiplico por 3 y lo meto en resultado y luego en pantalla muestro fijaros este print lo que hace un literal ¿Qué diferencia entre mostrar un literal como puede ser este número 3 como puede ser este igual o mostrar una variable? Que una variable, por ejemplo en este caso la variable número va cambiando de valor ¿Por qué? Porque se va contando de uno en uno fijaros aquí el contador Número es igual a número más 1 ¿Veis la otra forma de contar variables? de usar contadores Vamos a cambiarlo y vamos a utilizar el método clásico Número es igual a número más 1 Es lo mismo, me valen las dos Entonces lo voy incrementando y vuelve el bucle hacia arriba Ahora en la segunda vez número vale 1 Pregunta, ¿número es menor o igual que 10? Sí Se hace lo que hay dentro del bucle Se vuelve a contar el número Ahora, ¿número vale 2? Número que es 2 ¿2 es menor o igual que 10? Sí. Entonces se va multiplicando Fijaros, 2 por 3 Se mete el resultado Muestro un 3 Muestro el símbolo de multiplicar Que lo puedo hacer así Porque estamos acostumbrados a que la tabla de multiplicar la veamos con X Muestro el valor de número Que primero será 1, luego 2, luego 3 tal, tal En ese momento Resultado en ese momento Si número vale 2 Resultado será 6 Si número vale 7 Resultado será 21 Y así, ¿no? Alguien que me diga ¿Por qué no se va acumulando el valor de resultado? Porque la primera vez es Vale 1 número 3 por 1 3. Resultado tiene 3 Pero después número vale 2 3 por 2 es 6 ¿Por qué no se suma el 3 de 3 por 1 con el 6 de 3 por 2? La segunda vez el resultado sería 9 ¿No? Alguien que piense un poco ¿Y por qué no es así? Mientras pensáis, ya acabamos el programa Que es sencillísimo Bueno, no tiene nada, ya es que el programa está hecho La tabla de multiplicar se va mostrando en esta línea Este print En este print se va mostrando 3 por 1 3 Después, 3 por 2 6 y así Entonces F5 Aceptar Y aquí está la tabla del 3 Aquí la tenéis ¿Veis que yo puse una X? Más que nada porque en el colegio Enseñan así creo No creo que enseñen con asteriscos 3 por 0 es 0 3 por 1 es 3 3 por 2 es 6. Bien, está bien La pregunta que hice antes ¿Por qué el resultado no se van acumulando los valores? Es bien sencillo Porque cada vez que tú haces Número por 3 y lo asignas Machacas el valor anterior Aquí estás machacando Lo que pudiera tener resultado Imagínate que el resultado antes tenía un 3 Del 3 por 1 Aquí estás machacando El valor Con el siguiente que es 3 por 2, 6 Bueno Pues seguimos. Vale, vamos a ver más Cositas Vamos a ver el tema 10 Que creo que ya lo tenéis todos Cuando empieza el bucle resulta que se le asigna El valor número por 3 Vale Funciones A ver, una función Es como un subprograma Como un programa dentro de otros Vale Veo que exactamente lo habéis entendido Porque cada vez se machaca El valor del resultado Una función es un programa dentro de otro Pues nosotros tenéis el curso del programa Y ahora siempre que hemos hecho El código Siempre que hemos hecho un programa Ha sido totalmente lineal De arriba a abajo Va el programa, empieza por la primera línea Se va ejecutando hacia abajo Hasta que se acabe ¿Qué pasa? Que tú ahora puedes tener un programa Y a mitad del programa llamas a un subprograma Que está en otro sitio Y eso se llama Una función, ir a una función Ese otro subprograma lo tienes que definir Con la instrucción Con la declaración de Y se utiliza para cosas Que se hacen muchísimas veces Pues imagínate Que Tú tienes que calcular La letra del DNI Metes la letra del DNI Y tienes que calcular la letra del DNI Entonces tú ejecutas el programa Y cuando sea el momento Tú llamas a ese subprograma Para que averigüe la letra del DNI Y vuelve A lo mejor resulta que en otra parte del programa Hay que volver a hacer lo mismo Hay que volver a calcular La letra del DNI Entonces vuelves a llamar al subprograma Si no hubiera subprogramas En este ejemplo que os explico Habríais que Definido Habríais que Tendríais que haber escrito Las líneas de programación que calcula El DNI cuando lo necesitabais Seguía el programa hacia abajo Y si necesitabais otra vez Calcular la letra del DNI Tendríais que haber escrito otra vez Las instrucciones o las Las líneas de código de programación De otra vez calcular el DNI Y si más abajo en el programa Lo necesitase otra vez Porque lo necesitase para otra cosa Lo tendríais que volver escrito otra vez Con lo cual habríais escrito lo mismo tres veces ¿Para qué vais a hacer eso? ¿Qué es lo que se hace? Podéis dejar aparte El cálculo de la letra del DNI Y le podéis llamar tantas veces como queráis En diferentes puntos del programa Es como si fuera un subprograma Dentro de otro A ver qué dice aquí En programación una función es un conjunto Aislado de instrucciones O bloque de código con un nombre asociado Este bloque puede ser llamado Cuando se necesite Puedes utilizar argumentos Es decir, tú le puedes pasar Datos variables Argumentos que llaman Que luego te los devuelve No es obligatorio poner argumentos Ya lo veremos después Las funciones pueden ser reutilizadas ¿Qué quiere decir? Que las puedes llamar un millón de veces Vamos a ver Otra definición más sencilla De función Es un conjunto de instrucciones Que resuelven un problema específico Pero dentro del programa principal Dentro del programa principal Es un conjunto de instrucciones Que resuelven un problema pequeño Y le puedes llamar tantas veces como El ejemplo de antes Calcular la letra del DNI O calcular el IVA de una factura O calcular el IVA de O sea, el porcentaje Son pequeños subprogramas ¿Cómo se define una función en Python? Con def Y luego con paréntesis y dos puntos Y luego a veces se usa el comando Que es ¿Qué quiere decir? Es el valor que devolverá La función Por ejemplo, si tú tienes Una función para calcular El IVA de una factura O de un artículo Al final Es el que realmente Cuando tú mandas a la función Vete a la función De calcular el IVA de un artículo Se ejecutan las líneas Que tiene que ejecutar en esa función Y cuando la función termine Porque tiene que terminar Como todo programa Hace las líneas que tenga que hacer Y cuando vuelva A donde tú le mandaste ir a la función El return te da el valor Que tú le pedías O el cálculo de la letra del DNI O el IVA de un artículo Lo que sea Vamos a ver un ejemplo Y lo vais a entender a la primera Mirad Este programa es una función Que Calcula El cuadrado de Un número Entonces, mirad La función Se define con def Y en este caso la función se llama Cuadrado Todas las líneas Que hay abajo de la función Es lo que hace esa función En este caso la función cuadrado solo hace una cosa Una, que es Multiplicar El número por sí mismo X por X Solo hace eso Podría hacer print, podría hacer un input Todo lo que ya conocéis En este caso solo hace eso Y esta función cuadrado la podéis llamar Mil veces En este caso solo la voy a llamar una vez Pero la puedo llamar Imagínate que ahora la llamo La voy a llamar con este print Este print Básicamente traducido al castellano Diría Llama a la función cuadrado Lo que haga la función cuadrado Y metele El valor 4 Le lanzas El valor 4 Entonces, cuadrado toma el valor 4 En este caso es la X Y aquí multiplica El 4 por 4 Y hemos dicho que el return es el que te devuelve el valor Entonces, el 4 por 4 Return te devuelve 16 Básicamente es eso Imaginaros que luego el programa sigue con un input De lo que sea Y más línea de código Y este programa es muy grande Dentro de 200 líneas de código Vuelves a necesitar Calcular El cuadrado de un número Entonces vuelves a hacer lo mismo Vuelves a decir Muéstrame El cuadrado pero ahora del número 16 Entonces ¿Qué hace? Este print llama a la función O al subprograma Cuadrado para que vuelva a calcular Y luego vuelves a escribir otras 200 líneas de código De tu programa Y lo vuelves a llamar Si no hubiera estos subprogramas Cada vez que tú llamas Cada vez que tú quisieras hacer el cuadrado De ese número Tendrías que definir La fórmula del cuadrado Tanto aquí como aquí Y si lo haces 500 veces Te tienes que poner la fórmula Del cuadrado Con lo cual esto de llamar las funciones Nos ahorra mucho trabajo Porque solo la defines una vez Y cada vez que la necesites la llamas Llamas a la función y sigues escribiendo tu programa Ah necesito hacer el cuadrado de un número Llamo a la función Y así no tengo que volver Claro esta función es pequeñísima Solo tiene una línea de código Pero imaginaros funciones Que tuvieran 200 líneas de código Son 200 líneas de escribir instrucciones En Python que te ahorras Si tú vas a utilizar la fórmula O la función solo una vez No necesitas hacerla Las metes directamente como hemos hecho hasta ahora En todos nuestros programas Hemos hecho multiplicaciones, divisiones Hemos hecho un montón de tipos de programas Pero como solo hemos utilizado una vez La hemos escrito Pero si nuestro programa la utilizas mil veces O muchas veces Ahí es cuando te empiezas a ahorrar trabajo Porque solo es llamar a la función Vamos a Mira nuestro programa va a llamar a la función dos veces Primero la va a llamar Con el valor 4 Y luego la va a llamar con el valor 16 Aquí está El resultado es 16 y 256 4 por 4 16 16 por 16 256 La ha llamado dos veces Si quito esto solo la llamaría una vez Y sería 16 Vale esta es la función Más elemental que existe Y muy importante Esto es como el while Y el for Todo lo que estaba debajo del while o del for Que estuviera tabulado Pertenecía al bucle Son las instrucciones que se hacían dentro del Aquí lo mismo Todo lo que está debajo del def Es lo que hace esa función Y tiene que estar tabulado o indentado Si no os da error Os da mil problemas Es que en programación python la indentación La tabulación Es fundamental En otros lenguajes de programación No hacía falta hacer eso Simplemente con iniciar el def Y finalizar el def Se sabía con iniciar el for Y acabar el for se sabía Con iniciar el while y acabar el Pero aquí no existe eso Cosa que si echo de menos A mi me gustaría que python tuviera esto Que fuera def Y fin del def Y ahí no habría ningún problema ya Si no estuviera indentado Todo lo que está dentro del def Y fin del def es lo que hace la definición Todo lo que está dentro del for Y el fin del for Es lo que haría el bucle Pero este lenguaje de programación no es así Entonces hay que aguantarse Hay que aprovechar las tabulaciones Y los indentados F5 y ahí está 16 Vamos a hacer otro Había otro por aquí Que es una multiplicación Y así vemos que no siempre se pasan Los valores No siempre se pasan los mismos valores En python Fijaros Cuantos valores pasamos antes con El 4x4 que hicimos Solo pasamos un valor Aquí vamos a pasar dos valores Esta función que hace Esta función Multiplica Dos números Multiplica dos números Fijaros Esta función la llama multiplica Y tiene Dos valores X e y Antes solo tenía una Cuando lleno de valores Cuando lleno los valores x e y Cuando llamo a la función De momento la estoy definiendo Cuantas líneas de código o de programación Tiene esta Esta función Solo una multiplicación Que hace una multiplicación de X y de y Entonces fijaros Llamo a la función con print Y digo Llama a la función multiplica Y le mandas los valores 4 y 3 4 para x y 3 para y Pues vale va para arriba A la función Multiplica 4 por 3 Y nos devuelve el 12 Que sale en este print A ver 3 5 Lo veis aquí abajo Diferencia entre antes y ahora básicamente Es que antes aquí solo había 1 Un valor y aquí había Dos valores Vale es lo que llamaban antes Vale Vale es lo que antes llamaba Argumento Todo lo que hay dentro de esto Esto antes pasamos un argumento Y ahora le pasamos dos argumentos X e y Vamos a ver Que más nos queda, nos queda uno facilito Que es Mandar un saludo Esto lo tenéis vosotros eh Os lo voy a explicar Bueno esta función Lo que hace es simplemente mandar un saludo Por pantalla Cada vez que llamo a la función Mirad aquí hay una cosa nueva Defino la función que se llama saludo Vamos a ponerla al mismo nivel Lo de las Intentaciones y tablaciones es fundamental En Python Defino la función saludo Y solo va a tener una línea de código Que es un print Por pantalla y se acabó Retur es para un poco Como si dijéramos para que devuelva Para que termine la definición Es como el fin de la definición también De la función Y aquí llamo al saludo Para llamar a la función simplemente Hacéis esto F5 Ahí está Hola amiga Imaginaos Que el programa es muy largo Y vuelvo a escribir Otros input y operaciones matemáticas No sé qué Y después de 100 líneas de programación Necesito otra vez lanzar un saludo Pues lo vuelvo a decir Saludo En minúsculas Y otra vez vuelve ¿Has ahorrado? Pues este print En este caso mi programa lo hace dos veces ¿Lo veis? ¿Por qué aquí no hace falta Al final al llamar a la función ¿Por qué no hace falta poner el print? Si antes si utilizamos el print Para Sumar Para ver la suma El cuadrado del número Y la multiplicación de los números Pues porque antes Dentro de la función No estaba el print Sino que estaba fuera Y aquí es al revés Aquí ahora sólo llamo a la función Porque el print ya lo tiene la función dentro Bueno Seguimos viendo Más cosillas Más ejercicios de funciones Que hay alguno más Que os mandaré el próximo día Ah sí este es muy interesante Este es para calcular el IVA De un artículo Yo estoy haciendo un programa Que está continuamente No, que en ciertos puntos del programa Necesita calcular El IVA de los artículos Imaginaros que En diez puntos diferentes del programa Si no existieran funciones Tendríais Que escribir la fórmula De calcular el IVA diez veces En esas diez veces que necesitáis Que el programa Haga el cálculo del IVA ¿Entendéis la ventaja de las funciones? Ahogarme en muchas líneas de programación Llamo a la función Y no necesito escribir todo lo que tiene la función De cálculo del IVA De fórmulas matemáticas y de tal Lo vais a ver ahora en este ejercicio Mirad Cálculo del IVA De De un artículo Pero aquí hay algo que no me convence Es la llamada de la función Mirad Os lo voy a dejar muy claro Con comentarios propios Inicio de la función Aquí empieza la función Y aquí acaba la función O el subprograma Lo llamáis como queráis Hombre, se llaman funciones Pero si alguien no quiere llamar subprograma Fin de la Función Vale, fijaros ¿Qué es lo que hace La función? ¿Qué es lo que hace La función? No, el returno siempre tiene Es voluntario Si lo pones no pasa nada Porque a mí me gusta ponerlo Porque es una forma de decir Aquí acabó la función Pero si Tú no vas a conseguir datos No vas a traerte datos de la función Por ejemplo algún cálculo tal Pues no hace falta Si tú le vas a pasar valores Simplemente vas a recuperar valores No hace falta Esta función Esta función se llama calcular IVA La podéis llamar como queráis Es obligatorio Poner los paréntesis y los dos puntos Dentro de los paréntesis podéis poner Los valores que necesitéis pasar con retur Si no, no hace falta Entonces, esta función ¿Qué es lo que hace? Una fórmula matemática Perdón, una variable que se llama precio Y que me pide por teclado El precio del artículo Hace un cálculo matemático Que es El 21% del IVA Y lo mete, el cálculo matemático es Por ejemplo metes un producto que vale 100 euros Haces la operación matemática De 100 multiplicado por 0.21 Que es el 21% de IVA Y el resultado lo metes en IVA Muestras por pantalla El valor del IVA Y calculas la base imponible Que era el precio que valía Más el IVA Y eso te da el total del producto Es decir, base imponible más IVA Total del producto Eso es lo que hace esta función La puedo llamar cuantas veces quiera Y aquí al final le digo El precio total con IVA incluido es de tanto Vamos a probarlo Voy a limpiar un poco aquí la pantalla A ver, el precio del artículo Vamos a poner un artículo de 100 euros Pues ya está Llamé a la función Calcular IVA Y dice El IVA es 21 euros Y el precio del artículo Con IVA incluido Es de 121 euros La base imponible Vale En realidad hace esto Para que no dé lugar a errores Habría que hacerlo así ¿Qué queda el precio del artículo sin IVA? Pues Vamos a decirle 258 euros Pues el IVA de 258 euros Es 54,18 Y la suma De la base imponible más El precio del artículo Más el IVA es de 312,18 Vale Esto es lo que hace El programita este Que os lo voy a mandar el próximo día Porque habéis recibido Todos los ejercicios que hemos hecho En el curso Ya Y iréis recibiendo semanalmente Los ejercicios que hayamos hecho En la clase anterior Es decir el próximo día El próximo jueves Recibiréis los ejercicios que hemos hecho hoy Entre ellos este del cálculo del IVA Bueno y me parece que vamos a dar Un ejercicio más No No vamos a hacer más Porque esto ya son Ejercicios con caracteres Bueno pues quedamos aquí Y os adelanto el próximo día Que vamos a comenzar El próximo día Vamos a comenzar Con el tema 11 Que son Las cadenas de caracteres Qué hacer con las cadenas de caracteres Este es de los más fáciles Si es fácil Es coger caracteres Y los podéis trocear Imaginaos que tienes una variable Con el nombre de una persona Con nombre y apellidos lo podéis trocear Lo podéis saber su longitud Lo podéis sumar El nombre y apellidos Con un DNI por ejemplo Podéis hacer varias cosas con ellos El tema 11 es eso Todo lo que se puede hacer Con las cadenas de caracteres Pues nada Nos vemos el jueves Y Espero que os haya gustado La clase de hoy Que ha sido facilita Las funciones es una cosa muy fácil Entonces nos quedan Poquitas clases ya No me acuerdo cuantas A ver cuantas Hoy es día 4 Nos quedan 3 Nos quedan 3 clases Para terminar y nos dará tiempo a ver A ver todo Nada pues el jueves más Gracias por escucharme Y por estar ahí Y bueno no faltéis el próximo jueves Que ya para 3 clases que quedan Hay que aprovechar el curso Y cuidaros venga Hasta la próxima chao