1 00:00:00,000 --> 00:00:23,019 Buenos días a todos. Vamos a empezar, esta sería la videoconferencia que corresponde al día 14 del 10, que la voy a grabar con un audio mejor y vamos a ver dos partes dentro de la videoconferencia. 2 00:00:23,019 --> 00:00:40,799 Una sería la parte teórica. Voy a repasar, voy a llegar por lo menos hasta variables, errores comunes, hasta los errores comunes de las variables. 3 00:00:41,399 --> 00:00:43,960 Y empezaríamos tipos de datos, pero me quedaría ahí. 4 00:00:43,960 --> 00:00:54,159 Y posteriormente, a través de Visual Studio Code, vamos a ver un programa sencillo para que veáis cómo hacer un proyecto, cómo generar el primer fichero y cómo hacer un programa y ejecutarlo. 5 00:00:55,539 --> 00:01:08,480 Con respecto a la teoría, voy a empezar otra vez desde el principio. Aquí nos hablan en la unidad 1 de la identificación de los elementos de un programa informático. 6 00:01:08,480 --> 00:01:25,480 Bien, no lo pone aquí, pero un programa informático se va a utilizar con un objetivo, que es la de codificar un algoritmo o codificar una solución a un algoritmo. 7 00:01:25,480 --> 00:01:27,799 algoritmo. 8 00:01:27,799 --> 00:01:31,180 Ese programa informático tiene un lenguaje en el que estará 9 00:01:31,180 --> 00:01:33,099 formado por una serie de elementos. 10 00:01:33,099 --> 00:01:35,680 En el caso de Python vamos a tener instrucciones simples, 11 00:01:35,680 --> 00:01:38,719 compuestas, identificadores constantes, tipos primitivos, 12 00:01:38,719 --> 00:01:40,260 funciones, bueno, etcétera. 13 00:01:40,260 --> 00:01:42,719 Lo veremos a lo largo del curso. 14 00:01:42,719 --> 00:01:44,159 ¿Qué preguntas se hacen aquí? 15 00:01:44,159 --> 00:01:46,620 ¿Por qué crees que es importante seguir una estructura clara y 16 00:01:46,620 --> 00:01:48,200 ordenada al escribir un programa? 17 00:01:48,200 --> 00:01:53,959 Pues de sentido común, pues porque si luego dejas ese 18 00:01:53,959 --> 00:01:59,140 programa a otra persona, ese programa tiene que ser lo más legible, lo más posible para el que lo 19 00:01:59,140 --> 00:02:04,739 pueda leer. Incluso para ti, si lo dejas un tiempo y luego tienes que retomarlo, pues si no lo has 20 00:02:04,739 --> 00:02:09,599 realizado de una estructura clara y ordenada y bien comentado, pues difícil que luego puedas 21 00:02:09,599 --> 00:02:14,319 entenderlo. ¿Qué diferencia hay entre almacenar un valor en una variable o simplemente escribir 22 00:02:14,319 --> 00:02:18,280 ese valor directamente en el código? Bueno, lo veremos todo esto. ¿Cómo influye el tipo de 23 00:02:18,280 --> 00:02:24,120 dato, en qué situaciones crees que sería útil convertir un dato a otro tipo y por qué crees que 24 00:02:24,120 --> 00:02:28,759 los comentarios son importantes. Bueno, ya lo he dicho anteriormente, entonces básicamente un 25 00:02:28,759 --> 00:02:37,659 programa informático tiene que ser una estructura clara y ordenada y finita, tiene que tener 26 00:02:37,659 --> 00:02:44,219 comentarios, que esté comentado para que podamos saber qué se está realizando en cada paso de ese 27 00:02:44,219 --> 00:03:10,120 En cuanto a diferenciar entre un valor de una variable y simplemente escribir ese valor directamente en el código, se trata de poder tener un contenedor momentáneo donde podamos almacenar datos y en ese contenedor sea variable, podamos cambiar dichos datos en ejecución o cuando deseemos. 28 00:03:10,120 --> 00:03:20,840 En cambio, si pones un valor directamente, no vamos a poder cambiar ese valor, siempre va a ser el mismo. No tenemos ese instrumento que podría ser útil como es el de una variable. 29 00:03:21,319 --> 00:03:29,139 ¿Cómo influye el tipo de dato? Dependerá del tipo de dato, podemos hacer unas operaciones u otras. ¿Y en qué situaciones crees que sería útil convertir un dato a otro tipo de dato? 30 00:03:29,139 --> 00:03:35,159 si recibimos un tipo texto y queremos hacer una operación matemática con ese tipo de texto porque es un número, 31 00:03:35,400 --> 00:03:41,860 pues ahí tendríamos una justificación para transformarlo en un tipo de dato distinto que sería de texto. 32 00:03:42,639 --> 00:03:45,180 ¿Qué son las estructuras y bloques fundamentales en Python? 33 00:03:45,539 --> 00:03:52,180 Normalmente en todos los lenguajes de programación, todas las estructuras, los bloques o los subbloques 34 00:03:52,180 --> 00:03:56,099 se delimitan pues con alguna 35 00:03:56,099 --> 00:04:00,819 palabra o con algún símbolo 36 00:04:00,819 --> 00:04:04,939 en caso de Python no lo hace así, si ponemos un ejemplo 37 00:04:04,939 --> 00:04:08,919 pues como puede ser Java para delimitar 38 00:04:08,919 --> 00:04:13,060 una clase o delimitar un método se utilizan llaves de apertura 39 00:04:13,060 --> 00:04:16,339 y cierre, aquí no se va a utilizar y lo que va a utilizar es la indentación 40 00:04:16,339 --> 00:04:21,019 la tabulación de una línea con respecto a otra, el hecho de que una línea 41 00:04:21,019 --> 00:04:25,879 esté tabulada con respecto a la superior, quiere decir que esa línea está 42 00:04:25,879 --> 00:04:31,279 contenida dentro de ese bloque. Lo veremos más adelante. Por eso la 43 00:04:31,279 --> 00:04:37,500 importancia de la indentación en Python. Nos habla aquí que para crear un 44 00:04:37,500 --> 00:04:41,579 programa necesita de bloques bien estructurados, lógicamente, y se van a 45 00:04:41,579 --> 00:04:46,040 estructurar o se van a ordenar en función de esa indentación. 46 00:04:46,040 --> 00:04:51,920 Estructura y organización de Python, clave en las primeras fases del aprendizaje 47 00:04:51,920 --> 00:04:58,800 Nos dice cosas de sentido común, que hay que ser organizado, que tienes que tener una coherencia lógica 48 00:04:58,800 --> 00:05:04,139 Y una legibilidad en cuanto a la realización del programa 49 00:05:04,139 --> 00:05:10,040 Esto nos habla aquí de la importancia de enseñar la estructura y la organización de un programa 50 00:05:10,040 --> 00:05:31,819 Estos serían los aspectos clave para lograr esa estructura clara en Python. Una sería la claridad del código, mostrar cómo dividir los programas, las secciones con comentarios, funciones, bloques. Esto sería más relacionado con la organización. 51 00:05:31,819 --> 00:05:43,300 La comprensión progresiva, pues iniciar con ejemplos más sencillos y luego ir paulatinamente aumentando en dificultad. 52 00:05:43,300 --> 00:05:50,339 Buenas prácticas, buenas prácticas, a qué le llamo aquí, pues, intentación, eso es muy importante 53 00:05:50,339 --> 00:05:57,319 Que las constantes aparezcan en mayúsculas, nombres significativos a las variables, ya lo veremos 54 00:05:57,319 --> 00:06:07,560 El tener malos hábitos, pues, luego nos va a llevar a qué, pues, a que no tengamos una legibilidad o claridad en nuestro código 55 00:06:08,259 --> 00:06:16,420 Facilidad de depuración, organizar claramente, si tú lo organizas todo de manera clara, 56 00:06:16,420 --> 00:06:18,339 puedes detectar mejor los errores. 57 00:06:19,439 --> 00:06:25,579 En un programa ordenado, bien comentado, podemos luego hacer una depuración del mismo 58 00:06:25,579 --> 00:06:32,420 y poder encontrar un posible error con mayor probabilidad que si lo tenemos todo desordenado y destructurado, 59 00:06:33,379 --> 00:06:36,040 aunque ese programa funcione igual. 60 00:06:37,040 --> 00:06:51,300 Escalabilidad del aprendizaje, pues que vamos a ir poco a poco, viendo primero, pues, iremos trabajando con funciones, clases, librerías, haremos problemas más pequeños, luego más complejos, etc. Paso a paso. 61 00:06:52,060 --> 00:06:59,660 La transferencia de conocimientos, que es lo que aprendamos aquí en Python, ayudará a otros lenguajes y la motivación y confianza. 62 00:06:59,660 --> 00:07:09,240 Aquí tenemos un ejemplo resuelto de Python. Veis cómo introduce los comentarios en Python. 63 00:07:09,240 --> 00:07:18,540 En Python se pone el símbolo que aparece aquí y a continuación se pone todo lo que aparezca a continuación es un comentario 64 00:07:18,540 --> 00:07:25,579 y por lo tanto el compilador no va a ejecutar esta línea. Se la saltará porque sabe que es un comentario. 65 00:07:25,579 --> 00:07:50,459 Hay otro comentario, es importante comentar bien los programas. Aquí lo que tenemos más adelante es la definición de una función. Esto sería la función. A ver, aquí este RETRUN debería estar indentado como buenas prácticas de programación. No aparece aquí en el ejercicio, pero debería estar indentado para identificar que este RETRUN pertenece a esta función. 66 00:07:50,459 --> 00:07:54,000 la función se llama calcular 67 00:07:54,000 --> 00:07:56,639 la función se define poniendo un def delante 68 00:07:56,639 --> 00:07:59,199 de definition y luego tenemos el nombre de la función 69 00:07:59,199 --> 00:08:02,759 y entre paréntesis el número de parámetros que tiene, aquí tiene dos parámetros 70 00:08:02,759 --> 00:08:05,939 coge esos dos parámetros, los suma 71 00:08:05,939 --> 00:08:08,480 los divide entre dos, o sea calcula su media y con el return 72 00:08:08,480 --> 00:08:11,759 devuelve ese valor, o sea que fijaos no hace falta 73 00:08:11,759 --> 00:08:15,060 poner el tipo de dato a devolver 74 00:08:15,060 --> 00:08:17,800 va a retornar este 75 00:08:17,800 --> 00:08:47,539 Y eso es lo que recibirá cuando se llame a esta función. Esto es la definición de la función, no la llamada a la función. El programa principal después viene aquí y lo único que hace es, si nos abstraemos y solo cogemos esto de aquí, esto es una función que se llama un input en el que permite al mismo tiempo ese contenido entre comillas dobles que aparezca en pantalla y a continuación un cursor que parpadeará y que nos va a indicar el input. 76 00:08:47,539 --> 00:08:50,080 que es el input para que podamos escribir algo por pantalla. 77 00:08:50,700 --> 00:09:00,840 El hecho de cubrirlo entre paréntesis de apertura y cierre y poner aquí un float es para convertir lo que vaya a recibir a un dato float. 78 00:09:01,200 --> 00:09:12,059 Veremos en tipo de datos que los datos pueden ser enteros, pueden ser coma flotantes, que serían decimales, como float. 79 00:09:12,360 --> 00:09:17,100 Bueno, veremos los tipos de datos. Pueden ser cadenas. Float es un tipo de dato decimal. 80 00:09:17,100 --> 00:09:22,220 Entonces, él lo convierte a un decimal porque espera recibir un decimal a través del teclado. 81 00:09:22,720 --> 00:09:27,460 Y una vez que ha recibido ese decimal, que hemos introducido por teclado, lo introduce dentro de nota 1. 82 00:09:28,259 --> 00:09:29,980 La misma operación para nota 2. 83 00:09:31,019 --> 00:09:35,139 Y después, aquí, esto es una expresión en la que crea otra nueva variable que se llama promedio. 84 00:09:35,659 --> 00:09:40,740 Y en esa variable, ¿qué va a alojar? Va a alojar el resultado de la llamada a esta función. 85 00:09:41,340 --> 00:09:47,360 ¿Veis? Llama a la función calcular promedio, que es esta que hay aquí, y le pasa las dos notas que hemos recibido por teclado. 86 00:09:48,159 --> 00:09:56,059 Al llamar a esa función, es una función con un valor de retorno, que sería nota1 más nota2 partido de 2. 87 00:09:56,059 --> 00:10:05,820 Nos va a devolver la media y esta media que aparecerá aquí, que sustituirá a esta llamada a la función, se acumula o se guarda en la variable promedio. 88 00:10:05,820 --> 00:10:19,779 A continuación, con una estructura de control condicional, establece si el valor de esa media por promedio es mayor o igual que 5, imprime el estudiante, aprueba con promedio y aquí pone la variable, el promedio que sea. 89 00:10:20,500 --> 00:10:25,639 Si no, imprime el estudiante, reprueba con promedio y el valor del promedio. 90 00:10:25,639 --> 00:10:28,399 ahora en principio 91 00:10:28,399 --> 00:10:29,820 pues nos va a sonar un poquito a chino 92 00:10:29,820 --> 00:10:31,740 pero esto sería 93 00:10:31,740 --> 00:10:33,480 un programa básico 94 00:10:33,480 --> 00:10:35,139 luego lo hacemos en Visual Studio Code 95 00:10:35,139 --> 00:10:36,620 hacemos uno parecido 96 00:10:36,620 --> 00:10:39,820 y aquí nos está preguntando 97 00:10:40,500 --> 00:10:41,879 ¿qué aspectos de la estructura y la organización 98 00:10:41,879 --> 00:10:43,740 del programa permiten que este ejercicio sea claro 99 00:10:43,740 --> 00:10:46,059 coherente y fácil de ampliar en fases posteriores? 100 00:10:46,759 --> 00:10:47,980 pues lógicamente 101 00:10:47,980 --> 00:10:49,299 una serían los comentarios 102 00:10:49,299 --> 00:10:50,960 una mayor organización 103 00:10:50,960 --> 00:10:53,740 las variables que le ponen nombres 104 00:10:53,740 --> 00:11:00,100 significativos la definición de la función que se separa lo que genera modularidad la 105 00:11:00,100 --> 00:11:03,940 estructura condicional que está claramente diferenciada y bueno pues que el código es 106 00:11:03,940 --> 00:11:11,139 bastante elegible y ordenado en cuanto a los elementos estructurales esenciales en un programa 107 00:11:11,139 --> 00:11:16,179 en python vamos a tener estudios de control con condicionales bucles vamos a tener funciones que 108 00:11:16,179 --> 00:11:22,440 lo hemos visto ahora, vamos a tener comentarios y en cuanto a los datos 109 00:11:22,440 --> 00:11:25,419 tenemos aquí, vamos a tener dos tipos de datos, tanto los datos estáticos 110 00:11:25,419 --> 00:11:30,259 como los dinámicos. Los estáticos serían los típicos de cualquier lenguaje 111 00:11:30,259 --> 00:11:33,360 de programación, salvo los conjuntos, que esto no aparece en otro lenguaje 112 00:11:33,360 --> 00:11:36,559 de programación, pero los arraes, las cadenas, los registros, los archivos 113 00:11:36,559 --> 00:11:41,299 sí aparecen y luego los dinámicos que serían aquellos que se pueden 114 00:11:41,299 --> 00:11:45,059 modificar en ejecución, que serían las lineales, no lineales. Lineales serían 115 00:11:45,059 --> 00:11:49,220 las listas, las colas y las pilas, y los no lineales, que serán los árboles y los grafos. 116 00:11:49,320 --> 00:11:49,860 Lo veremos. 117 00:11:50,919 --> 00:11:52,500 ¿Cuáles son los elementos estructurales de Python? 118 00:11:52,860 --> 00:11:54,139 Pues las declaraciones. 119 00:11:55,019 --> 00:11:58,659 Una declaración sería la declaración, por ejemplo, de una variable. 120 00:11:58,860 --> 00:12:05,200 Primero, decir que una variable es un contenedor o un cajón, o como lo queramos llamar. 121 00:12:05,279 --> 00:12:06,500 Ese contenedor tiene un nombre. 122 00:12:07,179 --> 00:12:09,120 Dentro de ese contenedor vamos a guardar algo. 123 00:12:09,220 --> 00:12:09,899 ¿Y qué vamos a guardar? 124 00:12:09,899 --> 00:12:15,480 un tipo de un dato que puede ser pues un cadena de texto puede ser un entero 125 00:12:15,480 --> 00:12:20,799 puede ser un decimal eso es lo que es una variable variable en sí indica ya 126 00:12:20,799 --> 00:12:26,419 que puede variar a lo largo del programa y vemos aquí que una declaración de una 127 00:12:26,419 --> 00:12:30,059 variable pues sería el primero el nombre de la variable luego un igual y luego el 128 00:12:30,059 --> 00:12:35,940 valor que va a tener en la asignación del tipo de dato a la variable lo hace 129 00:12:35,940 --> 00:12:41,279 python de manera automática al hecho el hecho de poner aquí carlos ya no tengo que poner un tipo 130 00:12:41,279 --> 00:12:49,320 de dato delante del nombre de la variable porque porque automáticamente vas a ver que de tipo texto 131 00:12:49,320 --> 00:12:57,100 entonces nombre va a guardar una variable un valor de una de tipo texto a continuación lo imprime 132 00:12:57,100 --> 00:13:01,919 poniendo la de comidas dobles y luego llamando a la variable nombre que por lo que pondrá hola carlos 133 00:13:01,919 --> 00:13:08,440 También vamos a tener funciones, ya lo hemos visto antes, que se definían con def 134 00:13:08,440 --> 00:13:15,700 Luego el nombre de la función y luego los parámetros que pueda alojar dentro de paréntesis 135 00:13:15,700 --> 00:13:20,480 Podría estar esto vacío, apertura de paréntesis, cierre, si no tiene parámetros 136 00:13:20,480 --> 00:13:22,700 Y si tiene parámetros, pues separados por comas 137 00:13:22,700 --> 00:13:28,259 Después de llamar a la función, al llamar a la función lo que hace es que imprime hola 138 00:13:28,259 --> 00:13:32,039 y el nombre que le ha pasado a través del parámetro en la función. 139 00:13:33,779 --> 00:13:39,419 Esto nos va a permitir las funciones, nos va a permitir la programación modular, 140 00:13:39,779 --> 00:13:43,460 separar partes del problema en distintos módulos. 141 00:13:44,259 --> 00:13:48,360 En el divide y vencerás, o sea, cuando tenemos un problema complejo 142 00:13:48,360 --> 00:13:52,580 y queremos dividirlo en varios problemas sencillos, lo podemos hacer de manera modular, 143 00:13:52,580 --> 00:13:56,480 como repartiendo cada una de las tareas de esos subproblemas, 144 00:13:56,480 --> 00:14:06,519 ¿En qué? En funciones. Eso nos permite abstraer la complejidad de todo el problema en varias funciones o varios módulos, 145 00:14:06,940 --> 00:14:11,500 de tal manera que luego vamos llamando a cada de esos módulos para resolver esos subproblemas. 146 00:14:12,360 --> 00:14:23,659 Importante son las funciones, las veremos. Los condicionales son estructuras de control que nos van a permitir establecer la división entre una u otra dirección. 147 00:14:23,659 --> 00:14:30,080 ¿Qué quiere decir eso? Un flujo de un programa va desde arriba hasta abajo y va en una única dirección. 148 00:14:31,500 --> 00:14:38,620 Tendrá un inicio y un final. El programa puede llegar a un momento en el que se encuentre con una línea de bifurcación, 149 00:14:39,360 --> 00:14:43,120 posibilidad de dos caminos. Eso es lo que vamos a utilizar con el if. 150 00:14:43,120 --> 00:14:49,500 El if, a través de una condición, como aparece aquí, va a decidir si va por un camino o va por otro. 151 00:14:50,000 --> 00:14:56,779 ¿Veis? Las dos palabras reservadas son el if, que sería sí en inglés, y el else, que sería si no. 152 00:14:57,460 --> 00:15:06,059 Entonces, veis que siempre va a través de, por eso se llama condicional, por medio de una condición se va a decidir si va por un camino u otro. 153 00:15:06,320 --> 00:15:11,399 Entonces tenemos que si edad es mayor o igual que 18, pues entonces imprimirá eres mayor de edad. 154 00:15:11,879 --> 00:15:14,360 Y si no, pondrá eres menor de edad. 155 00:15:14,360 --> 00:15:30,559 Veis, estas dos instrucciones no las va a poder leer las dos, solo va a poder leer una de las dos y la elegirá en función de esta condición que aparece aquí. Si cumple esa condición, leerá la que contiene el if. Si no la cumple, leerá la que tiene el chino. 156 00:15:30,559 --> 00:15:56,860 En cuanto a los bucles serían las iteraciones, lo veremos, aquí tenemos un bucle FOR, son bloques de código que se van a leer de manera repetida, puede ser de manera concreta, fijando un número de iteraciones, como puede pasar aquí, está fijando el número de I a través del FOR, pues a un número de iteraciones, 5 iteraciones y luego imprime el valor de I en cada una de las iteraciones, esto lo veremos más adelante. 157 00:15:56,860 --> 00:16:11,899 Y luego los módulos también podemos utilizar ya librerías de Python que ya están configuradas y que podemos importarlas y utilizarlas en nuestro beneficio, utilizando sus métodos, etc. 158 00:16:11,899 --> 00:16:30,399 Un ejemplo aquí aparece de esos programas en archivos separados que podemos reutilizar. Tenemos el módulo MAT, que sería de matemáticas, y que se importan a través de la palabra import. Se importa primero la librería y luego se utiliza. 159 00:16:30,399 --> 00:16:40,559 Aquí mat.sqrt, 16, es una función para determinar la raíz cuadrada de un número. Aquí nos saldría impreso el valor de 4. 160 00:16:41,899 --> 00:16:48,419 Bien, hemos visto todos los componentes estructurales, declaraciones, funciones, condicionales, bucles y módulos. 161 00:16:49,480 --> 00:16:57,259 Y a continuación vamos a pasar a errores comunes al trabajar con los bloques estructurales en Python. 162 00:16:58,080 --> 00:17:05,859 Bien, en Python es común cometer errores relacionados con los bloques estructurales. 163 00:17:05,940 --> 00:17:08,140 Hay que hablar de la indentación, es muy importante. 164 00:17:08,140 --> 00:17:12,759 aquí no aparece porque no aparece el tabulado 165 00:17:12,759 --> 00:17:16,599 o sea, aquí si veis, este tiene el error de la indentación 166 00:17:16,599 --> 00:17:19,779 ¿por qué? porque este print tendría que estar tabulado hasta aquí 167 00:17:19,779 --> 00:17:24,579 para identificar que esta línea o instrucción va 168 00:17:24,579 --> 00:17:28,579 dentro del bloque del if, en la corrección sigue estando 169 00:17:28,579 --> 00:17:32,140 igual, o sea que esto tendría que estar más hacia la derecha 170 00:17:32,140 --> 00:17:36,220 tendría que estar aquí para que se fuera correcto, ese es uno de los problemas 171 00:17:36,220 --> 00:17:40,400 principales en Python. La intentación nos va a dar error si no intentamos 172 00:17:40,400 --> 00:17:44,500 porque no sabemos realmente si esta línea está y pertenece 173 00:17:44,500 --> 00:17:48,460 a fuera del if o sea al programa principal o bien dentro 174 00:17:48,460 --> 00:17:52,220 del propio if. Aquí no va a haber llave de apertura y cierre para identificar 175 00:17:52,220 --> 00:17:56,359 que esta línea está dentro de este bloque if o no lo está. Solo la única 176 00:17:56,359 --> 00:18:00,359 herramienta que tenemos es la intentación o que esté esa línea 177 00:18:00,359 --> 00:18:04,599 tabulada hacia la derecha con respecto al if. 178 00:18:04,599 --> 00:18:09,599 Otro de esos tipos de errores que aparece es no inicializar una variable 179 00:18:09,599 --> 00:18:14,099 Por ejemplo aquí imprimir nombre y antes no se ha inicializado, no se le ha dado un valor a esa variable 180 00:18:14,099 --> 00:18:17,859 Entonces no va a dar un error, tiene que estar definida esa variable 181 00:18:17,859 --> 00:18:21,119 ¿Veis? Aquí nombre le da el valor de Ana y luego pues ya lo imprime 182 00:18:21,119 --> 00:18:24,519 Y por último definir funciones sin ejecutarlas 183 00:18:24,519 --> 00:18:29,059 Fijaos aquí ha definido la función llamada saludar sin parámetros 184 00:18:29,059 --> 00:18:30,700 ¿Veis? Aquí no hay ningún parámetro 185 00:18:30,700 --> 00:18:33,900 Que lo único que hace es imprimir hola mundo 186 00:18:34,539 --> 00:18:37,799 ¿Qué sucede? Pues que aquí nada sucede porque esa función no se ha llamado. 187 00:18:38,140 --> 00:18:44,440 En cambio, ¿cómo se llama una función? Se le llama llamando a la función a través de su nombre y con paréntesis. 188 00:18:44,920 --> 00:18:48,200 Si tuviera un parámetro, pues se añade un parámetro que tiene que recibir. 189 00:18:49,799 --> 00:18:52,960 Aquí no habría error porque la función se ejecuta correctamente. 190 00:18:57,099 --> 00:18:58,759 Variables. Ya hemos visto lo que era una variable. 191 00:18:58,759 --> 00:19:03,259 Una variable es un contenedor que tiene un nombre. En ese contenedor vamos a alojar algo. 192 00:19:03,740 --> 00:19:08,599 Imaginaos una variable que alberga, por ejemplo, objetos personales. 193 00:19:09,579 --> 00:19:17,759 Eso no ocurre en el lenguaje de aprobación, pero es para que hagáis una similitud con lo que quiere decir una variable en un programa. 194 00:19:20,240 --> 00:19:26,839 Imaginaos un cajón que tiene un nombre en la parte delantera y que dentro puedo guardar objetos personales como puede ser el reloj, la cartera, etc. 195 00:19:26,839 --> 00:19:34,380 Pues eso sería una variable. Una vez se abrió el cajón y está el reloj, otra vez se abrió el cajón y está la cartera. 196 00:19:35,359 --> 00:19:40,779 Si lo extraemos, ese ejemplo, lo extraemos a un lenguaje de programación como puede ser Python, 197 00:19:41,339 --> 00:19:46,519 una variable es un contenedor que va a tener un nombre igual que lo que hablaba anteriormente, 198 00:19:46,940 --> 00:19:53,759 pero ahora lo que va a almacenar, ¿qué va a ser? Va a almacenar o bien enteros, o float, o una lista, o un rango, etc. 199 00:19:53,759 --> 00:20:00,960 La variable, lógicamente, como el nombre propio lo indica, puede variar a lo largo del programa. 200 00:20:02,700 --> 00:20:05,779 ¿Por qué es importante enseñar el concepto de la variable? 201 00:20:05,940 --> 00:20:12,900 La variable es, digamos, como un pilar fundamental de un programa para poder realizarlo. 202 00:20:13,519 --> 00:20:19,859 Necesitamos ese contenedor para albergar valores que puedan cambiar a lo largo del programa. 203 00:20:19,859 --> 00:20:39,700 Entonces, es importante también, y aquí lo habla, relacionar con las variables, utilizar nombres que sean muy simbólicos, porque cuando tenemos un programa muy largo y tenemos muchas variables, si no le hemos puesto un nombre simbólico a las variables, después a la hora de poder analizar ese programa, pues es de mayor dificultad. 204 00:20:39,700 --> 00:20:51,579 Entonces, se aconseja siempre poner nombres simbólicos a las variables. Si vas a albergar una dirección, puedes llamar la dirección. Si vas a albergar una nota, puedes llamar la nota, etc. 205 00:20:51,579 --> 00:21:12,900 E introducir también, veremos cómo se utilizan esas variables utilizando con los diferentes tipos de datos, con operadores para poder realizar expresiones y con las estructuras de control y funciones veremos cómo utilizamos esas variables y veremos qué es la base además de todo ello. 206 00:21:12,900 --> 00:21:22,220 las características principales de las variables en Python 207 00:21:22,220 --> 00:21:24,099 ya he dicho anteriormente que 208 00:21:24,099 --> 00:21:27,059 tiene un tipado dinámico 209 00:21:27,059 --> 00:21:30,359 que puede ir cambiando a lo largo del mismo 210 00:21:30,359 --> 00:21:34,440 además el tipo es automático 211 00:21:34,440 --> 00:21:36,799 lo genera propio Python 212 00:21:36,799 --> 00:21:39,619 aquí tenemos algunas características de las variables en Python 213 00:21:39,619 --> 00:21:41,619 tipado dinámico, ¿eso qué significa? 214 00:21:42,299 --> 00:21:44,759 pues que el tipo de dato 215 00:21:44,759 --> 00:21:47,200 normalmente en cualquier ángulo de programación 216 00:21:47,200 --> 00:22:08,210 como puede ser, por ejemplo, Java. En Java, fijaos, en Java, en Java la definición de una variable se ponía primero, por ejemplo, el tipo, 217 00:22:09,009 --> 00:22:20,970 vamos a ponerlo aquí, tipo de dato, luego teníamos a continuación el nombre, y luego igual, por ejemplo, y luego el valor. 218 00:22:20,970 --> 00:22:24,369 así se hacía en java 219 00:22:24,369 --> 00:22:25,750 entonces podríamos tener un 220 00:22:25,750 --> 00:22:27,190 por ejemplo un 221 00:22:27,190 --> 00:22:35,319 podríamos tener por ejemplo 222 00:22:35,319 --> 00:22:38,839 podríamos tener un 223 00:22:38,839 --> 00:22:39,319 int 224 00:22:39,319 --> 00:22:42,640 que viene de 225 00:22:42,640 --> 00:22:44,660 integer, entonces estamos diciendo que la variable 226 00:22:44,660 --> 00:22:45,619 va a ser entera 227 00:22:45,619 --> 00:22:48,240 por ejemplo le ponemos nota que sería 228 00:22:48,240 --> 00:22:50,000 el nombre de la variable 229 00:22:50,000 --> 00:22:52,480 el igual y luego por ejemplo un valor 230 00:22:52,480 --> 00:22:54,660 de 10 y punto y coma, esto sería en java 231 00:22:54,660 --> 00:22:56,019 pero que sucede en python 232 00:22:56,019 --> 00:23:15,660 En Python lo que vamos a tener ahora es nada más que el nombre de la variable, igual y luego el valor. 233 00:23:22,509 --> 00:23:29,549 Además la asignación se realiza de manera automática, veis como ya no pongo tipo de dato, entonces ahora en Python, ¿qué sucede? 234 00:23:29,549 --> 00:23:40,259 En Python puedo poner nombre, que sería el nombre de la variable, igual a Carlos. 235 00:23:42,440 --> 00:23:50,339 Fijaos, ya en Python, esto sería en Python y esto sería en Java. 236 00:23:53,769 --> 00:23:58,809 Fijaos la diferencia, en Python necesita siempre poner el tipo de dato, 237 00:23:58,809 --> 00:24:13,930 Mientras que en Java, en Python no hace falta, con que pongamos el nombre, él automáticamente ya, él primero coge el valor, ve que es una cadena de texto y automáticamente ya le está diciendo que esta variable va a ser de tipo texto. 238 00:24:14,569 --> 00:24:25,369 Por ejemplo, si yo quisiera hacer esto en Java, en Java necesitaría decirle el tipo que va a utilizar, por ejemplo, stream. 239 00:24:25,369 --> 00:24:40,549 Y necesitaría poner string, el nombre de la variable y luego el Carlos. En cambio, en Python no es necesario. En Python, con poner el nombre y el valor, ya nos identifica qué tipo de variable y él ya lo sabe. 240 00:24:40,549 --> 00:24:43,190 entonces es una 241 00:24:43,190 --> 00:24:46,109 ¿veis? la asignación es directa 242 00:24:46,109 --> 00:24:48,509 no es necesario declarar una variable antes de usarla 243 00:24:48,509 --> 00:24:50,150 ¿veis? la podemos asignar de manera 244 00:24:50,150 --> 00:24:51,309 directa y 245 00:24:51,309 --> 00:24:54,049 la variable se asigna automáticamente 246 00:24:54,049 --> 00:24:55,930 ¿eso qué quiere decir que se asigna automáticamente? 247 00:24:56,369 --> 00:24:57,250 pues que si tenemos 248 00:24:57,250 --> 00:24:59,750 por ejemplo nombre es igual a Carlos 249 00:24:59,750 --> 00:25:01,250 si yo a continuación 250 00:25:01,250 --> 00:25:03,089 a nombre 251 00:25:03,089 --> 00:25:05,410 le pongo 252 00:25:05,410 --> 00:25:08,710 el valor de 2 253 00:25:08,710 --> 00:25:09,809 pues automáticamente 254 00:25:09,809 --> 00:25:19,190 él automáticamente cambia y sabe que nombre ahora ya no deja de ser, deja de ser un valor texto y pasa a ser un valor entero. 255 00:25:21,829 --> 00:25:29,269 Scale sensitive, que quiere decir que no es lo mismo poner el nombre de la variable así que ponerlo así. 256 00:25:31,650 --> 00:25:36,269 Nombre con la primera letra mayúscula y con la segunda minúscula, o sea, con la primera mayúscula. 257 00:25:36,269 --> 00:25:50,819 mayúscula. Esta variable y esta variable son distintas. ¿Por qué? Porque es case sensitive, 258 00:25:50,960 --> 00:25:54,759 que quiere decir que distingue mayúsculas de minúsculas. Por tanto, esta variable, 259 00:25:55,059 --> 00:26:00,400 como empieza con una N mayúscula, sería diferente a esta otra. Estas dos serán diferentes. 260 00:26:00,640 --> 00:26:08,589 Por ejemplo, ponemos aquí. Mutabilidad. El valor puede cambiar durante la ejecución, 261 00:26:08,589 --> 00:26:13,589 Ya lo he dicho, ¿veis? Contador puede ser igual a cero y en otro instante puede ser un valor de uno. 262 00:26:14,589 --> 00:26:19,190 Ámbito o scope, depende del ámbito, si es global o local. Esto lo veremos más adelante. 263 00:26:19,569 --> 00:26:23,470 Local sería, por ejemplo, dentro de una función. Fuera de la función, esa variable dejaría de existir. 264 00:26:23,930 --> 00:26:26,190 En cambio, global sería para todo el programa. 265 00:26:27,509 --> 00:26:34,269 Aquí tenemos un ejemplo en el que, fijaos, esta variable estaría fuera, sería de ámbito global y esta está dentro de la función. 266 00:26:34,690 --> 00:26:36,329 Entonces, esta sería de ámbito local. 267 00:26:37,170 --> 00:26:47,549 Asignación múltiple, se pueden asignar varios valores, esto no se conoce en otros lenguajes de programación y es muy bueno porque es muy eficiente y además la escritura es muy limpia. 268 00:26:47,910 --> 00:26:58,650 Puedes generar tres variables a la vez con comas, ¿veis? Aquí aparece, puedes poner A, B, C, 1, 2 y 3, quiere decir que el 1 pertenece a la A, el 2 pertenece a la B y el 3 pertenece a la C. 269 00:26:58,650 --> 00:27:03,230 Hemos generado o definido tres variables de una atacada en una sola línea. 270 00:27:04,309 --> 00:27:08,410 Y referencia de objetos, la variable mcna es una referencia en un valor directo. 271 00:27:08,470 --> 00:27:08,970 Ya lo veremos. 272 00:27:09,390 --> 00:27:12,970 Aquí tenemos una lista que se define entre corchetes, con dos valores. 273 00:27:13,650 --> 00:27:16,849 Y lo que hace es que igual genera otra variable llamada lista2 274 00:27:16,849 --> 00:27:19,589 que crea una referencia a la lista1. 275 00:27:19,710 --> 00:27:21,549 Ya veremos qué es eso más adelante. 276 00:27:25,069 --> 00:27:28,470 ¿Errores comunes al trabajar con variables en Python? 277 00:27:29,269 --> 00:27:33,390 Pues los errores ya los hemos visto anteriormente en la mayoría de ellos. 278 00:27:33,630 --> 00:27:37,369 Errores comunes al trabajar en Python es confundir mayúsculas por minúsculas, porque es case sensitive. 279 00:27:37,369 --> 00:27:44,230 No lo mismo esta variable edad, que empieza por E mayúscula, que esta variable edad, que empieza con E minúscula. 280 00:27:44,349 --> 00:27:45,750 Estas son dos variables diferentes. 281 00:27:46,730 --> 00:27:48,670 Usar variables sin inicializar. 282 00:27:49,089 --> 00:27:54,509 No puedes imprimir resultados si no has definido antes qué tiene resultado, qué contiene resultado. 283 00:27:55,450 --> 00:27:56,369 Sobrescribir variables importantes. 284 00:27:56,369 --> 00:28:00,730 importantes. Cuidado con sobreescribir variables. Yo puedo escribir al principio 285 00:28:00,730 --> 00:28:05,769 x igual a 5 y luego escribir x igual a hola. Fijaos, este ejemplo. 286 00:28:15,589 --> 00:28:31,660 Fijaos, este ejemplo. ¿Qué es lo que hace aquí? Primero define la variable x con un 287 00:28:31,660 --> 00:28:37,900 valor de 5. Después vuelve a poner x igual a hola. Entonces ahora x ¿qué vale? 288 00:28:38,480 --> 00:28:43,619 Esto se llama sobreescribir la variable porque a x la habíamos definido con un 289 00:28:43,619 --> 00:28:47,380 valor y después la definimos con otro valor. Estamos sobrescribiendo esta 290 00:28:47,380 --> 00:28:51,700 variable y está perdiendo su valor de 5 y ahora tiene un valor de hola 291 00:28:51,700 --> 00:28:54,740 y además ha cambiado hasta el tipo. Ahora es de tipo texto. 292 00:28:55,799 --> 00:28:59,180 Esto puede generar un error porque luego al imprimir x más 2 293 00:28:59,180 --> 00:29:03,599 en vez de salir 7, porque si hubiera sido un 294 00:29:03,599 --> 00:29:07,839 valor entero, aquí cogería el 5 más 2, 7, imprimiría el valor de 7. 295 00:29:08,039 --> 00:29:11,339 Ahora lo que va a imprimir, ¿qué sería? Generaría un error 296 00:29:11,339 --> 00:29:14,759 porque hola es un texto y no se puede sumar al valor de 2. 297 00:29:17,099 --> 00:29:19,420 Otra confusión es el alcance o scope. 298 00:29:19,759 --> 00:29:25,000 Cuidado con el scope dentro de una función, una variable. 299 00:29:25,759 --> 00:29:27,180 Fijaos aquí, esta otra. 300 00:29:42,259 --> 00:29:43,079 Fijaos esta. 301 00:29:44,640 --> 00:29:46,599 Esto es una función que acabo de definir. 302 00:29:48,119 --> 00:29:49,759 Vamos a ponerla aquí para que la veáis mejor. 303 00:29:50,900 --> 00:29:52,559 Y tenemos tabulado esto. 304 00:29:52,559 --> 00:29:53,579 ¿Esto qué quiere decir? 305 00:29:53,579 --> 00:29:56,599 vamos a tablarlo menos para que no quede así 306 00:29:56,599 --> 00:29:58,940 fijaos, esta es la función 307 00:29:58,940 --> 00:30:01,900 y la función, el contenido de la función es esa línea 308 00:30:01,900 --> 00:30:04,339 porque está tabulada, veis, ahí no hay dentación 309 00:30:04,339 --> 00:30:06,539 esto es lo mismo que parecería, por ejemplo, en Java 310 00:30:06,539 --> 00:30:10,059 en el que una función en Java, pues podríamos poner aquí 311 00:30:10,059 --> 00:30:12,339 una llave de apertura 312 00:30:12,339 --> 00:30:16,779 una función y una llave de cierre 313 00:30:16,779 --> 00:30:29,650 esto, una función, pues por ejemplo 314 00:30:29,650 --> 00:30:31,569 en Java, por ejemplo 315 00:30:31,569 --> 00:30:38,019 esto sería una función de Java 316 00:30:38,019 --> 00:30:40,160 ¿veis? tiene una llave de apertura y una llave de cierre 317 00:30:40,160 --> 00:30:42,200 y luego las líneas que hay dentro del método 318 00:30:42,200 --> 00:30:43,200 en cambio 319 00:30:43,200 --> 00:30:46,319 en Python no es así 320 00:30:46,319 --> 00:30:47,259 en Python 321 00:30:47,259 --> 00:30:49,519 si quiero hacer esta, bueno 322 00:30:49,519 --> 00:30:52,059 como es una sumar 323 00:30:52,059 --> 00:30:54,440 sí, vamos a dejarla así 324 00:30:54,440 --> 00:30:56,380 en Python no es así 325 00:30:56,380 --> 00:30:58,259 vamos a ver para que veáis 326 00:30:58,259 --> 00:31:01,480 esto lo voy a quitar 327 00:31:01,480 --> 00:31:11,880 En Python se define con def la función, se pone el valor de sumar, el nombre de la función y luego los parámetros. 328 00:31:12,240 --> 00:31:16,500 No tiene llaves, sería a través de dos puntos y no tiene ninguna llave. 329 00:31:17,519 --> 00:31:23,440 Lo que indica cuáles son las líneas que están dentro del método sería esta porque está indentada, ¿lo veis? 330 00:31:24,039 --> 00:31:30,720 En cambio esta otra al no estar indentada, ¿qué estaría? Estaría fuera del ámbito de esa función. 331 00:31:30,720 --> 00:31:51,039 ¿Eso qué quiere decir? Que cuando quiere imprimir la variable total, daría error porque total no está definida. Pero me diréis, si está definida, está aquí. No, pero esta variable está dentro del método. Cuando el método termina, o sea, cuando llega a esta línea y el método haya terminado, esta variable, como es local al método, desaparece, se borra. 332 00:31:51,039 --> 00:32:14,200 Solo, entonces, después con la siguiente línea, cuando entra en el print y pasa a imprimir total, lógicamente ya no encuentra esa variable. Esa variable, para que la pudiera utilizar, tendría que estar fuera del programa. Tendría que ser una variable global. Tendríamos que ponerla aquí. Total igual, por ejemplo, a 6. 333 00:32:14,200 --> 00:32:34,660 Entonces, ¿qué imprimiría aquí total? Antes nos generaba un error. ¿Qué es lo que imprimiría total? Total imprimiría, este programa lo que haría es que imprimiría el valor de 6. ¿Por qué la que está fuera? ¿Veis? Esta está dentro de un método y cuando termina el método, esa variable desaparece. 334 00:32:34,660 --> 00:32:42,799 ¿Qué sucedería si quisiéramos imprimir el valor de 10? Pues tendríamos que meterla dentro del método 335 00:32:42,799 --> 00:32:46,400 la tendríamos que intentar y ahora estas dos líneas estarían dentro 336 00:32:46,400 --> 00:32:50,200 ¿Y qué imprimiría el programa? Pues imprimiría el valor de 10 337 00:32:50,200 --> 00:32:53,720 Bueno, esto lo veremos más adelante 338 00:32:53,720 --> 00:32:58,440 Reutilizar también nombres de funciones y librerías 339 00:32:58,440 --> 00:33:07,839 Bueno, reutilizar pues, veis aquí, es nombrar una variable igual que una función integrada dentro de una librería 340 00:33:07,839 --> 00:33:10,640 Bueno, ya lo veremos lo que es 341 00:33:10,640 --> 00:33:15,380 Veis aquí, lo que ha hecho es utilizar una lista en la que tiene tres valores 342 00:33:15,380 --> 00:33:20,220 Y luego imprime esa lista 343 00:33:20,220 --> 00:33:22,079 Esto lo veremos 344 00:33:22,079 --> 00:33:27,099 Se utiliza para evitar usar nombres reservados de Python 345 00:33:27,099 --> 00:33:32,380 entonces realmente es nombrar una variable igual que una función integrada o librería 346 00:33:32,380 --> 00:33:33,640 lo veremos más adelante 347 00:33:33,640 --> 00:33:39,380 y nos llegamos al tipo de datos que voy a parar aquí 348 00:33:39,380 --> 00:33:47,559 lo único que quiero que veáis que los datos van a indicar qué clase de información estamos barajando o utilizando 349 00:33:47,559 --> 00:33:51,799 el intérprete lo va a asignar el tipo de dato de manera automática 350 00:33:51,799 --> 00:33:58,960 y entonces, aún así, el ordenador tiene que reconocer o diferenciar y aplicar los distintos tipos de datos. 351 00:33:58,960 --> 00:34:03,980 En otros lenguajes de programación está más claro, pero aquí, como lo hace automáticamente, 352 00:34:04,200 --> 00:34:07,900 pero aún así tenéis que saber que los tipos de datos son estos que aparecen aquí. 353 00:34:08,639 --> 00:34:13,079 Vamos a tener tipos de datos enteros, que sería el INT, viene de Integra en inglés, 354 00:34:13,320 --> 00:34:16,659 Float, que serían los coma flotante o los que son decimales, 355 00:34:16,659 --> 00:34:19,239 STR para las cadenas de texto 356 00:34:19,239 --> 00:34:21,099 y luego tenemos BUL para valores 357 00:34:21,099 --> 00:34:23,360 booleanos, en el que 358 00:34:23,360 --> 00:34:25,179 puede tener solo dos valores, 0 o 1 359 00:34:25,179 --> 00:34:26,519 o TRUE o FALSE 360 00:34:26,519 --> 00:34:30,440 En cuanto a tipos de datos 361 00:34:30,440 --> 00:34:33,099 solo enseñar esta 362 00:34:33,099 --> 00:34:35,380 foto y con 363 00:34:35,380 --> 00:34:37,400 esto lo dejamos aquí y hacemos un 364 00:34:37,400 --> 00:34:39,340 programa. Veis que los tipos 365 00:34:39,340 --> 00:34:41,659 de datos, vamos a tener los enteros 366 00:34:41,659 --> 00:34:43,440 luego 367 00:34:43,440 --> 00:34:45,400 los float, que serán todos los 368 00:34:45,400 --> 00:34:53,260 Los decimales, los de tipo cadena booleanos, que eran true o false o 0-1, los de tipo cadena y los complejos. 369 00:34:53,340 --> 00:35:02,679 Los complejos luego veremos cuando avancemos más en el lenguaje Python, veremos lo que son los tipos de datos complejos. 370 00:35:03,500 --> 00:35:05,000 Y luego tenemos la conversión de tipos. 371 00:35:05,260 --> 00:35:08,360 Podemos convertir un tipo en otro, como lo podemos hacer. 372 00:35:08,679 --> 00:35:12,400 Y luego estos valores pueden generar expresiones a través de los operadores. 373 00:35:15,400 --> 00:35:20,800 Aquí tenemos todos los tipos de datos que se pueden utilizar en Python. 374 00:35:22,420 --> 00:35:24,280 Lo vemos y ya hacemos el programa. 375 00:35:25,880 --> 00:35:31,179 Tenemos los enteros que vienen con la palabra int, que proviene de integer. 376 00:35:31,380 --> 00:35:36,460 Esos son números sin decimales, que son los números en matemáticas, los números enteros. 377 00:35:37,119 --> 00:35:41,400 Los números enteros, por ejemplo, fijaos, yo puedo declarar una variable edad y llamarle igual a 20. 378 00:35:41,400 --> 00:35:53,480 Ya automáticamente el programa sabe que esa variable vale 20 y es un número entero. A continuación lo imprime y da más 5, con lo cual imprimirá el que es 25. 379 00:35:54,599 --> 00:36:08,679 En cuanto a los flotantes, estamos hablando de números con decimales. Ahora veis, yo pongo a precio, le pongo 19,99 y que está indicando que precio va a tener un valor decimal. 380 00:36:08,679 --> 00:36:18,880 automáticamente el python le asigna el que un tipo flotante o flow at las cadenas de esto vienen con 381 00:36:18,880 --> 00:36:25,840 str y sencillamente van entre comillas dobles veis el nombre igual a ana entre comillas dobles y eso 382 00:36:25,840 --> 00:36:33,820 está indicando que ya va a ser una cadena de texto a continuación aquí le pone imprimir hola más la 383 00:36:33,820 --> 00:36:35,840 la variable nombre y entonces pondrá hola a Ana. 384 00:36:37,139 --> 00:36:39,039 Obviamente ya nos ha dicho que solo pueden tener dos valores, 385 00:36:39,559 --> 00:36:41,699 que sean true o false, o 0 o 1, 386 00:36:42,219 --> 00:36:44,539 y veis aquí que pone a la variable activo, 387 00:36:44,659 --> 00:36:45,960 le da el valor de true, 388 00:36:46,179 --> 00:36:48,500 cuidado con que tienen que ir en mayúscula, 389 00:36:48,659 --> 00:36:51,480 en la T y la F de true o false, 390 00:36:52,260 --> 00:36:54,440 y después lo utiliza, por ejemplo, en un condicional, 391 00:36:54,659 --> 00:36:58,039 dice si activo, o sea, si true, si es verdadero, 392 00:36:58,039 --> 00:36:59,320 pues imprime usuario activo, 393 00:36:59,380 --> 00:37:02,820 lógicamente está en el programa, imprimirá usuario activo. 394 00:37:03,820 --> 00:37:17,119 Las listas son colecciones ordenadas y mutables de elementos, son elementos ordenados de manera correlativa y que se meten entre corchetes cuando se definen. 395 00:37:17,460 --> 00:37:24,199 Fijaos, esto es una lista, como en matemáticas, en el que separado por comas está definiendo una lista de tres elementos que serán el 1, el 2 y el 3. 396 00:37:24,199 --> 00:37:32,739 Lo ponen entre corchetes, así se define. Después podemos imprimir el número 0, el 1, fijaos, vamos a poner aquí el ejemplo de una lista. 397 00:37:33,820 --> 00:37:50,380 Una lista en Python sería un ejemplo como el que aparece ahí. 398 00:37:50,380 --> 00:38:03,300 Por ejemplo, números igual a 1,2,3,4. 399 00:38:03,719 --> 00:38:07,519 Esta lista tiene cuatro números. 400 00:38:08,239 --> 00:38:09,719 Vienen entre corchetes. 401 00:38:09,940 --> 00:38:11,639 Estas son listas en Python. 402 00:38:13,380 --> 00:38:35,059 Porque en otros lenguajes es diferente. Y tiene cuatro elementos. Pues fijaros, cada elemento ocupa una posición dentro de la lista. Este va a ocupar la posición 0, este ocupa la posición 1, este ocupa la posición 2 y este ocupa la posición 3. 403 00:38:35,059 --> 00:38:38,239 cada posición siempre empieza desde el 0 404 00:38:38,239 --> 00:38:43,420 con lo cual si yo quiero llamar al elemento número 2 de la lista 405 00:38:43,420 --> 00:38:44,960 yo tendría 406 00:38:44,960 --> 00:38:48,900 quiero llamar al elemento número 2 de la lista 407 00:38:48,900 --> 00:38:51,940 para imprimirlo yo tendría que poner un print 408 00:38:51,940 --> 00:38:54,440 y tendría que imprimir el key 409 00:38:54,440 --> 00:38:57,059 para imprimirlo tendría que llamar a la lista 410 00:38:57,059 --> 00:39:00,860 cuidado con los tildes a la hora de definir variables 411 00:39:00,860 --> 00:39:10,139 Si yo quiero imprimir el elemento tercero, pues su posición cuál es, es la posición 2 412 00:39:10,139 --> 00:39:15,179 Siempre el orden de las posiciones empieza en el 0 413 00:39:15,179 --> 00:39:20,099 Con lo cual, si está en la posición 0 dentro de la lista, está en la posición 1, en la posición 2 y en la posición 3 414 00:39:20,099 --> 00:39:23,619 Por lo tanto, el 3, ¿en qué posición está? En la posición 2 415 00:39:23,619 --> 00:39:29,500 Si yo quiero imprimir el elemento 3 de la variable números de esa lista, tendría que poner números 416 00:39:29,500 --> 00:39:35,000 y luego entre corchetes la posición de ese número, que sería la posición 2. 417 00:39:35,539 --> 00:39:38,639 ¿Esto qué nos imprimiría? Esto nos imprimiría el valor de 3. 418 00:39:40,239 --> 00:39:45,500 Se pone para poder llamar a uno de los elementos de esa lista la variable 419 00:39:45,500 --> 00:39:49,380 y dentro de corchetes la posición del elemento que queremos imprimir. 420 00:39:50,019 --> 00:39:55,739 Como en caso, si quisiéramos imprimir el número 2 de esta lista, 421 00:39:55,739 --> 00:39:58,800 el número 2, tendríamos que poner la posición número 1. 422 00:39:59,500 --> 00:40:04,559 luego tenemos las tuplas 423 00:40:04,559 --> 00:40:05,480 las tuplas que son 424 00:40:05,480 --> 00:40:07,880 estamos hablando ya como 425 00:40:07,880 --> 00:40:10,760 son colecciones 426 00:40:10,760 --> 00:40:12,480 pero estas ya son 427 00:40:12,480 --> 00:40:14,699 mientras que las listas eran 428 00:40:14,699 --> 00:40:16,679 mutables, o sea pueden variar, estas son 429 00:40:16,679 --> 00:40:18,340 inmutables, lo veremos más adelante 430 00:40:18,340 --> 00:40:20,860 una lista se define 431 00:40:20,860 --> 00:40:22,739 a través de paréntesis, separados 432 00:40:22,739 --> 00:40:23,719 por comar los elementos 433 00:40:23,719 --> 00:40:26,760 ser tupla, pues lógicamente tiene dos 434 00:40:26,760 --> 00:40:29,019 valores, esto puede 435 00:40:29,019 --> 00:40:31,019 ser representado por ejemplo la coordenada de un punto 436 00:40:31,019 --> 00:40:32,980 aunque tiene dos valores, sería una tupla. 437 00:40:33,760 --> 00:40:36,599 Diccionarios en estructuras de clave-valor, ¿qué quiere decir eso? 438 00:40:36,719 --> 00:40:42,480 Pues que se van a estas de clave-valor, serían este tipo, lo voy a poner aquí. 439 00:40:50,570 --> 00:41:03,780 Estos serían los diccionarios y tenemos aquí el diccionario, vamos a ponerlo en grande. 440 00:41:06,369 --> 00:41:13,610 ¿Veis? Tenemos clave-valor, esta sería la clave y esta sería el valor. 441 00:41:14,469 --> 00:41:18,650 ¿Veis? Son de tipo texto, entonces el usuario y se pone entre llaves. 442 00:41:19,809 --> 00:41:23,449 ¿Veis? Para la clave nombre, el valor es Ana. 443 00:41:24,489 --> 00:41:25,750 Se separan por dos puntos. 444 00:41:25,969 --> 00:41:31,030 Luego, el siguiente clave valor, separado por una coma, sería para edad, el valor sería 20. 445 00:41:31,469 --> 00:41:35,969 Si luego yo quiero imprimir uno de los valores de esta variable usuario, 446 00:41:36,590 --> 00:41:40,170 los tengo que imprimir llamándolos a través de la clave. 447 00:41:40,710 --> 00:41:41,789 ¿Cuál es la clave? Nombre. 448 00:41:41,789 --> 00:41:45,889 Si yo llamo a usuario, entre corchetes, nombre, ¿qué va a imprimir? Imprimirá Ana. 449 00:41:49,420 --> 00:41:57,500 Y por último, los conjuntos, en el que, bueno, esto es como si fuera una enumeración, pues en Java, son colecciones desordenadas de elementos únicos. 450 00:41:58,000 --> 00:42:04,940 Se ponen entre llaves, como aparece aquí, por ejemplo, frutas, y serían los tres elementos que aparecen aquí, que sean manzana, pera y uva. 451 00:42:06,139 --> 00:42:08,519 Veremos también para qué se utilizan los conjuntos. 452 00:42:09,519 --> 00:42:13,780 Bien, y hasta aquí el comienzo de tipo de datos. 453 00:42:13,900 --> 00:42:20,800 En la siguiente clase volveré a repasar esto para que nos quede más claro porque es importante y continuaré con la unidad. 454 00:42:21,780 --> 00:42:30,159 ¿Qué nos queda? He dicho que íbamos a hacer un ejercicio en Python y este es el programa en el que vamos a utilizar, el Visual Studio Code. 455 00:42:30,940 --> 00:42:36,199 Lo primero que he hecho, he creado una carpeta donde he querido, en mi escritorio o donde queráis, 456 00:42:36,320 --> 00:42:39,719 donde voy a guardar mis archivos de Python. 457 00:42:40,780 --> 00:42:46,519 Se supone que ya lo tenéis configurado esto, en el que tenéis instalado la fibrería de Python, etc. 458 00:42:47,039 --> 00:42:53,960 Una vez que ya habéis seguido la instalación que os he puesto en el aula virtual. 459 00:42:54,880 --> 00:42:59,980 Bien, entonces una vez que lo tenemos, damos a abrir y abrir carpeta. 460 00:43:00,079 --> 00:43:06,340 Al abrir carpeta, pues entramos en una carpeta, en mi caso serían primeros programas, que serían mi carpeta. 461 00:43:06,340 --> 00:43:11,300 Si veis que aquí aparece un símbolo de nuevo archivo. 462 00:43:11,840 --> 00:43:13,820 Tenéis que darle si queréis generar un nuevo archivo. 463 00:43:14,000 --> 00:43:22,079 Yo tengo ya aquí uno creado, nombre Py, pero al darle, pues yo puedo ponerle, pues, saludo, que sería mi fichero, 464 00:43:22,079 --> 00:43:27,179 pero siempre poniendo la extensión .py para que sepa que vamos a realizar un programa en Python. 465 00:43:27,760 --> 00:43:33,440 Al darle ya tendría mi propio archivo y ya podría escribir aquí el código. 466 00:43:34,579 --> 00:43:44,380 Tan solo voy a hacer un programa sencillo, vamos a pedir como el que aparecía en el propio ejemplo del aula, 467 00:43:44,960 --> 00:43:51,119 vamos a hacer un programa en el que pedamos dos notas A a través del teclado y luego calculamos la media. 468 00:43:51,119 --> 00:44:10,739 Entonces, lo primero que hacemos es comentar. Eso es muy importante, comentar lo que vamos a hacer. Entonces, programa para el cálculo de la media de dos notas. 469 00:44:10,739 --> 00:44:38,340 A continuación, ponemos también otro comentario en el que vamos a indicar que pedimos por teclado la primera nota y la almacenamos en la variable nota 1. 470 00:44:38,340 --> 00:44:41,579 eso es lo que vamos a hacer, vamos a pedir una nota por teclado 471 00:44:41,579 --> 00:44:43,300 ya hemos visto que input 472 00:44:43,300 --> 00:44:45,380 la operación input que ya aparece aquí 473 00:44:45,380 --> 00:44:47,159 veis, input 474 00:44:47,159 --> 00:44:48,719 yo le puedo poner aquí una cadena 475 00:44:48,719 --> 00:44:51,300 por ejemplo, dame 476 00:44:51,300 --> 00:44:53,739 la primera nota 477 00:44:53,739 --> 00:44:57,820 esto lo que va a hacerme 478 00:44:57,820 --> 00:44:59,280 es, va a escribir en pantalla 479 00:44:59,280 --> 00:45:01,559 dame la primera nota y a continuación va a aparecer un cursor 480 00:45:01,559 --> 00:45:03,159 parpadeante como este que aparece aquí 481 00:45:03,159 --> 00:45:05,380 pero el cursor parpadeante va a aparecer 482 00:45:05,380 --> 00:45:06,980 aquí al lado, va a aparecer aquí 483 00:45:06,980 --> 00:45:09,059 para que nosotros por teclado la escribamos. 484 00:45:09,960 --> 00:45:15,460 Bien, como queremos que en recibir un valor decimal 485 00:45:15,460 --> 00:45:21,500 tenemos que pasar lo que venga de esta petición o de este input, 486 00:45:22,219 --> 00:45:30,550 tenemos que convertirlo a un valor flotante o un valor decimal. 487 00:45:31,409 --> 00:45:36,710 Esto es un casting para transformar un tipo de dato que recibimos 488 00:45:36,710 --> 00:45:38,329 porque a través del teclado 489 00:45:38,329 --> 00:45:39,929 lo vamos a recibir como una cadena de texto 490 00:45:39,929 --> 00:45:41,250 si lo queremos convertir a un float 491 00:45:41,250 --> 00:45:43,230 se pone por delante el tipo 492 00:45:43,230 --> 00:45:45,110 entre paréntesis se cubre 493 00:45:45,110 --> 00:45:46,530 entre paréntesis se pone el tipo por delante 494 00:45:46,530 --> 00:45:47,469 lo veremos más adelante 495 00:45:47,469 --> 00:45:49,170 lo que sepáis que esto nos sirve 496 00:45:49,170 --> 00:45:53,190 para que el valor que recibamos 497 00:45:53,190 --> 00:45:53,929 a través del input 498 00:45:53,929 --> 00:45:55,730 este input lo que va a permitir 499 00:45:55,730 --> 00:45:58,250 es que yo pueda escribir por pantalla 500 00:45:58,250 --> 00:46:00,690 a través del teclado algo 501 00:46:00,690 --> 00:46:02,849 ese valor va a aparecer 502 00:46:02,849 --> 00:46:04,670 lo va a recibir como un tipo texto 503 00:46:04,670 --> 00:46:06,110 y le ponemos un float adelante 504 00:46:06,110 --> 00:46:16,809 Esto sería un cambio de tipo, un casteo, para poder convertir, si fijaos lo pone aquí mismo, convertir el valor de la cadena de texto a un valor float. 505 00:46:17,949 --> 00:46:26,710 A continuación, ¿qué nos queda? Nos queda definir la variable nota1 y que es donde va a albergar el que, este valor que vamos a recibir del teclado. 506 00:46:27,710 --> 00:46:34,090 Y ya lo tendríamos. Ahora hacemos lo mismo, pero para la nota2. 507 00:46:38,570 --> 00:46:45,130 Pedimos por teclado la segunda nota y la almacenamos en la variable nota 2. 508 00:46:46,090 --> 00:46:49,630 Esta línea es exactamente la misma y ya tendríamos nota 2. 509 00:46:50,070 --> 00:46:53,690 Con esto ya tendríamos dos notas que hemos recibido por teclado. 510 00:46:54,409 --> 00:46:56,449 Y ahora, ¿qué quedaría? Calcular la media. 511 00:46:56,449 --> 00:47:05,250 Vamos a calcular de dos notas. 512 00:47:06,269 --> 00:47:10,150 Para calcular la media tendremos que crear otra variable que la vamos a llamar media. 513 00:47:10,969 --> 00:47:22,929 Esa media que lo que va a hacer, va a hacer coger la nota 1, le va a sumar la nota 2 y todo eso lo va a dividir entre 2. 514 00:47:24,590 --> 00:47:32,610 ¿Veis? Únicamente lo que va a hacer es una expresión matemática que sería esta, que es a través del operador más y el operador división. 515 00:47:33,210 --> 00:47:39,170 Calculamos la media y el valor de la suma de las notas partido de 2 lo va a meter dentro de la variable media. 516 00:47:39,170 --> 00:47:43,190 Y ya lo único que nos quedaría es imprimir la media. 517 00:47:45,110 --> 00:47:50,789 Pondremos aquí imprimir el valor de la media. 518 00:47:52,789 --> 00:47:54,110 Entonces aquí pondríamos un print. 519 00:47:54,250 --> 00:48:02,769 Print es una función que no va a permitir imprimir en pantalla y que requiere un parámetro. 520 00:48:03,389 --> 00:48:06,289 Este parámetro es una cadena de texto. 521 00:48:06,289 --> 00:48:09,869 pondríamos la media es 522 00:48:09,869 --> 00:48:15,369 y a continuación le podemos añadir un valor de más 523 00:48:15,369 --> 00:48:17,949 este operador más lo que va a hacer es que va a concatenar cadenas 524 00:48:17,949 --> 00:48:23,590 la cadena de la media es le va a concatenar con la cadena de la variable que queremos imprimir 525 00:48:23,590 --> 00:48:25,590 a ver, el paso es el siguiente 526 00:48:25,590 --> 00:48:28,269 primero coge media y ve que es un valor decimal 527 00:48:28,269 --> 00:48:32,110 pero al meterlo aquí dentro y concatenarlo a esta cadena 528 00:48:32,110 --> 00:48:35,590 lo convierte a cadena y al final todo esto va a ser una cadena 529 00:48:35,590 --> 00:48:42,670 que la media es y el valor decimal que se obtiene de la media, pero pasado a un tipo cadena. 530 00:48:44,030 --> 00:48:58,070 Esto si le damos a ejecutar, nos pide la primera nota, le damos un valor de 2,4, cuidado hay que ponerlo con puntos, 531 00:48:58,170 --> 00:49:03,489 si lo pones con coma nos dará error, y vamos a poner un 8,6 y él te calcula la media. 532 00:49:03,489 --> 00:49:32,980 Nos dice que aquí hay un error porque nos dice... lo ponemos con una coma y vamos a ver ahora. Le ponemos 2,4, le ponemos el 8,6 y ahora ya sí te la calcula la media. 533 00:49:32,980 --> 00:49:35,760 bien, el hecho 534 00:49:35,760 --> 00:49:37,880 no te lo ha convertido 535 00:49:37,880 --> 00:49:39,880 a una cadena de texto y el te lo está diciendo 536 00:49:39,880 --> 00:49:41,360 que no puede hacer, porque 537 00:49:41,360 --> 00:49:43,440 no está diciendo el error 538 00:49:43,440 --> 00:49:45,760 puedo solo concatenar una cadena 539 00:49:45,760 --> 00:49:48,159 con otra cadena, pero no una cadena 540 00:49:48,159 --> 00:49:49,960 con un float, no te lo convierte 541 00:49:49,960 --> 00:49:51,940 automáticamente como pasaba en Java 542 00:49:51,940 --> 00:49:54,099 ¿vale? si yo pusiera aquí 543 00:49:54,099 --> 00:49:56,059 media, imaginaos, voy a poner 544 00:49:56,059 --> 00:49:58,280 lo mismo, pero ahora vamos a ver si nos funciona 545 00:49:58,280 --> 00:49:59,980 y lo convierto 546 00:49:59,980 --> 00:50:00,960 a str 547 00:50:00,960 --> 00:50:04,920 R para convertir una variable 548 00:50:04,920 --> 00:50:08,159 de un tipo a otro. ¿Veis? Se pone entre paréntesis como hacíamos aquí 549 00:50:08,159 --> 00:50:12,820 el contenido y se le pone delante el tipo al que queremos compartir, al que 550 00:50:12,820 --> 00:50:16,880 queremos convertir. ¿Veis? Estoy haciendo que se convierta en una cadena de texto. Vamos a ver 551 00:50:16,880 --> 00:50:20,960 si ahora funciona. Vamos a borrar esto para que no... 552 00:50:29,710 --> 00:50:31,510 Vamos a borrarlo. 553 00:50:35,789 --> 00:50:36,869 Vamos a rebutarlo. 554 00:50:36,869 --> 00:50:39,889 y vamos a ver si ahora si nos da bien 555 00:50:39,889 --> 00:50:41,730 le ponemos el valor de primera nota 556 00:50:41,730 --> 00:50:43,369 2,4 y le ponemos 557 00:50:43,369 --> 00:50:45,590 8,4 y veis 558 00:50:45,590 --> 00:50:47,730 nos da bien, ¿por qué? ¿qué es lo que he hecho? 559 00:50:48,510 --> 00:50:49,650 antes media 560 00:50:49,650 --> 00:50:51,110 era un valor float 561 00:50:51,110 --> 00:50:53,369 entonces si yo se los concadenaba 562 00:50:53,369 --> 00:50:55,730 la media es, no te lo convertía a cadena 563 00:50:55,730 --> 00:50:56,489 sino que 564 00:50:56,489 --> 00:50:59,949 mezclaba una cadena con un coma flotante 565 00:50:59,949 --> 00:51:01,090 entonces por eso nos daba error 566 00:51:01,090 --> 00:51:03,670 en cambio ahora lo que he hecho 567 00:51:03,670 --> 00:51:04,690 es que coge media 568 00:51:04,690 --> 00:51:09,869 que es coma flotante, le hago un casteo a una cadena de texto 569 00:51:09,869 --> 00:51:13,070 y ahora ya puede concatenar esta cadena de texto a esta cadena de texto 570 00:51:13,070 --> 00:51:15,670 y imprimirlo, que es lo que ha hecho aquí 571 00:51:15,670 --> 00:51:21,130 el casteo, y ya para acabar 572 00:51:21,130 --> 00:51:22,429 castear 573 00:51:22,429 --> 00:51:26,670 que es la conversión 574 00:51:26,670 --> 00:51:35,340 de un tipo a otro 575 00:51:35,340 --> 00:51:50,429 Lo veremos más adelante, pero la conversión de un tipo a otro se hace así. Se pone el tipo delante, que puede ser str, por ejemplo, o lo que queramos. Por ejemplo, vamos a convertir un entero a un float. 576 00:51:50,429 --> 00:51:55,389 se pone entre paréntesis y se pone el nombre de la variable 577 00:51:55,389 --> 00:51:57,449 imaginaos que hemos creado una variable 578 00:51:57,449 --> 00:52:00,889 que se llama nota 579 00:52:00,889 --> 00:52:03,530 igual a 580 00:52:03,530 --> 00:52:09,150 a dos, pero la hemos, veis, automáticamente la ha cogido como un entero 581 00:52:09,150 --> 00:52:13,090 si yo quiero transformar ese entero a un float, a un decimal, yo puedo poner nota 582 00:52:13,090 --> 00:52:17,429 aquí, entonces ¿qué estoy haciendo? cogeme la variable de nota y me la conviertes 583 00:52:17,429 --> 00:52:26,269 Eso lo veremos más adelante. Bueno, hasta aquí la videoconferencia del 14 del 10.