1 00:00:01,459 --> 00:00:11,140 Bueno, vamos a empezar con la unidad de trabajo 7, que va a verse básicamente sobre estructura, funciones y manejo de errores. 2 00:00:11,779 --> 00:00:17,519 Voy a hacer bastante cambio en funciones, que es lo que me parece más importante y más interesante que sepáis para lo que queda de curso. 3 00:00:20,219 --> 00:00:29,780 Bien, bueno, ahí he dejado varios elementos. Voy a recordar cosas relacionadas con listas y luego vamos a ver otros elementos que son muy importantes, 4 00:00:29,780 --> 00:00:36,880 que son las tuplas y los diccionarios. Luego hablaremos de funciones, del paso de parámetros, de los retornos de esas funciones, ¿vale? 5 00:00:37,219 --> 00:00:44,600 Y el ámbito de las variables, cosas que ya vimos en C, pero hay algunos matices ahora en Python, ¿vale? 6 00:00:44,780 --> 00:00:49,000 Y por último, pues el trabajo con excepciones y con ficheros. 7 00:00:49,820 --> 00:00:58,000 En cuanto a estructuras, ¿vale? Las tres estructuras principales de Python que vamos a destacar van a ser la lista, la tupla y el diccionario, ¿vale? 8 00:00:58,619 --> 00:01:02,759 Esto, la lista, no me voy a entretener mucho porque ya hemos hablado de ella, ¿vale? 9 00:01:02,799 --> 00:01:06,140 Es como si fuera un array, el concepto de array, de lo que tenemos de array, ¿vale? 10 00:01:06,379 --> 00:01:10,299 Ya dijimos que esto era de tamaño dinámico, que se podían mezclar tipos, etcétera, etcétera, ¿vale? 11 00:01:10,739 --> 00:01:12,260 Y luego tenemos una tupla. 12 00:01:12,379 --> 00:01:16,980 Una tupla es como una variable que tiene dos elementos, dos o más elementos. 13 00:01:16,980 --> 00:01:20,620 En este caso he puesto dos porque sería como una coordenada, ¿vale? 14 00:01:21,239 --> 00:01:25,700 Y que estos elementos no se pueden modificar, ¿vale? 15 00:01:25,739 --> 00:01:27,799 Son lo que se llaman inmutables, no se pueden modificar. 16 00:01:28,000 --> 00:01:39,980 Y luego, por último, tenemos el diccionario. Un diccionario, para que entendamos un poco lo que es, es como si fuera una variable que dentro de sí tiene diferentes características. 17 00:01:39,980 --> 00:01:51,280 Yo tengo una variable que se llama AP1 y dentro tiene varias características y un valor asociado a esa característica. Esta característica es lo que nosotros vamos a llamar clave. 18 00:01:51,280 --> 00:02:17,360 ¿Vale? Y asociado a esa clave habrá un valor. ¿Vale? Entonces vais a ver que yo voy a poder acceder a cada una de estas claves, ¿vale? Al valor de cada una de estas claves de forma independiente. ¿Vale? Eso tiene una conversión parecida en C, que sería una estructura, ¿vale? Que el problema de la estructura es que nos obliga una vez más a definir el tipo de dato, ¿vale? En el caso de Python no sería necesario. 19 00:02:17,360 --> 00:02:24,379 Vale, aquí os he dejado, esto es un recordatorio una vez más del uso de las listas, ¿vale? 20 00:02:24,460 --> 00:02:28,900 Pero como digo, no me voy a entretener porque esto lo hemos visto también en la unidad de trabajo anterior 21 00:02:28,900 --> 00:02:31,080 Y nos vamos a ir a las tuplas, ¿vale? 22 00:02:32,280 --> 00:02:38,560 Entonces, como veis aquí os he dejado una tupla, he creado una tupla que se llama canales, ¿vale? 23 00:02:38,560 --> 00:02:43,159 Que tiene, es como si fuera una lista, ¿vale? 24 00:02:43,159 --> 00:02:59,159 De tres elementos. El primer elemento, segundo elemento y tercer elemento, ¿vale? Y dentro de esa tupla hay otra tupla más, ¿vale? Una que tiene el elemento 1 y después una frecuencia asociada, el canal 6 y una frecuencia asociada, el canal 11 y una frecuencia asociada, ¿vale? 25 00:02:59,800 --> 00:03:12,020 Entonces, para acceder a una tupla nosotros accedemos exactamente igual que accedíamos a una raíz, ¿vale? Canales y entre corchetes de 0 y eso me va a devolver 1, y luego el otro elemento, ¿vale? La frecuencia. 26 00:03:12,020 --> 00:03:29,199 Yo también podría acceder únicamente a la frecuencia, ¿vale? Utilizando 0 y 1. Si quisiera acceder al canal, pues 0, 0, ¿vale? Pero como veis, yo no puedo modificar esos valores, ¿vale? Las tuplas no se pueden modificar, no tienen una utilidad para modificarse, ¿vale? 27 00:03:29,199 --> 00:03:45,979 Entonces, como veis aquí, vamos a utilizar una tupla, ¿vale? Cuando los datos sean fijos, por ejemplo, para unos parámetros de configuración o unos canales, ¿vale? Viendo esto ya podéis ver que en la práctica 2 podríamos haber hecho el uso de este tipo de elementos, de las tuplas, ¿vale? 28 00:03:45,979 --> 00:04:05,300 Bien, luego esas tuplas nosotros las podemos sacar y sí que podríamos trabajar con esas variables, ¿vale? Yo podría sacar, por ejemplo, la tupla 11.2.462 y el 11 se me guardaría en canal y esto se me guardaría en frecuencia. 29 00:04:05,300 --> 00:04:08,039 Y a partir de ahí yo podría trabajar sin ellos sin problema, ¿vale? 30 00:04:08,500 --> 00:04:10,620 Incluso podría hacer un bucle, ¿vale? 31 00:04:11,159 --> 00:04:19,720 Que sea num, que es decir, que las variables num y ghz de la tupla canales me vaya guardando esos elementos, ¿vale? 32 00:04:19,740 --> 00:04:22,680 Me vaya sacando esos elementos y en este caso me los vaya imprimiendo, ¿vale? 33 00:04:23,060 --> 00:04:28,060 Es decir, que yo sí puedo sacar los valores de las tuplas y manipularlos como yo quiera, 34 00:04:28,360 --> 00:04:31,720 pero sobre la propia tupla no puedo hacer, no puedo jugar, ¿vale? 35 00:04:31,759 --> 00:04:32,779 Eso se queda como está. 36 00:04:32,779 --> 00:04:53,699 En cuanto a los diccionarios, los diccionarios dan más versatilidad, ¿vale? Pero tienen una estructura muy fija, ¿vale? Aquí he creado un diccionario llamado AP, ¿vale? Donde he guardado, como veis, cuatro claves, ¿vale? SSID, RSSI, el canal y el cifrado. 37 00:04:53,699 --> 00:05:07,879 Y yo ahora puedo hacer acceso a su elemento y modificarlo. Para acceder, pues fijaros, yo pongo el diccionario y entre corchetes pongo la clave a la que quiero acceder y me devuelve, lo que me va a devolver es el contenido de esa clave. 38 00:05:07,879 --> 00:05:19,879 en este caso, y es pacífico, ¿vale? Puedo modificar el valor de cualquier clave, ¿vale? Yo puedo modificar el RSSI y donde antes había menos 62, ahora habrá menos 58, ¿vale? 39 00:05:20,220 --> 00:05:28,120 Y de la misma forma puedo añadir uno nuevo, ¿vale? Yo pongo una clave nueva, le doy un valor y me aparece, ¿vale? 40 00:05:28,120 --> 00:05:45,699 ¿Vale? Esta forma de acceder, ¿vale? Estas dos formas que os pongo de acceder a una clave puede dar error. ¿Por qué? Porque si yo pongo la clave mal, en vez de poner ese id, pongo ese id, me puede dar un error y decirme que esa clave no existe, ¿vale? 41 00:05:45,699 --> 00:06:04,699 Entonces hay una forma más segura de acceder que es utilizando APGET, ¿vale? Y aquí ese 0 es el valor que nos devuelve si no existe, ¿vale? Yo puedo crear o poner otra cosa, pero es lo que yo utilizaría para saber, bueno, pues si la SNR es 0 es que no existe SNR dentro de mi diccionario, ¿vale? 42 00:06:04,699 --> 00:06:14,000 Y luego para eliminar elementos tenemos dos formas, o utilizar del, que me borraría la clave y el valor descifrado, o utilizar pop. 43 00:06:14,339 --> 00:06:20,160 La diferencia entre uno y otro es que del me lo borra directamente y pop me lo saca y después lo borra, ¿vale? 44 00:06:20,399 --> 00:06:27,000 Entonces si yo por ejemplo quiero guardar el valor y ya borrarlo para que la lista ocupe, el diccionario ocupe menos, pues mirad, ahí tenéis una opción, ¿vale? 45 00:06:28,139 --> 00:06:32,639 Luego, ¿cómo podemos recorrer un diccionario? Pues podemos recorrerlo de tres formas diferentes. 46 00:06:32,639 --> 00:06:48,500 Podemos recorrerlo por su clave. Recordad que las claves son estas. Podemos recorrerlo por sus valores, que son estos. Estos son los values y estas son las keys. 47 00:06:50,180 --> 00:06:58,019 Y podemos recorrerlo directamente por el ítem. Pero por eso tendremos que poner aquí los dos elementos. Necesitaremos tanto clave como valor. 48 00:06:58,019 --> 00:07:19,519 Y así recorreríamos todos los elementos. También podemos jugar con condicionales y podemos decir si existe RSSI, es decir, si existe esta clave en el diccionario AP, imprímeme o imprímeme el valor del RSSI. 49 00:07:19,519 --> 00:07:41,160 Y aquí os he puesto que también se pueden hacer diccionarios de diccionarios. Es decir, guardar en un único diccionario que yo he llamado red, por ejemplo, dos puntos de acceso. Y ahí juego con una clave que es AP1 y otra clave que es AP2. Y el contenido, el valor de esa clave es a su vez otro diccionario. 50 00:07:41,160 --> 00:08:04,259 Y ahí veis la posibilidad de jugar con varios elementos. Ahí os he dejado un ejemplo de una comparativa, mejor dicho, entre lo que hemos visto, comparando también como base con el ArrayDC, que era el único elemento que tenemos, y luego tanto la lista, que ya hemos trabajado bastante con ella, la tupla y el diccionario.