Activa JavaScript para disfrutar de los vídeos de la Mediateca.
Videoconferencia Fundamentos Python 14_10 - Contenido educativo
Ajuste de pantallaEl ajuste de pantalla se aprecia al ver el vídeo en pantalla completa. Elige la presentación que más te guste:
Videoconferencia Fundamentos Python 14_10
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.
00:00:00
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.
00:00:23
Y empezaríamos tipos de datos, pero me quedaría ahí.
00:00:41
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.
00:00:43
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.
00:00:55
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.
00:01:08
algoritmo.
00:01:25
Ese programa informático tiene un lenguaje en el que estará
00:01:27
formado por una serie de elementos.
00:01:31
En el caso de Python vamos a tener instrucciones simples,
00:01:33
compuestas, identificadores constantes, tipos primitivos,
00:01:35
funciones, bueno, etcétera.
00:01:38
Lo veremos a lo largo del curso.
00:01:40
¿Qué preguntas se hacen aquí?
00:01:42
¿Por qué crees que es importante seguir una estructura clara y
00:01:44
ordenada al escribir un programa?
00:01:46
Pues de sentido común, pues porque si luego dejas ese
00:01:48
programa a otra persona, ese programa tiene que ser lo más legible, lo más posible para el que lo
00:01:53
pueda leer. Incluso para ti, si lo dejas un tiempo y luego tienes que retomarlo, pues si no lo has
00:01:59
realizado de una estructura clara y ordenada y bien comentado, pues difícil que luego puedas
00:02:04
entenderlo. ¿Qué diferencia hay entre almacenar un valor en una variable o simplemente escribir
00:02:09
ese valor directamente en el código? Bueno, lo veremos todo esto. ¿Cómo influye el tipo de
00:02:14
dato, en qué situaciones crees que sería útil convertir un dato a otro tipo y por qué crees que
00:02:18
los comentarios son importantes. Bueno, ya lo he dicho anteriormente, entonces básicamente un
00:02:24
programa informático tiene que ser una estructura clara y ordenada y finita, tiene que tener
00:02:28
comentarios, que esté comentado para que podamos saber qué se está realizando en cada paso de ese
00:02:37
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.
00:02:44
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.
00:03:10
¿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?
00:03:21
si recibimos un tipo texto y queremos hacer una operación matemática con ese tipo de texto porque es un número,
00:03:29
pues ahí tendríamos una justificación para transformarlo en un tipo de dato distinto que sería de texto.
00:03:35
¿Qué son las estructuras y bloques fundamentales en Python?
00:03:42
Normalmente en todos los lenguajes de programación, todas las estructuras, los bloques o los subbloques
00:03:45
se delimitan pues con alguna
00:03:52
palabra o con algún símbolo
00:03:56
en caso de Python no lo hace así, si ponemos un ejemplo
00:04:00
pues como puede ser Java para delimitar
00:04:04
una clase o delimitar un método se utilizan llaves de apertura
00:04:08
y cierre, aquí no se va a utilizar y lo que va a utilizar es la indentación
00:04:13
la tabulación de una línea con respecto a otra, el hecho de que una línea
00:04:16
esté tabulada con respecto a la superior, quiere decir que esa línea está
00:04:21
contenida dentro de ese bloque. Lo veremos más adelante. Por eso la
00:04:25
importancia de la indentación en Python. Nos habla aquí que para crear un
00:04:31
programa necesita de bloques bien estructurados, lógicamente, y se van a
00:04:37
estructurar o se van a ordenar en función de esa indentación.
00:04:41
Estructura y organización de Python, clave en las primeras fases del aprendizaje
00:04:46
Nos dice cosas de sentido común, que hay que ser organizado, que tienes que tener una coherencia lógica
00:04:51
Y una legibilidad en cuanto a la realización del programa
00:04:58
Esto nos habla aquí de la importancia de enseñar la estructura y la organización de un programa
00:05:04
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.
00:05:10
La comprensión progresiva, pues iniciar con ejemplos más sencillos y luego ir paulatinamente aumentando en dificultad.
00:05:31
Buenas prácticas, buenas prácticas, a qué le llamo aquí, pues, intentación, eso es muy importante
00:05:43
Que las constantes aparezcan en mayúsculas, nombres significativos a las variables, ya lo veremos
00:05:50
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
00:05:57
Facilidad de depuración, organizar claramente, si tú lo organizas todo de manera clara,
00:06:08
puedes detectar mejor los errores.
00:06:16
En un programa ordenado, bien comentado, podemos luego hacer una depuración del mismo
00:06:19
y poder encontrar un posible error con mayor probabilidad que si lo tenemos todo desordenado y destructurado,
00:06:25
aunque ese programa funcione igual.
00:06:33
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.
00:06:37
La transferencia de conocimientos, que es lo que aprendamos aquí en Python, ayudará a otros lenguajes y la motivación y confianza.
00:06:52
Aquí tenemos un ejemplo resuelto de Python. Veis cómo introduce los comentarios en Python.
00:06:59
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
00:07:09
y por lo tanto el compilador no va a ejecutar esta línea. Se la saltará porque sabe que es un comentario.
00:07:18
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.
00:07:25
la función se llama calcular
00:07:50
la función se define poniendo un def delante
00:07:54
de definition y luego tenemos el nombre de la función
00:07:56
y entre paréntesis el número de parámetros que tiene, aquí tiene dos parámetros
00:07:59
coge esos dos parámetros, los suma
00:08:02
los divide entre dos, o sea calcula su media y con el return
00:08:05
devuelve ese valor, o sea que fijaos no hace falta
00:08:08
poner el tipo de dato a devolver
00:08:11
va a retornar este
00:08:15
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.
00:08:17
que es el input para que podamos escribir algo por pantalla.
00:08:47
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.
00:08:50
Veremos en tipo de datos que los datos pueden ser enteros, pueden ser coma flotantes, que serían decimales, como float.
00:09:01
Bueno, veremos los tipos de datos. Pueden ser cadenas. Float es un tipo de dato decimal.
00:09:12
Entonces, él lo convierte a un decimal porque espera recibir un decimal a través del teclado.
00:09:17
Y una vez que ha recibido ese decimal, que hemos introducido por teclado, lo introduce dentro de nota 1.
00:09:22
La misma operación para nota 2.
00:09:28
Y después, aquí, esto es una expresión en la que crea otra nueva variable que se llama promedio.
00:09:31
Y en esa variable, ¿qué va a alojar? Va a alojar el resultado de la llamada a esta función.
00:09:35
¿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.
00:09:41
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.
00:09:48
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.
00:09:56
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.
00:10:05
Si no, imprime el estudiante, reprueba con promedio y el valor del promedio.
00:10:20
ahora en principio
00:10:25
pues nos va a sonar un poquito a chino
00:10:28
pero esto sería
00:10:29
un programa básico
00:10:31
luego lo hacemos en Visual Studio Code
00:10:33
hacemos uno parecido
00:10:35
y aquí nos está preguntando
00:10:36
¿qué aspectos de la estructura y la organización
00:10:40
del programa permiten que este ejercicio sea claro
00:10:41
coherente y fácil de ampliar en fases posteriores?
00:10:43
pues lógicamente
00:10:46
una serían los comentarios
00:10:47
una mayor organización
00:10:49
las variables que le ponen nombres
00:10:50
significativos la definición de la función que se separa lo que genera modularidad la
00:10:53
estructura condicional que está claramente diferenciada y bueno pues que el código es
00:11:00
bastante elegible y ordenado en cuanto a los elementos estructurales esenciales en un programa
00:11:03
en python vamos a tener estudios de control con condicionales bucles vamos a tener funciones que
00:11:11
lo hemos visto ahora, vamos a tener comentarios y en cuanto a los datos
00:11:16
tenemos aquí, vamos a tener dos tipos de datos, tanto los datos estáticos
00:11:22
como los dinámicos. Los estáticos serían los típicos de cualquier lenguaje
00:11:25
de programación, salvo los conjuntos, que esto no aparece en otro lenguaje
00:11:30
de programación, pero los arraes, las cadenas, los registros, los archivos
00:11:33
sí aparecen y luego los dinámicos que serían aquellos que se pueden
00:11:36
modificar en ejecución, que serían las lineales, no lineales. Lineales serían
00:11:41
las listas, las colas y las pilas, y los no lineales, que serán los árboles y los grafos.
00:11:45
Lo veremos.
00:11:49
¿Cuáles son los elementos estructurales de Python?
00:11:50
Pues las declaraciones.
00:11:52
Una declaración sería la declaración, por ejemplo, de una variable.
00:11:55
Primero, decir que una variable es un contenedor o un cajón, o como lo queramos llamar.
00:11:58
Ese contenedor tiene un nombre.
00:12:05
Dentro de ese contenedor vamos a guardar algo.
00:12:07
¿Y qué vamos a guardar?
00:12:09
un tipo de un dato que puede ser pues un cadena de texto puede ser un entero
00:12:09
puede ser un decimal eso es lo que es una variable variable en sí indica ya
00:12:15
que puede variar a lo largo del programa y vemos aquí que una declaración de una
00:12:20
variable pues sería el primero el nombre de la variable luego un igual y luego el
00:12:26
valor que va a tener en la asignación del tipo de dato a la variable lo hace
00:12:30
python de manera automática al hecho el hecho de poner aquí carlos ya no tengo que poner un tipo
00:12:35
de dato delante del nombre de la variable porque porque automáticamente vas a ver que de tipo texto
00:12:41
entonces nombre va a guardar una variable un valor de una de tipo texto a continuación lo imprime
00:12:49
poniendo la de comidas dobles y luego llamando a la variable nombre que por lo que pondrá hola carlos
00:12:57
También vamos a tener funciones, ya lo hemos visto antes, que se definían con def
00:13:01
Luego el nombre de la función y luego los parámetros que pueda alojar dentro de paréntesis
00:13:08
Podría estar esto vacío, apertura de paréntesis, cierre, si no tiene parámetros
00:13:15
Y si tiene parámetros, pues separados por comas
00:13:20
Después de llamar a la función, al llamar a la función lo que hace es que imprime hola
00:13:22
y el nombre que le ha pasado a través del parámetro en la función.
00:13:28
Esto nos va a permitir las funciones, nos va a permitir la programación modular,
00:13:33
separar partes del problema en distintos módulos.
00:13:39
En el divide y vencerás, o sea, cuando tenemos un problema complejo
00:13:44
y queremos dividirlo en varios problemas sencillos, lo podemos hacer de manera modular,
00:13:48
como repartiendo cada una de las tareas de esos subproblemas,
00:13:52
¿En qué? En funciones. Eso nos permite abstraer la complejidad de todo el problema en varias funciones o varios módulos,
00:13:56
de tal manera que luego vamos llamando a cada de esos módulos para resolver esos subproblemas.
00:14:06
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.
00:14:12
¿Qué quiere decir eso? Un flujo de un programa va desde arriba hasta abajo y va en una única dirección.
00:14:23
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,
00:14:31
posibilidad de dos caminos. Eso es lo que vamos a utilizar con el if.
00:14:39
El if, a través de una condición, como aparece aquí, va a decidir si va por un camino o va por otro.
00:14:43
¿Veis? Las dos palabras reservadas son el if, que sería sí en inglés, y el else, que sería si no.
00:14:50
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.
00:14:57
Entonces tenemos que si edad es mayor o igual que 18, pues entonces imprimirá eres mayor de edad.
00:15:06
Y si no, pondrá eres menor de edad.
00:15:11
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.
00:15:14
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.
00:15:30
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.
00:15:56
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.
00:16:11
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.
00:16:30
Bien, hemos visto todos los componentes estructurales, declaraciones, funciones, condicionales, bucles y módulos.
00:16:41
Y a continuación vamos a pasar a errores comunes al trabajar con los bloques estructurales en Python.
00:16:49
Bien, en Python es común cometer errores relacionados con los bloques estructurales.
00:16:58
Hay que hablar de la indentación, es muy importante.
00:17:05
aquí no aparece porque no aparece el tabulado
00:17:08
o sea, aquí si veis, este tiene el error de la indentación
00:17:12
¿por qué? porque este print tendría que estar tabulado hasta aquí
00:17:16
para identificar que esta línea o instrucción va
00:17:19
dentro del bloque del if, en la corrección sigue estando
00:17:24
igual, o sea que esto tendría que estar más hacia la derecha
00:17:28
tendría que estar aquí para que se fuera correcto, ese es uno de los problemas
00:17:32
principales en Python. La intentación nos va a dar error si no intentamos
00:17:36
porque no sabemos realmente si esta línea está y pertenece
00:17:40
a fuera del if o sea al programa principal o bien dentro
00:17:44
del propio if. Aquí no va a haber llave de apertura y cierre para identificar
00:17:48
que esta línea está dentro de este bloque if o no lo está. Solo la única
00:17:52
herramienta que tenemos es la intentación o que esté esa línea
00:17:56
tabulada hacia la derecha con respecto al if.
00:18:00
Otro de esos tipos de errores que aparece es no inicializar una variable
00:18:04
Por ejemplo aquí imprimir nombre y antes no se ha inicializado, no se le ha dado un valor a esa variable
00:18:09
Entonces no va a dar un error, tiene que estar definida esa variable
00:18:14
¿Veis? Aquí nombre le da el valor de Ana y luego pues ya lo imprime
00:18:17
Y por último definir funciones sin ejecutarlas
00:18:21
Fijaos aquí ha definido la función llamada saludar sin parámetros
00:18:24
¿Veis? Aquí no hay ningún parámetro
00:18:29
Que lo único que hace es imprimir hola mundo
00:18:30
¿Qué sucede? Pues que aquí nada sucede porque esa función no se ha llamado.
00:18:34
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.
00:18:38
Si tuviera un parámetro, pues se añade un parámetro que tiene que recibir.
00:18:44
Aquí no habría error porque la función se ejecuta correctamente.
00:18:49
Variables. Ya hemos visto lo que era una variable.
00:18:57
Una variable es un contenedor que tiene un nombre. En ese contenedor vamos a alojar algo.
00:18:58
Imaginaos una variable que alberga, por ejemplo, objetos personales.
00:19:03
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.
00:19:09
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.
00:19:20
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.
00:19:26
Si lo extraemos, ese ejemplo, lo extraemos a un lenguaje de programación como puede ser Python,
00:19:35
una variable es un contenedor que va a tener un nombre igual que lo que hablaba anteriormente,
00:19:41
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.
00:19:46
La variable, lógicamente, como el nombre propio lo indica, puede variar a lo largo del programa.
00:19:53
¿Por qué es importante enseñar el concepto de la variable?
00:20:02
La variable es, digamos, como un pilar fundamental de un programa para poder realizarlo.
00:20:05
Necesitamos ese contenedor para albergar valores que puedan cambiar a lo largo del programa.
00:20:13
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.
00:20:19
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.
00:20:39
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.
00:20:51
las características principales de las variables en Python
00:21:12
ya he dicho anteriormente que
00:21:22
tiene un tipado dinámico
00:21:24
que puede ir cambiando a lo largo del mismo
00:21:27
además el tipo es automático
00:21:30
lo genera propio Python
00:21:34
aquí tenemos algunas características de las variables en Python
00:21:36
tipado dinámico, ¿eso qué significa?
00:21:39
pues que el tipo de dato
00:21:42
normalmente en cualquier ángulo de programación
00:21:44
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,
00:21:47
vamos a ponerlo aquí, tipo de dato, luego teníamos a continuación el nombre, y luego igual, por ejemplo, y luego el valor.
00:22:09
así se hacía en java
00:22:20
entonces podríamos tener un
00:22:24
por ejemplo un
00:22:25
podríamos tener por ejemplo
00:22:27
podríamos tener un
00:22:35
int
00:22:38
que viene de
00:22:39
integer, entonces estamos diciendo que la variable
00:22:42
va a ser entera
00:22:44
por ejemplo le ponemos nota que sería
00:22:45
el nombre de la variable
00:22:48
el igual y luego por ejemplo un valor
00:22:50
de 10 y punto y coma, esto sería en java
00:22:52
pero que sucede en python
00:22:54
En Python lo que vamos a tener ahora es nada más que el nombre de la variable, igual y luego el valor.
00:22:56
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?
00:23:22
En Python puedo poner nombre, que sería el nombre de la variable, igual a Carlos.
00:23:29
Fijaos, ya en Python, esto sería en Python y esto sería en Java.
00:23:42
Fijaos la diferencia, en Python necesita siempre poner el tipo de dato,
00:23:53
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.
00:23:58
Por ejemplo, si yo quisiera hacer esto en Java, en Java necesitaría decirle el tipo que va a utilizar, por ejemplo, stream.
00:24:14
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.
00:24:25
entonces es una
00:24:40
¿veis? la asignación es directa
00:24:43
no es necesario declarar una variable antes de usarla
00:24:46
¿veis? la podemos asignar de manera
00:24:48
directa y
00:24:50
la variable se asigna automáticamente
00:24:51
¿eso qué quiere decir que se asigna automáticamente?
00:24:54
pues que si tenemos
00:24:56
por ejemplo nombre es igual a Carlos
00:24:57
si yo a continuación
00:24:59
a nombre
00:25:01
le pongo
00:25:03
el valor de 2
00:25:05
pues automáticamente
00:25:08
é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.
00:25:09
Scale sensitive, que quiere decir que no es lo mismo poner el nombre de la variable así que ponerlo así.
00:25:21
Nombre con la primera letra mayúscula y con la segunda minúscula, o sea, con la primera mayúscula.
00:25:31
mayúscula. Esta variable y esta variable son distintas. ¿Por qué? Porque es case sensitive,
00:25:36
que quiere decir que distingue mayúsculas de minúsculas. Por tanto, esta variable,
00:25:50
como empieza con una N mayúscula, sería diferente a esta otra. Estas dos serán diferentes.
00:25:55
Por ejemplo, ponemos aquí. Mutabilidad. El valor puede cambiar durante la ejecución,
00:26:00
Ya lo he dicho, ¿veis? Contador puede ser igual a cero y en otro instante puede ser un valor de uno.
00:26:08
Ámbito o scope, depende del ámbito, si es global o local. Esto lo veremos más adelante.
00:26:14
Local sería, por ejemplo, dentro de una función. Fuera de la función, esa variable dejaría de existir.
00:26:19
En cambio, global sería para todo el programa.
00:26:23
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.
00:26:27
Entonces, esta sería de ámbito local.
00:26:34
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.
00:26:37
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.
00:26:47
Hemos generado o definido tres variables de una atacada en una sola línea.
00:26:58
Y referencia de objetos, la variable mcna es una referencia en un valor directo.
00:27:04
Ya lo veremos.
00:27:08
Aquí tenemos una lista que se define entre corchetes, con dos valores.
00:27:09
Y lo que hace es que igual genera otra variable llamada lista2
00:27:13
que crea una referencia a la lista1.
00:27:16
Ya veremos qué es eso más adelante.
00:27:19
¿Errores comunes al trabajar con variables en Python?
00:27:25
Pues los errores ya los hemos visto anteriormente en la mayoría de ellos.
00:27:29
Errores comunes al trabajar en Python es confundir mayúsculas por minúsculas, porque es case sensitive.
00:27:33
No lo mismo esta variable edad, que empieza por E mayúscula, que esta variable edad, que empieza con E minúscula.
00:27:37
Estas son dos variables diferentes.
00:27:44
Usar variables sin inicializar.
00:27:46
No puedes imprimir resultados si no has definido antes qué tiene resultado, qué contiene resultado.
00:27:49
Sobrescribir variables importantes.
00:27:55
importantes. Cuidado con sobreescribir variables. Yo puedo escribir al principio
00:27:56
x igual a 5 y luego escribir x igual a hola. Fijaos, este ejemplo.
00:28:00
Fijaos, este ejemplo. ¿Qué es lo que hace aquí? Primero define la variable x con un
00:28:15
valor de 5. Después vuelve a poner x igual a hola. Entonces ahora x ¿qué vale?
00:28:31
Esto se llama sobreescribir la variable porque a x la habíamos definido con un
00:28:38
valor y después la definimos con otro valor. Estamos sobrescribiendo esta
00:28:43
variable y está perdiendo su valor de 5 y ahora tiene un valor de hola
00:28:47
y además ha cambiado hasta el tipo. Ahora es de tipo texto.
00:28:51
Esto puede generar un error porque luego al imprimir x más 2
00:28:55
en vez de salir 7, porque si hubiera sido un
00:28:59
valor entero, aquí cogería el 5 más 2, 7, imprimiría el valor de 7.
00:29:03
Ahora lo que va a imprimir, ¿qué sería? Generaría un error
00:29:08
porque hola es un texto y no se puede sumar al valor de 2.
00:29:11
Otra confusión es el alcance o scope.
00:29:17
Cuidado con el scope dentro de una función, una variable.
00:29:19
Fijaos aquí, esta otra.
00:29:25
Fijaos esta.
00:29:42
Esto es una función que acabo de definir.
00:29:44
Vamos a ponerla aquí para que la veáis mejor.
00:29:48
Y tenemos tabulado esto.
00:29:50
¿Esto qué quiere decir?
00:29:52
vamos a tablarlo menos para que no quede así
00:29:53
fijaos, esta es la función
00:29:56
y la función, el contenido de la función es esa línea
00:29:58
porque está tabulada, veis, ahí no hay dentación
00:30:01
esto es lo mismo que parecería, por ejemplo, en Java
00:30:04
en el que una función en Java, pues podríamos poner aquí
00:30:06
una llave de apertura
00:30:10
una función y una llave de cierre
00:30:12
esto, una función, pues por ejemplo
00:30:16
en Java, por ejemplo
00:30:29
esto sería una función de Java
00:30:31
¿veis? tiene una llave de apertura y una llave de cierre
00:30:38
y luego las líneas que hay dentro del método
00:30:40
en cambio
00:30:42
en Python no es así
00:30:43
en Python
00:30:46
si quiero hacer esta, bueno
00:30:47
como es una sumar
00:30:49
sí, vamos a dejarla así
00:30:52
en Python no es así
00:30:54
vamos a ver para que veáis
00:30:56
esto lo voy a quitar
00:30:58
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.
00:31:01
No tiene llaves, sería a través de dos puntos y no tiene ninguna llave.
00:31:12
Lo que indica cuáles son las líneas que están dentro del método sería esta porque está indentada, ¿lo veis?
00:31:17
En cambio esta otra al no estar indentada, ¿qué estaría? Estaría fuera del ámbito de esa función.
00:31:24
¿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.
00:31:30
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.
00:31:51
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.
00:32:14
¿Qué sucedería si quisiéramos imprimir el valor de 10? Pues tendríamos que meterla dentro del método
00:32:34
la tendríamos que intentar y ahora estas dos líneas estarían dentro
00:32:42
¿Y qué imprimiría el programa? Pues imprimiría el valor de 10
00:32:46
Bueno, esto lo veremos más adelante
00:32:50
Reutilizar también nombres de funciones y librerías
00:32:53
Bueno, reutilizar pues, veis aquí, es nombrar una variable igual que una función integrada dentro de una librería
00:32:58
Bueno, ya lo veremos lo que es
00:33:07
Veis aquí, lo que ha hecho es utilizar una lista en la que tiene tres valores
00:33:10
Y luego imprime esa lista
00:33:15
Esto lo veremos
00:33:20
Se utiliza para evitar usar nombres reservados de Python
00:33:22
entonces realmente es nombrar una variable igual que una función integrada o librería
00:33:27
lo veremos más adelante
00:33:32
y nos llegamos al tipo de datos que voy a parar aquí
00:33:33
lo único que quiero que veáis que los datos van a indicar qué clase de información estamos barajando o utilizando
00:33:39
el intérprete lo va a asignar el tipo de dato de manera automática
00:33:47
y entonces, aún así, el ordenador tiene que reconocer o diferenciar y aplicar los distintos tipos de datos.
00:33:51
En otros lenguajes de programación está más claro, pero aquí, como lo hace automáticamente,
00:33:58
pero aún así tenéis que saber que los tipos de datos son estos que aparecen aquí.
00:34:04
Vamos a tener tipos de datos enteros, que sería el INT, viene de Integra en inglés,
00:34:08
Float, que serían los coma flotante o los que son decimales,
00:34:13
STR para las cadenas de texto
00:34:16
y luego tenemos BUL para valores
00:34:19
booleanos, en el que
00:34:21
puede tener solo dos valores, 0 o 1
00:34:23
o TRUE o FALSE
00:34:25
En cuanto a tipos de datos
00:34:26
solo enseñar esta
00:34:30
foto y con
00:34:33
esto lo dejamos aquí y hacemos un
00:34:35
programa. Veis que los tipos
00:34:37
de datos, vamos a tener los enteros
00:34:39
luego
00:34:41
los float, que serán todos los
00:34:43
Los decimales, los de tipo cadena booleanos, que eran true o false o 0-1, los de tipo cadena y los complejos.
00:34:45
Los complejos luego veremos cuando avancemos más en el lenguaje Python, veremos lo que son los tipos de datos complejos.
00:34:53
Y luego tenemos la conversión de tipos.
00:35:03
Podemos convertir un tipo en otro, como lo podemos hacer.
00:35:05
Y luego estos valores pueden generar expresiones a través de los operadores.
00:35:08
Aquí tenemos todos los tipos de datos que se pueden utilizar en Python.
00:35:15
Lo vemos y ya hacemos el programa.
00:35:22
Tenemos los enteros que vienen con la palabra int, que proviene de integer.
00:35:25
Esos son números sin decimales, que son los números en matemáticas, los números enteros.
00:35:31
Los números enteros, por ejemplo, fijaos, yo puedo declarar una variable edad y llamarle igual a 20.
00:35:37
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.
00:35:41
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.
00:35:54
automáticamente el python le asigna el que un tipo flotante o flow at las cadenas de esto vienen con
00:36:08
str y sencillamente van entre comillas dobles veis el nombre igual a ana entre comillas dobles y eso
00:36:18
está indicando que ya va a ser una cadena de texto a continuación aquí le pone imprimir hola más la
00:36:25
la variable nombre y entonces pondrá hola a Ana.
00:36:33
Obviamente ya nos ha dicho que solo pueden tener dos valores,
00:36:37
que sean true o false, o 0 o 1,
00:36:39
y veis aquí que pone a la variable activo,
00:36:42
le da el valor de true,
00:36:44
cuidado con que tienen que ir en mayúscula,
00:36:46
en la T y la F de true o false,
00:36:48
y después lo utiliza, por ejemplo, en un condicional,
00:36:52
dice si activo, o sea, si true, si es verdadero,
00:36:54
pues imprime usuario activo,
00:36:58
lógicamente está en el programa, imprimirá usuario activo.
00:36:59
Las listas son colecciones ordenadas y mutables de elementos, son elementos ordenados de manera correlativa y que se meten entre corchetes cuando se definen.
00:37:03
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.
00:37:17
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.
00:37:24
Una lista en Python sería un ejemplo como el que aparece ahí.
00:37:33
Por ejemplo, números igual a 1,2,3,4.
00:37:50
Esta lista tiene cuatro números.
00:38:03
Vienen entre corchetes.
00:38:08
Estas son listas en Python.
00:38:09
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.
00:38:13
cada posición siempre empieza desde el 0
00:38:35
con lo cual si yo quiero llamar al elemento número 2 de la lista
00:38:38
yo tendría
00:38:43
quiero llamar al elemento número 2 de la lista
00:38:44
para imprimirlo yo tendría que poner un print
00:38:48
y tendría que imprimir el key
00:38:51
para imprimirlo tendría que llamar a la lista
00:38:54
cuidado con los tildes a la hora de definir variables
00:38:57
Si yo quiero imprimir el elemento tercero, pues su posición cuál es, es la posición 2
00:39:00
Siempre el orden de las posiciones empieza en el 0
00:39:10
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
00:39:15
Por lo tanto, el 3, ¿en qué posición está? En la posición 2
00:39:20
Si yo quiero imprimir el elemento 3 de la variable números de esa lista, tendría que poner números
00:39:23
y luego entre corchetes la posición de ese número, que sería la posición 2.
00:39:29
¿Esto qué nos imprimiría? Esto nos imprimiría el valor de 3.
00:39:35
Se pone para poder llamar a uno de los elementos de esa lista la variable
00:39:40
y dentro de corchetes la posición del elemento que queremos imprimir.
00:39:45
Como en caso, si quisiéramos imprimir el número 2 de esta lista,
00:39:50
el número 2, tendríamos que poner la posición número 1.
00:39:55
luego tenemos las tuplas
00:39:59
las tuplas que son
00:40:04
estamos hablando ya como
00:40:05
son colecciones
00:40:07
pero estas ya son
00:40:10
mientras que las listas eran
00:40:12
mutables, o sea pueden variar, estas son
00:40:14
inmutables, lo veremos más adelante
00:40:16
una lista se define
00:40:18
a través de paréntesis, separados
00:40:20
por comar los elementos
00:40:22
ser tupla, pues lógicamente tiene dos
00:40:23
valores, esto puede
00:40:26
ser representado por ejemplo la coordenada de un punto
00:40:29
aunque tiene dos valores, sería una tupla.
00:40:31
Diccionarios en estructuras de clave-valor, ¿qué quiere decir eso?
00:40:33
Pues que se van a estas de clave-valor, serían este tipo, lo voy a poner aquí.
00:40:36
Estos serían los diccionarios y tenemos aquí el diccionario, vamos a ponerlo en grande.
00:40:50
¿Veis? Tenemos clave-valor, esta sería la clave y esta sería el valor.
00:41:06
¿Veis? Son de tipo texto, entonces el usuario y se pone entre llaves.
00:41:14
¿Veis? Para la clave nombre, el valor es Ana.
00:41:19
Se separan por dos puntos.
00:41:24
Luego, el siguiente clave valor, separado por una coma, sería para edad, el valor sería 20.
00:41:25
Si luego yo quiero imprimir uno de los valores de esta variable usuario,
00:41:31
los tengo que imprimir llamándolos a través de la clave.
00:41:36
¿Cuál es la clave? Nombre.
00:41:40
Si yo llamo a usuario, entre corchetes, nombre, ¿qué va a imprimir? Imprimirá Ana.
00:41:41
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.
00:41:49
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.
00:41:58
Veremos también para qué se utilizan los conjuntos.
00:42:06
Bien, y hasta aquí el comienzo de tipo de datos.
00:42:09
En la siguiente clase volveré a repasar esto para que nos quede más claro porque es importante y continuaré con la unidad.
00:42:13
¿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.
00:42:21
Lo primero que he hecho, he creado una carpeta donde he querido, en mi escritorio o donde queráis,
00:42:30
donde voy a guardar mis archivos de Python.
00:42:36
Se supone que ya lo tenéis configurado esto, en el que tenéis instalado la fibrería de Python, etc.
00:42:40
Una vez que ya habéis seguido la instalación que os he puesto en el aula virtual.
00:42:47
Bien, entonces una vez que lo tenemos, damos a abrir y abrir carpeta.
00:42:54
Al abrir carpeta, pues entramos en una carpeta, en mi caso serían primeros programas, que serían mi carpeta.
00:43:00
Si veis que aquí aparece un símbolo de nuevo archivo.
00:43:06
Tenéis que darle si queréis generar un nuevo archivo.
00:43:11
Yo tengo ya aquí uno creado, nombre Py, pero al darle, pues yo puedo ponerle, pues, saludo, que sería mi fichero,
00:43:14
pero siempre poniendo la extensión .py para que sepa que vamos a realizar un programa en Python.
00:43:22
Al darle ya tendría mi propio archivo y ya podría escribir aquí el código.
00:43:27
Tan solo voy a hacer un programa sencillo, vamos a pedir como el que aparecía en el propio ejemplo del aula,
00:43:34
vamos a hacer un programa en el que pedamos dos notas A a través del teclado y luego calculamos la media.
00:43:44
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.
00:43:51
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.
00:44:10
eso es lo que vamos a hacer, vamos a pedir una nota por teclado
00:44:38
ya hemos visto que input
00:44:41
la operación input que ya aparece aquí
00:44:43
veis, input
00:44:45
yo le puedo poner aquí una cadena
00:44:47
por ejemplo, dame
00:44:48
la primera nota
00:44:51
esto lo que va a hacerme
00:44:53
es, va a escribir en pantalla
00:44:57
dame la primera nota y a continuación va a aparecer un cursor
00:44:59
parpadeante como este que aparece aquí
00:45:01
pero el cursor parpadeante va a aparecer
00:45:03
aquí al lado, va a aparecer aquí
00:45:05
para que nosotros por teclado la escribamos.
00:45:06
Bien, como queremos que en recibir un valor decimal
00:45:09
tenemos que pasar lo que venga de esta petición o de este input,
00:45:15
tenemos que convertirlo a un valor flotante o un valor decimal.
00:45:22
Esto es un casting para transformar un tipo de dato que recibimos
00:45:31
porque a través del teclado
00:45:36
lo vamos a recibir como una cadena de texto
00:45:38
si lo queremos convertir a un float
00:45:39
se pone por delante el tipo
00:45:41
entre paréntesis se cubre
00:45:43
entre paréntesis se pone el tipo por delante
00:45:45
lo veremos más adelante
00:45:46
lo que sepáis que esto nos sirve
00:45:47
para que el valor que recibamos
00:45:49
a través del input
00:45:53
este input lo que va a permitir
00:45:53
es que yo pueda escribir por pantalla
00:45:55
a través del teclado algo
00:45:58
ese valor va a aparecer
00:46:00
lo va a recibir como un tipo texto
00:46:02
y le ponemos un float adelante
00:46:04
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.
00:46:06
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.
00:46:17
Y ya lo tendríamos. Ahora hacemos lo mismo, pero para la nota2.
00:46:27
Pedimos por teclado la segunda nota y la almacenamos en la variable nota 2.
00:46:38
Esta línea es exactamente la misma y ya tendríamos nota 2.
00:46:46
Con esto ya tendríamos dos notas que hemos recibido por teclado.
00:46:50
Y ahora, ¿qué quedaría? Calcular la media.
00:46:54
Vamos a calcular de dos notas.
00:46:56
Para calcular la media tendremos que crear otra variable que la vamos a llamar media.
00:47:06
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.
00:47:10
¿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.
00:47:24
Calculamos la media y el valor de la suma de las notas partido de 2 lo va a meter dentro de la variable media.
00:47:33
Y ya lo único que nos quedaría es imprimir la media.
00:47:39
Pondremos aquí imprimir el valor de la media.
00:47:45
Entonces aquí pondríamos un print.
00:47:52
Print es una función que no va a permitir imprimir en pantalla y que requiere un parámetro.
00:47:54
Este parámetro es una cadena de texto.
00:48:03
pondríamos la media es
00:48:06
y a continuación le podemos añadir un valor de más
00:48:09
este operador más lo que va a hacer es que va a concatenar cadenas
00:48:15
la cadena de la media es le va a concatenar con la cadena de la variable que queremos imprimir
00:48:17
a ver, el paso es el siguiente
00:48:23
primero coge media y ve que es un valor decimal
00:48:25
pero al meterlo aquí dentro y concatenarlo a esta cadena
00:48:28
lo convierte a cadena y al final todo esto va a ser una cadena
00:48:32
que la media es y el valor decimal que se obtiene de la media, pero pasado a un tipo cadena.
00:48:35
Esto si le damos a ejecutar, nos pide la primera nota, le damos un valor de 2,4, cuidado hay que ponerlo con puntos,
00:48:44
si lo pones con coma nos dará error, y vamos a poner un 8,6 y él te calcula la media.
00:48:58
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.
00:49:03
bien, el hecho
00:49:32
no te lo ha convertido
00:49:35
a una cadena de texto y el te lo está diciendo
00:49:37
que no puede hacer, porque
00:49:39
no está diciendo el error
00:49:41
puedo solo concatenar una cadena
00:49:43
con otra cadena, pero no una cadena
00:49:45
con un float, no te lo convierte
00:49:48
automáticamente como pasaba en Java
00:49:49
¿vale? si yo pusiera aquí
00:49:51
media, imaginaos, voy a poner
00:49:54
lo mismo, pero ahora vamos a ver si nos funciona
00:49:56
y lo convierto
00:49:58
a str
00:49:59
R para convertir una variable
00:50:00
de un tipo a otro. ¿Veis? Se pone entre paréntesis como hacíamos aquí
00:50:04
el contenido y se le pone delante el tipo al que queremos compartir, al que
00:50:08
queremos convertir. ¿Veis? Estoy haciendo que se convierta en una cadena de texto. Vamos a ver
00:50:12
si ahora funciona. Vamos a borrar esto para que no...
00:50:16
Vamos a borrarlo.
00:50:29
Vamos a rebutarlo.
00:50:35
y vamos a ver si ahora si nos da bien
00:50:36
le ponemos el valor de primera nota
00:50:39
2,4 y le ponemos
00:50:41
8,4 y veis
00:50:43
nos da bien, ¿por qué? ¿qué es lo que he hecho?
00:50:45
antes media
00:50:48
era un valor float
00:50:49
entonces si yo se los concadenaba
00:50:51
la media es, no te lo convertía a cadena
00:50:53
sino que
00:50:55
mezclaba una cadena con un coma flotante
00:50:56
entonces por eso nos daba error
00:50:59
en cambio ahora lo que he hecho
00:51:01
es que coge media
00:51:03
que es coma flotante, le hago un casteo a una cadena de texto
00:51:04
y ahora ya puede concatenar esta cadena de texto a esta cadena de texto
00:51:09
y imprimirlo, que es lo que ha hecho aquí
00:51:13
el casteo, y ya para acabar
00:51:15
castear
00:51:21
que es la conversión
00:51:22
de un tipo a otro
00:51:26
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.
00:51:35
se pone entre paréntesis y se pone el nombre de la variable
00:51:50
imaginaos que hemos creado una variable
00:51:55
que se llama nota
00:51:57
igual a
00:52:00
a dos, pero la hemos, veis, automáticamente la ha cogido como un entero
00:52:03
si yo quiero transformar ese entero a un float, a un decimal, yo puedo poner nota
00:52:09
aquí, entonces ¿qué estoy haciendo? cogeme la variable de nota y me la conviertes
00:52:13
Eso lo veremos más adelante. Bueno, hasta aquí la videoconferencia del 14 del 10.
00:52:17
- Idioma/s:
- Materias:
- Informática
- Niveles educativos:
- ▼ Mostrar / ocultar niveles
- Formación Profesional
- Ciclo formativo de grado superior
- Primer Curso
- Segundo Curso
- Autor/es:
- Francisco José González Constanza
- Subido por:
- Francisco J. G.
- Licencia:
- Todos los derechos reservados
- Visualizaciones:
- 3
- Fecha:
- 15 de octubre de 2026 - 9:49
- Visibilidad:
- Público
- Centro:
- IES CIFP a Distancia Ignacio Ellacuría
- Duración:
- 52′ 41″
- Relación de aspecto:
- 1.78:1
- Resolución:
- 1920x1080 píxeles
- Tamaño:
- 315.84 MBytes