Curso Python

y lo primero que voy a hacer dentro de este curso de payton es daros una perspectiva general de qué es lo que vamos a hacer y qué es lo que vamos a aprender lo que he hecho es sacar este programa que se llama free mind que es para hacer mapas mentales no requiero que tengáis este programa instalado pero yo sí que os recomiendo que os lo descargues para vuestro uso personal es decir para plasmar ideas de en forma de mapas mentales entonces en un curso de programación parece que lo más estándar sería empezar abriendo una hoja en blanco y empezando a aplicar el código vale y de hecho es ahora luego evidentemente lo vamos a hacer pero antes de hacer eso lo que quiero es que entendamos un poco qué es lo que vamos a hacer en el curso y cuál va a ser nuestra perspectiva general de cómo trabajar con un lenguaje de programación entonces por una parte y aquí voy a poner python y aquí dentro lo que voy a hacer es poner por una parte el lenguaje de programación y los llamemos los extras entonces dentro del lenguaje de programación vamos a aprender varias cosas por una parte evidentemente empezaremos hablando las y la sintaxis y el entorno inevitable para empezar cualquier tipo de formación a continuación vamos a hablar de estructuras de datos las estructuras de datos son lo que conoceremos por ejemplo como variables lo que en otros lenguajes serían matrices pero que en python vamos a conocer como listas o colecciones vale son en definitiva grupos de datos o contenedores de datos a continuación hablaremos de estructuras de control técnicamente el nombre largo es estructuras de control del flujo de la ejecución pero voy a decir estructuras de control para simplificar dentro de esas estructuras de control hablaremos de que hay estructuras de control condicional de si esto es cierto haz esto y si es falso haz esto otro y hay estructuras de control de bucle de tu ves haciendo algo hasta que yo diga que pares y luego a partir de ahí hablaremos de cosas más avanzadas tales como por ejemplo programación con funciones hablaremos de orientación a objetos centro hablaremos de algo que yo personalmente considero básico en cualquier lenguaje de programación como es la persistencia y la persistencia la trabajaremos con lectura y escritura de archivos de texto plano y bases de datos persistiendo por ejemplo en mysql y en ese culito y ahora explico un poco todo esto de la misma forma que cuando te enseñan a conducir no te enseñar a conducir un coche concreto realmente están enseñando a conducir cualquier tipo de coche este es un curso de payton y vamos a aprender python y ningún otro lenguaje que no sea python pero también lo que quiero es establecer cuáles son los bloques del lenguaje de programación que realmente son comunes a prácticamente cualquier lenguaje de programación vale vamos a hacer a continuación entonces y con esto empezó a grabar el siguiente bloque que va a preguntar vosotros me hagáis ale yo voy continuando la formación entonces porque esas bases de datos por nada en particular es decir vamos a ver está claro que dentro de bases de datos a día de hoy podríamos agruparlas en bases de datos de tipo sql y en bases de datos de tipo no sql que originalmente quería decir que eran no sql pero luego relajaron un poco el término y pasaron a decir que es not only sql para que son bases de datos que no tienen porqué estar basadas en sql sino que pueden estar basadas en otros tipos de gestión de la información gestión documental por archivos o lo que sea realmente el por qué esas bases de datos sino otras realmente python se puede conectar con cualquier base de datos prácticamente me dan igual estas bases de datos que cualquier otra realmente lo que me importa es esto es ese concepto lo que me importa es el concepto de persistencia porque también te digo qué he puesto archivos como una categoría aparte de base de datos cuando podríamos argumentar y aquí podríamos entrar en un debate filosófico informático de qué es una base de datos o que no lo es entonces hay gente que argumenta que guardar algo en un archivo no es una base de datos y hay gente que argumenta que los archivos realmente son un tipo de base de datos llamado la troupe el perdón llamado flat file que son bases de datos que se almacenan en archivos de la misma forma que técnicamente sqlite guarda la información en un archivo estructurado eso sí y de la misma forma que mysql al final aunque tiene un sistema de gestión de base de datos por encima pero al final guarda la información en x archivos en el disco duro o sea que al final hay archivos pues digo que tampoco es mi intención iniciar un debate acerca de por supuesto en ningún en ningún caso está cerrado a estas bases de datos pero sobre todo lo que lo que quería un poco dejar claro de cara importancia es que no quiero dar un curso en el que cuando arrancamos un programa y lo cerremos toda la información que ha gestionado este programa se pierda sino que también ese programa sea capaz de persistir que es el concepto que para mí es importante que toda la información que maneje ese programa tanto de entrada como de salida es decir de entrada el programa pueda adquirir datos y de salida puedan guardar esos datos y el soporte que sea y cuando digo el soporte que sea también lo que os digo es que en persistencia en archivos no solo quiero ser capaz de guardar información en un archivo de texto sino que también quiero ser capaz de leer y de escribir imágenes en el disco duro por ejemplo para hacer un programa en python que sea capaz de leer el contenido de un jpg y por ejemplo que diría yo por ejemplo una imagen y calcular el inverso del píxel y guardarlo en otra imagen pero es que realmente lo que se guarda en una imagen al final es información con lo cual podríamos utilizar una imagen para guardar información no digo que lo vayamos a hacer porque no es particularmente cómodo parece más algo de una peli de espías que de que de un curso de programación pero quiero decir es que técnicamente se puede hacer y a continuación es cuando vamos a hablar de los extras entonces en la parte de extras es cuando en primer lugar evidentemente vamos a hablar de interfaces de usuario en principio el curso está pensado para verlo con teca inter que es la librería de desarrollo de interfaces gráficas que lleva por defecto python lleva a otras pero cuando instalas python hablaremos de la instalación la que viene por defecto es esta y a partir de estos extras es cuando hablaremos de otras cosas tales como por ejemplo librerías o sea como python es extensible como el uso de librerías llegado a este punto en tanto en el fundamento del lenguaje de programación como interfaces de usuario parece que el curso estará orientado al desarrollo de aplicaciones de escritorio con o sin interfaz de usuario pero sin embargo también veremos librería http o en definitiva el cómo crear aplicaciones con python para el lado del servidor de una aplicación web evidentemente no el lado del cliente porque la del cliente se hace mayormente con html css y con javascript pero si el lado del servidor también para que veamos qué podemos hacer aplicaciones web mediante python y según vuestros intereses también os lo digo porque eso es lo que he insistido muchísimo en la convocatoria del curso en la importancia de que podáis asistir en directo a esta formación es pues a lo largo de las clases iros oyendo y saber cuáles son vuestros intereses y también ir moldeando esa parte de extras en base a los intereses que vosotros tengáis con respecto a payton una cosa que siempre quiero dejar muy clara es que ahora pasamos a la siguiente ronda de preguntas pero es y esto es algo que a veces a la gente sorprende es la diferencia entre el lenguaje de programación e interfaz de usuario y es que cuando uno se aproxima por primera vez al lenguaje de programación y a la preguntaría acerca de cuáles son cuál es vuestro background en lenguajes de programación parece que un programa es cuando abres una ventanita y tocas botones y eso no es un programa informático eso es la interfaz de usuario de un programa informático los programas informáticos de verdad son los que ejecutan tareas tengan interfaz o no la tengan vale pero sí que hay que diferenciar entre lo que es un programa y lo que es la interfaz de usuario del programa pero también os digo que hay veces que cuando estoy a la gente se le hace muy duro porque dice eso lo vamos a hacer de aplicaciones de consola porque quiero entiendo y ya os digo a las preguntas de repuesto va que aún pero cuando la gente viene con conocimientos con base con fundamentos de otros lenguajes de programación entiende esto mucho mejor pero cuando la gente no ha programado nunca la gente suele decir ya vale entiendo pero hace una ventanita se ilusionan un poquito crea algo bonito en la pantalla y luego ya me cuentas lo que quieras vale entonces dentro de esta dentro de esta estructura a continuación voy a hacer lo siguiente y ahora ya nos meteremos en un momento con el propio lenguaje de programación contenido del curso vamos a ver cómo se relaciona a payton con respecto a otros lenguajes de programación entonces sabéis que hay una categorización de lenguajes de programación que son los lenguajes de alto nivel y son los lenguajes de bajo nivel esto lo habíais oído alguna vez preguntó correcto vale igual daniel sí que lo habías oído en cuanto a que probablemente te han dicho que temas más es un lenguaje de bajo nivel y java es un lenguaje de alto nivel cuidado porque esta categorización cuando no te han explicado nunca da una sensación equivocada porque parece que bajo sea malo y parece que alto sea bueno y no tiene por qué ser así entonces tampoco me voy a enrollar mucho con historia de la informática porque aparte de sólo podéis consultar por ahí en la wikipedia grave pero vosotros sabéis que si no os puedo pasar documentación sabéis que en los años 50 y 60 se programaba de forma que el programador deniegue conocer prácticamente cómo pensaba la máquina por dentro vale eso es lo que se llama bajo nivel porque el programador tiene que bajar hasta abajo para el programador tiene que pensar cómo piensa la máquina como lenguajes de muy bajo nivel evidentemente tenemos el lenguaje binario el lenguaje más bajo que hay es decir él 10 tenemos el lenguaje binario es impracticable prácticamente para un ser humano tenemos un lenguaje llamado ensamblador donde aparecen una serie de palabritas mnemotécnicas para que un programador pueda programar algo que no se muera en el intento el programa del ensamblador tiene una serie de dificultades pero es divertido cuando le coges el rollo y luego en un momento dado bueno daniela levanta la ceja cuando le y en bajo nivel en el año 69 aproximadamente aparece un lenguaje de programación que este no es el primer lenguaje que aparece de hecho que sepáis que es el lenguaje que se llama hace es porque hay otro anterior que sabe vale no es cierto es real pero el lenguaje de programación c es un lenguaje que nace para hablar de una forma más humana para que un ser humano no tenga que morirse para hacer un en el año 86 se estandariza el lenguaje venía de antes el lenguaje más más que es un lenguaje que en semanas más es fe con objetos parece con programación a objetos y entonces a mediados de los 90 es cuando empiezan a aparecer otro tipo de lenguajes como por ejemplo java que son lenguajes que se consideran de alto nivel son lenguajes que no están pensados desde el punto de vista de la máquina están pensados del punto de vista del programador para hacer que la vida del programador sea lo más fácil posible ya sé que vosotros me diréis me pues yo con java han sufrido bastante como para que ahora me digas que está hecho para que el programador sufra poco ya lo sé pues imaginaros lo que se sufre con otros lenguajes de programación vale y hay otro lenguaje de programación que es del cual vamos a hablar en este curso que es python que es un lenguaje todavía más de alto nivel que java cuando se habla de alto nivel de lo que se habla es de que el lenguaje está muy abstraído el lenguaje ahorra al programador un montón de dificultades y le presenta él el lenguaje de la forma más clara posible y de hecho quiero que sepáis que os voy a abrir un navegador web porque si os cuento esto que os voy a contar ahora pensar yo estoy tomando el pelo y ahora veis que no vais a ver que voy a buscar una cosa que es el cen de payton ya sabéis como el zen japonés vale pues si buscamos el de payton veréis que hay una página en python punto o hereje o sea el gen de payton es oficial no es algo que se ha inventado una vida por ejemplo al extraño que son como una serie como una serie de como te diría yo mandamientos de cómo programar en python no me voy a poner ahora a leerme los tolosarras los pasaré para los duros cuando tengáis un rato todas formas el cen de payton a lo largo del curso lo vamos a ir viendo pero por ejemplo bonito es mejor que feo queso hay otros lenguajes que no es necesariamente así explícito es mejor que implícito aquí vemos la diferencia de payton con respecto a otros lenguajes y es que era igual que el código sea más largo pero que sea explícito que se entienda que sea fácil de leer que no sea oscuro vale simple es mejor que complejo pero complejo es mejor que complicado entonces ya os digo no voy a seguir con todo el resto pero lo que quiero es que os hagáis una idea de que payton es un lenguaje que nace para ser sencillo de utilizar atención no nace para ser potente yo nunca os voy a decir que payton es potente porque no lo es pero es sencillo vale también eso hace que payton sea un lenguaje muy horizontal muy interdisciplinar que se usa por gente que no necesariamente quiere dedicar su vida y su alma a la programación pero es gente que dice mira yo quiero hacer aplicaciones informáticas y no me quiero morir de asco sabes quiero divertirme con ello quiero pasarlo bien quiero que sea una buena experiencia bien bueno ya os contaré en otro momento además que lo de payton viene por monty python y no es broma tampoco y lo primero que tenemos que hacer eso sí ahora es pero es más en el siguiente vídeo es descargar python bien antes de empezar lo que tenemos que hacer es descargar python entonces como vamos a descargar python vamos a esta pagina que es python punto o hereje y vamos a ir a download una cosa que os voy a decir durante muchos muchos años en esta carpeta de descargas hemos encontrado que podríamos descargar python 3 y payton 2 payton 2 aunque python 3 salió hace books en el 2008 por ahí hace un montón de años pero python 2 se ha seguido manteniendo durante el tiempo y de hecho hay un montón de ordenadores que siguen teniendo python 2 que no es compatible con python 3 ya os contaré esto vale pero de momento siempre que no ante la duda vale cuando surge la duda de payton 3 su parte andy os siempre python 3 hacemos clic para descargar python 3 me lo descargo evidentemente dependerá un poco de en qué sistema operativo estéis yo en este caso estoy en mac pero este curso se hace exactamente igual independientemente de que el sistema operativo esté es quiero decir que me da igual que estéis en windows me da igual que estéis en mac me da igual que estéis en linux porque todo es exactamente igual vale lo que sí que voy a hacer ahora a continuación es evidentemente bueno primero os voy a enseñar cómo es el proceso de instalación y es que simplemente incluso estando en mac que no es muy común al hacer doble clic tenemos el típico proceso de asistente de instalación a mí lo que es probable que me diga es que ya lo tengo instalado vamos a ver si me achacar a la instalación anterior y ya está tampoco pasa nada y mientras tanto lo que quiero preguntaros es con que el sistema operativo vais a trabajar durante este curso veréis una vez que lo tengo instalado aparte de que aparece esta ventanita de congratulations y todo eso se me ha abierto también esta ventanita que me muestra el contenido ahora os comentaré si no os ha salido a vosotros como la podéis sacar sobre todo lo que me interesa es que comprobéis que tenéis un editor llamado y del entonces mira voy a cerrar todo esto un segundo en un segundo esto lo puede mostrar ya esto lo puedo cerrar ya voy a bueno voy a dejar esto minimizado y veréis vosotros si no veis nada os voy a decir que vosotros en windows 10 3 aquí abajo a la izquierda el botón de windows si pincháis el botón de windows veréis qué pues podéis buscar y dell yo en mi caso no tengo botón de windows tengo esta lupita que hay aquí arriba que es el spotlight entonces voy a poner aquí idle y veréis que aparece idle para python 7 insisto que yo por ejemplo tengo varios python instalados en externa door el 37 el 38 el 27 igual vale ahora igual siempre que es una versión 3 pero lo que quiero es que pinchase los que estéis en windows que penséis el botón de windows que busquéis idle y que me confirmen que aparece y del valor tenéis pues voy a hacer clic por cierto- veréis que tengo payton 37 y 38 da igual vale cualquiera de ellos vale y si todo ha ido bien confirmando lo que estáis viendo aparecerá el python versión lo que sea sí es decir aparece una ventanita como ésta ok correcto vale bien esto es la terminal de payton pero lo que queremos a continuación es hacer un nuevo documento en python por cierto sabéis porque este editor se llama idle no tiene cualquier otro hombre sino idle pues si no lo sabéis yo os diré para que veáis que cuando cuantos lo decía antes nos bromeaba si miramos los integrantes de monty python veréis que uno de los integrantes de monty python es eric idle entonces el editor de texto de payton se llama idle por eric idle entonces ya veréis que hay una hay un paralelismo entre monty python y el lenguaje de programación python pero precisamente es para hacer que payton sea algo agradable y divertido a la gente bien pues como os decía estoy en el gel de payton a continuación voy a ir a file y voy a pulsar sobre new file voy a crear un nuevo archivo no sé si lo tenéis en castellano o en inglés pero bueno si lo tenéis en castellano es archivo nuevo archivo y a partir de aquí en una gran parte del curso yo voy a trabajar así valió te voy a trabajar con un archivo de texto en la primera mitad de la pantalla y el gel en la segunda mitad de la pantalla a otra cosa que se me olvidaba y es que voy a intentar guardar los archivos de la forma más estructurada posible porque no solo os voy a compartir los vídeos de las grabaciones sino que os voy a compartir los archivos que yo vaya guardando vosotros podéis ir escribiendo los al mismo tiempo que yo o bien cada uno quiero decir iré haciendo la clase como vosotros queráis o bien lo que podéis hacer es esperar a que yo al final de cada versión nos pase lo que estoy haciendo yo lo podéis hacer como queráis entonces por eso os digo que me voy a ir aquí a fire a 6 balas antes que nada me voy a ir a me voy a ir al escritorio enfermero a la carpeta el escritorio voy a crear una nueva carpeta curso de payton voy a intentar poner el reino por el espacio y voy a guardar esto como python 001 y por ejemplo print vale entonces le doy aquí a save no le pongo extensión porque automáticamente el programa le va a poner extensión en punto para cada punto python y ahora es que dentro de esta carpeta curso de payton tengo el primer archivo llamado python 001 principal y así cuando os pase esto en el google drive pues lo tendréis organizado para verlo correctamente vale pues voy a empezar y por lo más sencillo voy a escribir lo siguiente voy a escribir print perdón qué manía tengo qué manía tengo de poner punto y coma al final en python no se pone punto y coma y es que como me paso el día programando en otros lenguajes de programación que la mayoría de ellos derivan de fe vais a ver que yo muchas veces tengo esa manera por el punto y coma en python no se pone punto y coma al final de cada línea pongo print y como no voy a empezar escribiendo hola mundo porque es la mejor forma de empezar cualquier programa así que lo que quiero es que vosotros también escribáis hola mundo y una vez que tenemos esto lo que voy a hacer es que le voy a dar al menú de run y voy a elegir un módulo si os fijáis la tecla rápida tanto en mac como en windows como en linux f5 porque lo digo porque como vamos a ejecutar un mundo físico de veces es bueno que os acostumbréis a la tecla rápida vale es f 5 entonces pulso f 5 y compruebo como aquí en el shell aparece o la mundo de color azul vale ok vamos a verlo esto que acabo de hacer es una chorrada ya sé que quereis caña vale ahora iremos continuando con caña pero porque diría es que especialmente voy a dar una pista de lo que estoy preguntando especialmente si habéis visto anteriormente java por qué diríais que siempre empiezo un curso de payton escribiendo un programa que ocupa una sola línea deberíais pues os cuento cuando yo imparto cursos dejaba el primer día siempre se me hace durísimo y a los alumnos más todavía porque no se puede explicar java sin antes explicar orientación a objetos es decir tú no puedes poner en java system punto out punto print line y ya está no eso tiene que ir en una clase y tiene que ir en un método principal main con lo cual hay que escribir una serie de código y aparte de que importar una librería por defecto pues le tienes que explicar al alumno lo que es el método principal lo que es el punto de entrada de ejecución lo que es el objeto lo que son las librerías lo imagínate a un alumno que su primer día en programación que le expliques eso le explota la cabeza él no sólo quería decir pero si yo quería eso lo quería escribir hola en la línea de comando y llevas aquí tres horas explicando qué cosas vale entonces por eso es por lo que en python me gusta empezar así para dejar claro que hay tienes un lenguaje que te quita toda la dificultad y te permite con el menor esfuerzo posible maximizar o que el resultado sea el mejor posible bien ahora lo que voy a hacer a continuación es guardar este archivo rafael selgas como prince 0 0 2 y error lo guardo como python 002 pero error y lo que voy a hacer es quitarle esta comilla entonces por cierto cada cosa que hago lo que estoy haciendo es guardar lo digo porque no sé si veis que me parpadea el file ahí arriba eso es porque estoy realmente yendo a file y dándole a save que es que toman ese control ese en windows pero como evidentemente os vais a tirar todo el tiempo guardando lo que hago es usar el atajo de teclado y lo digo porque no vais a ver nunca yendo a file y yendo a safe porque luego lo que hago es pulsar command s en windows control s pero aunque no me veáis evidentemente os recomiendo que en todo momento estoy grabando lo que estás haciendo no es que payton se cuele especialmente mucho de hecho es bastante estable pero pues bueno es bueno que eso costumbre de seguir grabando no les voy a pulsar el c5 y lo que ocurre es en offline el while scanner string literal básicamente que la carga básicamente que tienes un error entonces lo que te dice es que allí aparece algo en rojo como diciendo cuidado porque hayas cometido un error lo que te dice es mira has abierto una comillas pero no las has cerrado y por tanto eso no se puede ejecutar quiero decir con esto que payton es un lenguaje que os perdona un montón de errores pero evidentemente hay otros que nos va a poder perdonar y os va a dar error ya que hay ciertas reglas de sintaxis que pues vamos a tener que seguir pero ya os digo que comparado con otros lenguajes pues van a ser una serie de reglas mínimas voy a hacer un nuevo archivo un momento antes de hacer nuevo archivo antes de continuar quiero que sepáis que yo siempre digo una cosa entiendo que evidentemente si habéis programado antes esto que os voy a decir nos va a pillar de nuevo pero yo siempre digo que aprender a programar sin errores no es un objetivo eso es imposible aprender a programar sin errores el objetivo es convivir con los errores el objetivo es cuando cometes errores porque los vas a cometer aprender a localizarlos y solucionarlos lo antes posible vale entonces a continuación lo que voy a hacer y vosotros también es fã el new file y vamos a empezar viendo algo sencillo que podemos escribir varias líneas de texto que me llegó el punto y coma esto es una detesto evidentemente podemos copiar esto es otra línea y esto es otra línea qué es lo que hace guardo como python 003 multilínea lo ejecutó y comprobamos como dice esto esa línea de texto esa es otra línea y esto es otra línea más entiendo que hasta aquí hasta que no mucho vale hasta que el pienso lo tenéis claro ok correcto bien pero sin embargo lo que más nos va a interesar porque hasta aquí probablemente es un poco aburrido pero lo que más nos va a interesar es lo que va a ocurrir a continuación que es cuando vamos a hablar de variables bien cuando llegamos a variables es cuando voy a volver a sacar este esquema y con este esquema en contenido del curso hemos hablado de que si bien empezamos con la sintaxis a continuación vamos con estructuras de datos que no son más que contenedores de información donde el primer contenedor de información del que vamos a hablar es precisamente las variables muy bien pues voy a decir edad es igual a qué edad tenéis a alguien por uno de los dos he oído nueve pero no lo de antes 19 vale entonces 19 lo primero es que simplemente haciendo esto ya tengo una variable declarada decirme qué es lo primero que no taiz de raro extraño con respecto a otros lenguajes de programación que podéis haber aprendido anteriormente correcto eso es entonces acordamos que hace un momento estaba hablando de que hay lenguajes de programación de bajo nivel y hay lenguajes de programación de alto nivel en los lenguajes de programación que tiran a bajo nivel e incluso java es un lenguaje de alto nivel y sin embargo los datos se tipifican tú cuando declara es una variable tienes que decir de qué tipo de dato es esa variable por qué por qué tienes que hacer eso en otros lenguajes de programación cuál es el sentido aparte de hacerte sufrir correcto esa es la respuesta pero vamos más allá pero yo para qué quiero reservar memoriales a mí para que me sirve y almacenar puedo almacenar pero porque en programación con lenguajes de tirando a bajo nivel tengo que intentar siempre usar el tipo de datos correcto yo por ejemplo en un lenguaje de programación como por ejemplo java yo podría decir que 19 es un string pero siempre me dicen no no no no lo pongas como strip mételo como número y pregúntate sin decimales o no porque si no lo vas a guardar con un tipo de datos u otro tú lo has dicho para para reservar espacio en memoria pero reserva después en memoria sirve para algo y es optimizar el rendimiento y el funcionamiento de un programa por eso muchas veces de hecho veréis que en lenguajes de bajo nivel el tema de la reserva de memoria y el tema de la tipificación de datos da muchísimos problemas cuando haces operaciones entre variables porque tienes que convertir y tienes que costear las variables un tipo de datos y eso te da errores y tienes que ver cómo solucionarlo vale la idea lo que hace python es que te elimina eso termina una serie de cosas pues simplemente dices edad y payton internamente ya verá si declara ese 19 como un string como un número entero con un número flotante como un número double o como lo que sea entonces esto que os acabo de decir se antoja bueno o malo bien malo porque efectivamente desde el punto de vista de la optimización de recursos pensamos que nosotros como seres humanos vamos a acertar mejora tecnificación de datos con un programa informático porque dice 6 y si me lo pone como estrella y la liamos os enseñaré más adelante que de hecho en python se puede forzar el tipo de dato pero de entrada el programa lo que quiere es que tú no pierdas tiempo pensando en eso pero evidentemente eso con respecto a otros programas va a suponer luego una merma de rendimiento porque el sistema tiene que pensar cosas que tú no has pensado vale lo que quiero deciros en definitiva es que este lenguaje de programación tiene ventajas tiene desventajas la ventaja es que te ahorra un montón de dificultades que otros lenguajes de programación no te ahorran pero también luego el rendimiento ya veréis queremos pruebas de rendimiento el rendimiento puede no ser el mismo que otros lenguajes de programación de hecho si miráis mi instagram de años anteriores con otros grupos de programación he hecho estas pruebas de comparación del rendimiento dentro de que las comparaciones son odiosas evidentemente pero siempre un poco dejando claro que payton no gana en el rendimiento pero sí que gana en facilidad que es algo que también tenemos que tener en cuenta tenemos una variable y a continuación lo que voy a hacer es decir print print y quiero un siguiente con el punto y coma que sepas que tu edad es d y ahora voy a poner cómo era lo que estoy haciendo aquí es una cosa que se llama concatenación en la concatenación lo que se hace es unir unas cosas con otras de hecho el que sepas que tienes coma años vamos a ejecutar esto he dado a guardar ya sabéis no lo veis pero estudiando al comando se le voy a guardar y f5 para ejecutar y que sepas que tienes 19 años voy a quitar este espacio porque estoy viendo que el programa me lo está poniendo automáticamente pulso f 5 de nuevo y que sepas que tienes 19 años con esto lo que estamos haciendo es guardar información en variables así que a continuación lo que voy a hacer es demostraros que tenemos cualquier tipo tenemos todos los tipos de operadores que tenemos en cualquier lenguaje de programación voy a guardar esto voy a hablar de esto con si no encontró mayúsculas s como python 005 operadores hay muchos tipos de operadores entonces por ejemplo es edad tenemos los operadores aritméticos era más 5 el signo más es el operador aritmético de suma f 5 y que sepas que tienes 24 años en este caso aprovecho para deciros que el hecho de que la coma sea el operador de concatenación constituye una mejora con respecto a otros lenguajes de programación como java ya que sabréis que en java el signo más es a la vez la concatenación y a la vez el signo aritmético de suma de suma numérica claro y eso a veces puede causar confusión en medio de un programa en python o en python la concatenación se hace con la coma y la suma aritmética se hace con el signo más no me quiero enrollar mucho pero era es igual a era por dos entonces print voy a parte de este print y ahora la edad es edad guardo f5 y que sepas que tiene 24 años y ahora la edad es 38 que es 19 por 2 lo cual insisto tengo los clásicos operadores lo cual me va a servir para a continuación hablar que no me funciona el al 6 que raro lo cual me va a servir para hablar de comentarios y en los comentarios lo que voy a hacer es poner una almohadilla y decidir primero defino la edad al móvil ya segundo imprimo por pantalla fijaos que el color está saliendo rojo como diciendo esto no va a contar luego en la ejecución ahora multiplicó por 2 y lo vuelvo a sacar por pantalla evidentemente ya sabéis que los comentarios luego no salen en la ejecución si yo ahora ejecutó este archivo veréis que me sigue diciendo que sepas que tienes 24 años y ahora la edad es 38 y no sale en ningún momento ningún tipo de comentario vale entonces yo sé que los comentarios son ahora algo ronda de preguntas esto voy a hacerla tener en cuenta una cosa a la pregunta de por qué puesto paréntesis la respuesta es que probablemente me los podría haber saltado pero ten en cuenta una cosa y es que yo no invierto el 100% de mi tiempo programando en python de hecho si me lees mis redes sociales veréis que programan un montón de lenguajes y eso quiere decir que os lo voy a reconocer yo tengo una serie de manías como un programador entonces yo lo que suelo hacer es que ante la duda encapsuló es decir yo sé que en otros lenguajes de programación si yo pongo aquí una encadenación y algo que en otros lenguajes de programación es una encadenación el sistema no va a saber diferenciar ya sé que en este lenguaje concreto si el sistema no va a saber diferenciar lo que es esta encadenación de lo que está suma aritmética que quiero decir con esto que probablemente esto va a funcionar exactamente igual pero como esto en otros lenguajes de programación pero se insisto y te reconozco lo de las manías traídas de otros lenguajes de programación esto me hubiera dado error lo que tiendo es a encapsular con paréntesis para que el sistema sepa perfectamente qué es lo que estoy haciendo entonces ya que me hace esa pregunta te voy a responder con otro ejercicio para que veas un poco también a veces hasta qué punto llegan mis manías y voy a guardar esto como otro archivo que no me está funcionando el guardar como hay que fastidiarse bien y voy a guardar esto como 7 preferencia entonces de hecho no sé por qué he hecho esto porque realmente bueno entonces veis que lo estoy guardando como incremental para que luego tengáis en cuenta que lo hemos guardado todo para que se quede un registro de cada ejercicio que hemos hecho breaks print y digo esto va a parecer como una breve cita de estas de facebook de inteligencia vale entonces digo 3 x 4 + 5 voy a separarlo nos preguntó cuál es el resultado es más es más os lo voy a poner más más confuso 34 por 5 cuál es el resultado porque 23 es correcto pero por qué muy bien eso es entonces en cualquier lenguaje de programación se aplican las mismas reglas de precedencia que se aplica en matemáticas evidentemente y es que la suma de la división siempre van antes de perdón la multiplicación de división siempre van antes de la suma y la resta con lo cual digo porque igualar y listo en facebook que de vez en cuando la gente pone estas cosas cuando dices esto a cualquier programador nos pasamos por el porque estamos acostumbrados a sabemos de hembras de esa procedencia pues yo aún así tengo la manía de aún sabiendo perfectamente las reglas de procedencia yo siempre hago esto innecesario pero claro evidentemente ahora mismo estamos con un ejemplo con el que evidentemente sabemos que se resuelve antes o después como os podéis imaginar cuando trabajamos con un programa real hay muchas veces que la longaniza de precedencia poco para como dos o tres líneas y hay veces que dices mira yo no sé qué es lo natural pero voy a poner yo paréntesis para decir que es lo que yo quiero que se resuelva antes vale por eso esa es otra manía de programador que veréis que tengo que hay veces que pongo paréntesis de forma innecesaria pero de esa forma me aseguro de que en la ejecución luego no voy a tener sorpresas y aún así tendréis sorpresas por supuesto que sí pero lo que intento hacer es un poco establecer mecanismos digamos para protegerme vale en ese sentido voy a hablar de comentarios de múltiple pero como os decía voy a hablar de comentarios de múltiple línea pero a ver uno en ti pero vale pero antes que nada quería comentaros que los comentarios son esas cosas que los profesores siempre decimos que pongáis en los alumnos no ponéis vale entonces no ya sólo os voy a recomendar que pongáis comentarios para cuando hacéis programas que luego van a tocar otras personas sino que quiero recordaros que lo he metido por aquí abajo quiero recordaros que en el cen de payton en el cen de payton hay una regla que es explícito es mejor que implícito es decir da igual si gastas muchas líneas extra en poner comentarios pero pon comentarios veréis quiero ahora luego si queréis hablamos de otros cursos que hecho a lo largo de los años pero para poneros un ejemplo concreto quiero que sepáis que yo también imparto cursos de una cosa que se llama refactorización preguntó o suena de algo la reflector y zación la regla refactorización es cuando escribes un programa lo escribes digamos al salto de la matta y cuando lo has escrito luego te dedicas a repasarlo para ver qué cosas podrías haber hecho mejor y al ref actualizar lo que haces es reestructurar el programa para que esté mejor escrito vale entonces hay una regla en los cursos de refactorización que dice que si pones demasiados comentarios es que algo estás haciendo mal es decir si el texto necesita ser comentado tanto es que hay algún problema vale o sea quiero deciros eso siendo consciente de que en reflector ethan existe esa regla pero ahora mismo no estamos en un curso de refactorización estamos en un curso de payton y estamos en un curso de payton donde esto no es manía mía sino es como los que han creado python te dicen que tiene que dejar las cosas que es es mejor que sea explícito dicho lo cual dicho lo cual quiero hacer un nuevo archivo que son comentarios multi línea vale entonces muchos programas empiezan de la siguiente forma por ejemplo un programa de los muchos queremos durante el curso es programa agenda yo vengo a otra línea y digo copyright copyright hombro agenda pero fit 2020 josé vicente carratalá el programa escrito en python cuando empiezo a escribir esto la gente dice oye no es un poco rollo tener que meter un simbolito una maestro al principio de cada línea si por cierto que os diré que el propio editor y del lleva algunos algunas utilidades como des comentar y cómo un bloque de texto y comentarlo vale lo digo porque como veis lo que hace con dos almohadillas en este caso es comentarlo automáticamente pero os quiero enseñar un truco que es el siguiente y es que si pones tres comillas simples y luego pones tres comillas simples puedes escribir lo que quieras lo que quieras lo que quieras lo que quieras y no tienes que poner una almohadilla al principio de cada línea pueden escribir absolutamente lo que quieras y solo tienes que poner tres comillas al principio de tres comillas al final vale esto parece una chorrada pero realmente no lo ves porque prácticamente cualquier programa que tenga cierta importancia suele empezar aquí arriba con una cabecera de nombre del programa quién es el autor que hace el programa en qué versión estamos y todo eso entonces es interesante saber que metes tres comillas metes tres comillas y por supuesto esto es un comentario esto es el programa en sí mismo qué manía con el punto y coma le doy a efe 5 y evidentemente este es el programa en sí mismo y nunca se va a ver el comentario en la ejecución vale bien a ver vamos a ver hemos hablado hace un momento de los de los operadores aritméticos vale ya hemos dicho que no tienen mucho ministerio en el sentido vamos a crear un nuevo archivo en el sentido de que son sumar restar multiplicar ay redondeos ya hablaremos de ellos y en libia la matemática pero vamos a hablar de operadores lógicos entonces voy a parar print y voy a poner esto nos va a pillar de nuevas nos va a pillar de sorpresa tranquilos momento vale que es lo siguiente voy a poner print 3 es igual a 3 de hecho lo que he hecho es poner dos iguales y si habéis visto algo de java anteriormente ya sabéis por qué pero ahora lo voy a explicar para decirme que si yo ejecuto esto que es lo que va a salir crees 3 veréis exacto va a salir efectivamente entonces sale true con los operadores antes estábamos hablando de los aritméticos para los aritméticos son sólo uno de los muchos operadores que podemos utilizar esto quiere decir que a continuación me voy a volver a este mapa mental voy a tirar un poco hacia atrás y vamos a ver que en estructuras de datos vamos a el momento en el que trabajamos con variables vamos a hablar también con operadores es que iría ampliando el tema mental veréis que tenemos aritméticos y tenemos también operadores lógicos que son los operadores que estamos hablando ahora mismo sobre xavi atléticos son de suma resta multiplicación ocasión división resto entero y hablaremos de él con los lógicos tenemos igualdad no hay igualdad igualdad exacta entonces entonces bueno por aquí y en este caso cuidado un signo igual cuidado por qué operadores hay uno que es el de asignación que es el igual un igual lo que hace es a una variable asignarle un valor los lógicos el de igualdad es el doble igual por ciento no hay que confundir el de asignación con el de él para dar lo lógico de comparación de igualdad si yo ahora por ejemplo pongo tres doble igual a cuatro lo que nos preguntara el programa si es cierto que tres es igual a cuatro y evidentemente como podéis anticipar dice falls ahora a continuación yo voy a poner print 3 y admiración igual 4 admiración en python y en un montón de un lenguaje de programación quiere decir no por tanto yo estoy diciendo es cierto que 3 no es igual a 4 que me diréis esto hay que pensarlo un poco más porque es como en la negación del hotel son lo contrario por tanto me dice falls a la primera bella arriba y true a la segunda de allá abajo vale por tanto veréis en definitiva que hay diferentes tipos de operadores lógicos y a continuación tenemos los igualdad tenemos los operadores búlgaros operadores búlgaros si os dais cuenta cuando empezado la numeración de los archivos he reservado tres dígitos para la numeración nos ofrece la idea de más o menos cuántos archivos van a haber durante el curso no digo que vaya a haber 900 archivos pero igual sí que llegamos a los 200 para que os hagáis una idea entonces operadores julianos donde a continuación voy a escribir lo siguiente print hemos dicho que si pongo 3 es igual a 3 y ejecutó me va a dar true un momento momento un momento que he metido un carácter el pulso de 11 6 por accidente vale ahora el cetro pero yo voy a decir dime si es cierto qué 3 es igual a 3 y 4 es igual a 4 que me decís esto es cierto parece que sí le digo trump ahora bien voy a mostrar esto ahora bien es cierto que 3 es igual a 3 y es cierto que 4 es igual a 5 sale falls porque con el operador lógico and todo tiene que ser cierto para que la evaluación sea cierta efe 5 y dice falls hay otro operador voy a centrarme con los dos principales que vamos a dejar para más adelante el exhorto vale entonces hay otro operador que es es cierto que 3 es igual a 3 x 4 es igual a 5 que me diréis true falls esto vale porque con el operador or con que una de las expresiones sea válida la expresión global booleana es cierta lo cual es muy importante lo cual es muy interesante para en un momento dado como ahora luego veremos porque creo que sí que nos va a dar tiempo antes de acabar la clase de hoy es a trabajar con alguna estructura de control mínima como por ejemplo un if pues con el eve tenemos si algo es cierto haz una cosa si algo no es cierto a otra cosa pero antes de meterme en las estructuras de control por cierto esto como veis al cabo del rato se me va acumulando vale pues lo que voy a hacer es ir cerrando uy vaya vaya por dios el cerrado python entero no pasa nueva abrimos nivel y asunto solucionado bien otro de los componentes que bueno en un momento dado podríamos considerar como nucleares d de un lenguaje de programación son entradas y salidas técnicamente técnicamente nosotros salidas ya hemos tenido salidas es por ejemplo cuando imprimimos algo en pantalla nosotros hemos hecho un programa es un programa en consola pero es cierto o no que el programa no se nos ha dicho o falls no es una interfaz de usuario gráfica pero en definitiva es una salida el programa tiene que tener algún método de decirnos algo en pantalla a continuación vamos a hablar de las entradas mediante las entradas nosotros podemos introducir información en el programa que ha pasado hasta ahora pues que por ejemplo nosotros hemos dicho que voy a guardar esto escritorio curso de payton entradas entonces nosotros hemos dicho que esa desigualdad 19 entonces sabes qué pasa esto es aburrido porque eso quiere decir que este programa sólo funcionará para aquellas personas que tengan 19 años que lo que quiero es que este programa funcione para cualquier persona vale entonces voy a decir lo siguiente print dime tu edad hoy en es un hombre pero igual vale dime tu nombre por ejemplo y entonces regalo siguiente nombre es igual input quiere decir que el sistema va a esperar a que el usuario proporcione una entrada entonces a continuación quiero ver si el sistema está guardando esa información y por tanto voy a decir print o la coma coma nombre tened en cuenta porque estos pueden llegar a marear está coma es estética y esta coma es una coma de acá de nación porque hay dos cosas juntas no os mareéis con ellas para que nos confundan señor aguardo y ejecutó dime tu nombre entonces fíjate que digo jose le doy a enter y me dice hola jose vale esto quiere decir es una demostración de que podemos hacer que el usuario introduzca información y que mediante esa información que genere digamos contenido ahora voy a hacer otra entrada y voy a decir dime tu edad y voy a decir edad es igual a input como veis podéis hacer tantos inputs como queráis y aquí print tu edad es de cómo era el coma años y años f5 me mete un hombre soy jose dime tu edad en mi caso 39 ojala 42 entonces tu edad es de 42 años o por ejemplo tu nombre es nombre tu edad es de equis años vamos a ejecutar a jose fuera de ésta un hombre ha sobrado tu nombre es josé tu edad es de 42 años eso es lo que es lo que estoy queriendo decir con esto nosotros quiero decir es que el sistema está guardando correctamente el input la entrada en una variable y si el sistema tiene la información una variable quiere decir que me puedo guardar esa información para usarla más adelante en el programa cuando yo quiera a continuación sí tenemos claro esto ahora si es cuando voy a hacer un duplicado de este archivo es cuando a continuación vamos a estructura es cuando vamos a empezar a hablar de las estructuras de control condicional vamos a pasar con las condicionales veréis que hay varias estructuras de control una es if control condicional y otras suites os voy a decir que en python siempre se ha rumoreado que es por un tema de rendimiento no hay estructura de control suites probablemente conocéis estructura de control switch de otros lenguajes de programación en python no hay suites pero hay una estructura de control derivada de if que simula a la estructura de control eso más adelante os lo contaré y luego en bucle están los clásicos while está en el clásico de while y está en el clásico for vale pero vamos ahora a empezar con la clásica estructura de control if condicional la gracia es que si en un momento dado yo he puesto una estructura de control perdón a una variable de edad yo puedo poner if bueno básicamente que sepáis que las estructuras de control condicional son prácticamente igual que las que conocéis pero yo insisto una vez más me he ido otra vez a la mala costumbre de efe que es poner if y paréntesis vale en python no se pone paréntesis en los ifd y digo si edad es menor que 20 bueno realmente que 30 sabes dos puntos donde en java en c y en un montón de lenguajes de promoción más se pondría llave llave llave de apertura llave de cierre en país entre dos puntos y ahora print eres una persona joven y luego voy a poner else dos puntos y voy a poner voy a poner a este momento este hacia atrás el print ya no eres tan joven como antes siempre que pongo este ejercicio porque hay gente que hace 35 persona joven que tampoco quiero hacer para molestar a nadie entonces y ahora ejecute f5 y dime tu nombre jose dime tu edad de 15 y me dice el cuidado vale y es que he cuidado porque en este caso en edad lo que ha hecho es veis lo que os he comentado antes de los operadores entre un string y un entero entonces claro hay un truco hay un truco a ver si me permite hacerlo y si no lo que voy a hacer es forzar el tipo qué es edad es igual a edad por 1 a ver si me deja hacer este truco en pulso f 5 jose perdón perdón efe 5 dime tu nombre jose dime tu edad 15 vale y si ha ocurrido lo mismo vale voy a hacer una cosa edad es igual a quien se lo voy a forzar para porque es pronto todavía para hablar de conversiones forzadas de tipo de datos hablaremos de ello los voy a hacer es esto para forzar a que lo meta como número f 5 era nombre jose da igual lo que le diga ahora en edad porque la pilla al 15 vale pero simplemente lo que quería que mostrar es esto es tu nombre es josé todas de 15 años eres una persona joven vale lo que ha hecho es dado qué edad es menor que 30 ha ejecutado esto de aquí y no ha ejecutado esto de aquí vale ahora quiero decirles una cosa mucho cuidado con esto mucho cuidado con esto porque esto va a fallar voy a ejecutar y veis que el error de los errores los da en inglés aunque es un inglés sencillito de menos lo digo pero dice expected and intenten block la palabra clave es intente que es intentado lo que es lo mismo sangrado y entonces os voy a contar una de las cosas que no es que me gusten más o menos pero es que son así y es que en java o en cualquier otro lenguaje de programación personales habéis hecho también temas más las sangrías son meramente estéticas los sangrados de línea son meramente estéticos vuestros profesores ahora han dicho anteriormente en java y en temas más que y que el código se ejecute correctamente no depende de las sangrías aunque evidentemente os han animado a programar con sangrías para que quede claro la estructura del código vale o sea es es una buena práctica más que una obligación en python al igual que pasa en otros lenguajes como por ejemplo en visual basic las intenta ciones las sangrías son funcionales o sea tienen un significado entonces lo que quiere decir es que no lo veis ahí que me pone de rojo el print lo que quiere decir es que si yo pongo aquí un id de hecho la forma de que el programa como no tengo una llave de apertura y una llave de cierre la forma de que el programa sepa cuando acaba el if es mediante la intenta ción vale mediante la sangría y lo mismo exactamente con el else entonces yo pongo aquí print que sepas que esto está dentro del else pero si yo hago así print esto se va a ejecutar si os qué quiere decir esto pues que si yo le digo 15 jose 15 aunque ya sabes que está forzado dice eres una persona joven no me está ejecutando este print porque este print está dentro del else pero sí que me está ejecutando este print porque ese print está afuera de la estructura if else con esto lo que os quiero decir básicamente es que el if la el funcionamiento la estructura de leaf es prácticamente como la que ya conocéis pero con algunos cambios de reglas sintácticas por eso antes os decía en el mapa mental que es importante y perdón es importante que al principio de todo de la clase pues tengamos conocimiento de cuáles son las reglas de sintaxis cuáles son las parecidas las que ya conocéis y cuáles no se parecen realmente a ellas para seguir os voy a enseñar algo que se salta en cierta forma la el zen de payton no sé dónde tengo no sé dónde tengo la otra ventana haber cerrado el calendario de payton ahí está bien vamos a ver hay una hay una regla de payton la he visto antes esta que es plano es mejor que anidado vale entonces lo que a continuación os voy a enseñar ‘sanidad quiero que sepáis que os voy a enseñar a anidar teniendo claro que una de las reglas de payton es intentar anidar lo menos posible pero yo por lo menos os quiero enseñar que es posible y luego ya vosotros anidar ‘aces’ o no ayudaréis según queráis o según podáis vale entonces voy a grabar esto un nuevo archivo realmente y al hígado vale y voy a escribir lo siguiente era desigual a 25 y voy a poner sí edad perdón de mañana edad es menor que 20 print estás hecho un chaval els ya no eres tan chaval al stage tiene ahora mismo únicamente dos casos pero y si yo quiero separar esto en cuatro casos posibles pues yo puedo anidar yo puedo poner dentro de un ir y dentro de mails puedo poner nuevos if entonces pongo un if i digo vale es menor que 20 pero dentro de menor que 20 la edad puede ser menor que 10 en este caso print pero es un niño en caso contrario else print eres un adolescente si me voy al caso els if edad es menor que 30 esta vez es puede ser un poco lioso eres un joven els recuerdo aquí els print definitivamente se te ha acabado lo bueno veis que es un caso un poco lioso porque dentro de menor que 20 hay dos sub casos que es desde 0 hasta 10 y desde 10 hasta 20 y luego mayor que 20 es desde 20 hasta 30 este caso y mayor que 30 es este otro caso evidentemente se pueden anidar tantos ships como se quiera y se pueden poner tantos casos como se quieran pero yo por ejemplo dentro de que este caso de negación labor existen otros lenguajes de programación pero yo por ejemplo te estoy viendo la cara que estás poniendo de que está teniendo que era de momento momento que esto está complicando vale porque como tienes la hueca abierta pues te estoy viendo entonces esto es lo que quiere decir payton con el cen de no anidar porque al anidar o intentar no validar o evitarlo por lo menos vale porque al anidar lo que ocurre es que pues bueno la complicación del código aumenta pero como os digo mi misión en este ejercicio es enseñaros que se puede y luego vosotros según las circunstancias pues ya veréis si os conviene anidar o nos conviene unidad vale bien vamos a ver preguntas momento a continuación nos hemos dejado un poco colgado antes el tema de de los tipos de datos vale entonces no quiero dejarme eso colgado vamos a por ello entonces vengo por aquí y a continuación voy a guardar esto y forzado forzado de tipo vale entonces yo a continuación voy a escribir lo siguiente yo sé que esto que hemos hecho antes ha dado error y es era es igual a input voy a poner dime la edad porque si no el usuario final no sabe qué es lo que está ocurriendo aquí y dime la edad y print tu edad o el doble de tu edad y coma ya sabéis mala costumbre que tengo edad por dos paréntesis innecesarios pero es que ha sido mejor por la noche entonces guardo plebeya f5 dime la edad 15 y bueno en este caso mejor todavía porque en este caso qué es lo que ha ocurrido voy a decir edad más 2 a ver si así sí que habéis visto lo que ha ocurrido que he hecho 15 15 en lugar de multiplicarlo aritméticamente lo ha tratado como una cadena he hecho edad por 2 pues por pluma pluma pero tiene dos veces lo cual insisto saber que eso es así a veces os puede venir bien para otras cosas o sea que es un error es el punto de vista aritmético pero hay veces que para conseguir ciertos ciertas cosas no pueden venir bien venir bien saber que eso está bien pues ejecutó porque ese 20 y me da ahora si este mensaje es rojo y me dice no puedo sólo puedo concatenar una cadena y no un entero a esta cadena por cierto que por lo menos veréis que dentro de que payton o se intenta ahorrar el máximo número de errores posibles por lo menos veréis que los egresos los intenta decir en un lenguaje lo más atendible posible vale pues os diré que por aquí hay una hay una cosa que es cloud también hay int pero bueno qué es esto vale sí le digo flow lo que hace el programa es engloba esto dentro de un flotante o lo que es lo mismo lo que sea que de input lo va a convertir ojo si puede en un flotante de una letra pues no va a colar entonces guardo recargo y entonces dime la edad 20 y me dice el doble de ciudades 22.0 vale evidentemente ha puesto el punto cero porque yo le he dicho flow y flow ya sabéis que es un tipo de datos de coma flotante si yo le digo algo como integrar aguas y f5 le digo 20 y me dice el doble de ciudades 22 con esto lo que quiero hacer es enseñaros que comprobéis que es cierto lo que os he dicho antes y es que en python si tú no le dices nada el sistema lo que va a hacer es adjudicar el tipo de datos que el sistema piense mejor pero el sistema a veces se puede equivocar valentes si el sistema se equivoca por cierto voy a hacer una cosa voy a aumentar un poquito el tipo de el tipo de fuente y así veréis un poco mejor sobre todo cuando la cosa se empieza a complicar y eso es lo que os decía es que se puede forzar el tipo de datos antes el tipo de dato hemos hablado de error no quería parar el ejercicio en ese punto y por tanto el esforzado pero tampoco que creo que nos quede la idea de que eso no tiene solución porque sí que tiene solución vale puedo forzar a tipo numérico como veis lo acabáis de comprobar existe el tipo de datos flotante existe el tipo de datos cloud perdonad abel quería decir existe el tipo de datos entero vale es decir que payton os libera de esa dificultad pero si tú la quieres la tienes otra cosa que os quiero decir es que es fácil buscar python data times entonces si nos vamos a el país o no aquí a ver si busco país photo types claro hay páginas como real python que dices bien me parece muy bien pero es que no es la documentación oficial vale que no tengo nada contra otras páginas de terceros pero si podemos ver la documentación oficial pues mejor que mejor veo incluso por aquí que ahí está la página de 13 school que es una página a la cual le tengo bastante confianza pero siempre voy a intentar abrir en primer lugar la oficial es simplemente lo que quiero deciros es que podéis entrar dentro de esta página para comprobar que dentro de payton tenéis una gran cantidad de tipos de datos vale y luego podemos ir a páginas que nos dan más comidita como google schools que dice esto que es una página que yo siempre recomiendo donde aparece la información más fácil para que veáis que tenéis tipo string tipo entero tipo flotante tipo complejo secuencias tenemos diccionarios tenemos sets ya hablaremos de esto tenemos por supuesto el tipo mínimo que es el buljan que es verdadero o falso y tenemos tipos binarios no quiero ahora pararme uno a uno en cada uno de los tipos pero lo que quiero que sepáis es que se pueden manejar tipos de datos lo cual os quería decir una cosa que se me acabe se me acaba de ir en cuanto al tipo de los datos pero no da igual porque será me acuerdo ahora me acordaré más adelante antes de hacer preguntas antes de continuar bien entonces entonces a continuación lo que vamos a hacer al momento vale lo que vamos a hacer es crear algún programita que nos permita hacer algo vale entonces bueno voy a ir por aquí voy a crear un nuevo archivo voy a guardarlo y voy a guardar lo como calculadora para que enfoquemos este último cuarto de la clase de hoy intentando un poco recopilar todo lo que hemos hecho en un programa funcional calculadora bien y ahora voy a decir lo siguiente existo ahora en esta última parte voy a dar pocos conocimientos nuevos lo que voy a hacer es demostrar como todo aquello que hemos visto hasta ahora se puede juntar en un solo programa en primer lugar programa calculadora copyright 2020 josé vicente carratalá versión 0.1 y ahora dijo el input o nombre es igual a inputs pero cuidado que la has visto como me falta una comilla veis que me estaba cogiendo eso como si fuera un comentario vale cuidado input y digo el print bienvenido al programa calculadora ahora print introduce el nombre es igual con lo cual print hola como nombre te doy la bienvenida al programa calculadora bien y vamos a verlo f5 y jose vicente hola jose eficientes reguladoras a continuación ahora elige la operación que vas a realizar y digo print uno es suma pero ya sé que vosotros me diréis no hay una forma de no escribir no escribir cada vez un print o sea un nuevo y escribirlo en uno solo las respuestas que dice que existen vale si yo me cargo esto y yo me cargo esto pongo un signo más sangro esta línea y yo puedo ir encadenando entonces guardo ese 5 jose vicente a veces me lo pone aquí vale me lo pone a confirmación y lo que puede hacer es contra barra en contra barra n jose y si os fijáis el contra barra n lo que hace es forzar forzar un salto de línea voy a poner esto aquí al lado para que lo veáis mejor y sigo esto me lo bajo abajo vale y esto se suele considerar más limpio que poner muchos pits entonces 2 es resta hay una cosa muy importante os quiero decir que es la ejecución de programas 3 multiplicación como veis los asientos y yo no somos muy amigos y la división vale entonces f5 entre los nombres josé y beige que ahora elige la operación que vas a realizar y ahí pondría otro input por cierto antes de hacer nada más voy a hacer algo que debería haber hecho hace un rato vale y nunca es tarde si la dicha es buena vamos a ver nosotros hasta ahora lo que estamos haciendo es crear programas desde el punto de vista del programador esto quiere decir que nosotros abrimos el código y le damos a f5 ejecutar pero nosotros vamos a suponer que nuestros usuarios van a abrir el código y ejecutarlo vamos a suponer que van a saber que van a saber hacer eso la respuesta probablemente es que no vale entonces yo lo que voy a hacer es tratar esto pensar esto voy a cerrar esto me voy a esta carpeta curso de payton y aquí en el curso de payton veréis que si tengo por aquí calculadora no me ha asociado el tipo de archivo – lo digo no me hace mucha gracia a vosotros y qué es lo va a asociar pues que parece el típico incógnito de payton yo lo que voy a hacer es bueno sabes que un momento in dejadme asociarlo toma un pontón puntos payton 37 yo que sé mismamente payton launcher y abrir siempre con esta aplicación vale ok ok qué es vale bueno no lo tengo bien asociado no lo tengo bien asociado pero él ya está labró con nivel lo ejecutó cuando vosotros lo habréis con python veréis que directamente se os abrirá esto es lo que verán los usuarios y es que podrán hacer doble clic en el programa ya os digo esto esos dominios que no tengo correctamente asociado pero podrán hacer clic en el archivo es que me parece lo de donde está tu intérprete nada lo tengo que asociar que tengo como tengo un poco de bacalao en el ordenador cuando vosotros lo hagáis lo que quiero que comprobéis es que si hacéis doble clic en el archivo se os abrirá el archivo diremos a directamente vale que no es sólo código fuente que vosotros podéis ejecutar sino que vuestros usuarios podrán ejecutar ejecutar nuestros archivos python como programas pero yo supongo que se acabo de explicar esto vosotros queréis hacerme alguna pregunta a que sí la pregunta que espero de vosotros y espero esta pregunta porque me la hace todo el mundo llegado a este mundo del curso es pero si yo le paso este archivo a un usuario mi usuario tiene el código fuente es decir ese archivo de payton al final es un archivo de texto y ahora mismo yo tengo un programa sencillito pero que es lo que va a ocurrir cuando yo tenga un programa complejo y le quiera dar a mi cliente el programa pero no el código del programa vale hay que tener en cuenta que payton es un lenguaje interpretado y eso quiere decir que no hay un archivo compilado no hay un archivo exe para que me entendáis vale sino que el archivo punto python es lo que tú le ves a tu cliente final sin embargo os voy a decir que más adelante en cuanto veamos funciones y objetos veréis que en cuanto empecemos a crear archivos externos payton automáticamente compila los archivos y al compilar los automáticamente oculta el código lo de compilar los archivos por cierto no lo hace para que vosotros protegéis vuestro código sino que lo hace para mejorar el rendimiento del sistema del programa vale para que el rendimiento se parezca un poco al resto de lenguajes de programación pero eso lo podéis usar en nuestro beneficio para ocultar el código lo digo porque tarde o temprano os vais a hacer esta pregunta la pregunta de oye pero la gente va a ver mi código yo no quiero que la gente vea mi código veréis que hay algún truco para buscar ese código y para que la gente no te lo pueda atrapar bueno pues estábamos con idle vale por tanto voy a abrir esto con nivel y vamos a continuar nuestro programa calculadora no también para hacer esto que es ponerlo a mitad de la pantalla no sé cómo veáis más cómodos porque a veces hago esto y la gente se marea de hecho mira qué guay se me acaba de ahora vale f 5 qué pasa que ofrecéis eso es porque me estoy quedando sin luz aquí donde estoy y no estoy haciendo la lamparita así que tratan de un segundo enciendo la lamparita y ya está bien introducir tu nombre jose y elige una operación vale pues a continuación lo que voy a hacer es decir print y no primo voy a decir int ya lo sabéis de antes input y esto va a ser operación es igual a end y entonces a continuación voy a decir print la operación que has elegido es como ‘operación f5 jose en la 3 y me dice la presencia es elegido es la 3 y podría hacerlo con un string en lugar de con un entero sí pero prefiero hacerlo con un entero porque suma que ocurre si x en suma con minúsculas que pase lo que dicen incorrectamente es decir la realidad es de que el usuario introduzca incorrectamente la información son mayores con un string que con un entero vale pero bueno esto luego lo haremos evidentemente más adelante con un programa de interfaz de usuario con lo cual no habrá tanto problema vale entonces ahora yo voy a decir lo siguiente ahora introduce un número jmg número 1 es igual a un input ahora introduce otro número de hechos te lo puedo duplicar ahora introduce otro número número 2 vale y ahora sí operación es igual a 1 en ese caso madre mía fatal fatal fatal de la muerte es que veis tengo la manía de otros lenguajes de programación y su operación es igual a 1 voy a decir que print el resultado es como siempre que es que tenía era el número uno más número dos pero voy a hacer varios ships con lo cual en cierta forma es como si hubiera hecho un switch vale entonces voy a hacer esto sin operaciones igualados estos espacios son innecesarios pero menos o menos estoy dejando para que sea correctamente donde acaba uno del otro esto es menos esto es por y esto es 4 la verdad es que en división debería haberlo hecho como flotante más que como entero bueno vamos a tirar otra cosa que os digo es que insisto buena costumbre es que bienvenida 12 lo que queráis bienvenida al programa es como esto se va haciendo y estamos la primera clase indica la operación introduce los números y realiza la operación entonces vamos a probarlo guardamos ejecutamos y sintaxis inválida donde me he equivocado perdón veis ay me ha equivocado ahí me falta un paréntesis de cierre el programa cree que esto como en falta un paréntesis allí que esto es todavía esto de allí para entonces me falta ese paréntesis que por alguna razón de la comido veis lo que os he dicho antes el objetivo no es programar sin errores el objetivo es cuando cometas un error localizar el error lo antes posible vale entonces cuando tú crees que eso lo tienes bien es decir bueno si eso está bien vamos a ver alrededor por dónde puede estar el error f5 introduce de nombre josé quiero una una suma y quiero el 5 y el 7 y me dice el resultado es 12 vale vuelvo a ejecutar y a continuación lo que voy a decir es y voy a ver si nos da tiempo hablar de funciones vamos a hablar de funciones entonces jose multiplicación 4 3 el estado es 12 vale con lo cual vemos que nos da correctamente break antes de acabar a ver si nos da tiempo yo creo que sí a hablar de funciones sobre todo porque ahora vuestros me diría es vale qué guay esto ha molado que cuando acabe la calculadora te vuelva a preguntar otros dos números se podría hacer pero una forma de hacerlo muy imprimí ti va muy a lo bestia sería esto y repetirlo y repetirlo repetirlo y repetirlo repetir lo que me diréis de esto qué es lo que voy a hacer el qué muy mal mal mal muy mal efectivamente hay un principio en programación que dice que cuando estás repitiendo algo muchas veces en blanco pega es que algo no estás haciendo bien yo fui hace unos cuantos años a un curso como existente donde había había un tío que se llamaba simon a la dais es que es un formador de programación bastante famoso claro como el código o sea como el curso era en inglés el tío usó un término para el que nunca he encontrado traducción al castellano y el término que usó es un code smile code es mail es cuando el código huele mal cuando no sabes por qué pero ves un código y difiere y algo que no me gusta vale entonces uno de los coaches mails que decía era cuando había trozos que se repetían muchas veces que entiendes invención trescientas veces es que no lo está teniendo correctamente al que podrías juntarlo en otra cosa con lo cual a continuación para poder hacer eso os voy a hablar de las funciones y vamos a ver déjame ahora retomamos este programa o sea no quiero como este programa ya ha crecido un poquito de complejidad no quiero meter esto en medio del programa aló recuperamos voy a abrir un nuevo archivo voy a guardarlo y lo guardo como 16 funciones funciones y rompan pam pam pam y ahora digo lo siguiente voy a decirles es una palabra muy rara es definición realmente lo voy a llamar en mi función y voy a poner dos puntos una cosa convenciones y buenas prácticas y yo para empezar que ese país que soy una persona bastante poco purista vale soy muy poco polista pero con los años sí que me ha acostumbrado a que las funciones empiezan con minúsculas mientras que las clases en programación orientada a objetos empezaron con mayúsculas vale esto no es una obligación el programa no va a funcionar mejor o peor por esto pero sí que es una convención aplicada a muchos lenguajes de programación y por tanto como estoy definiendo una función y no una clase y ahora hacemos las clases el lolo empiezo con minúsculas bien entonces no te voy a decir print hola cómo estás así a priori os pregunto qué es lo que ocurriría si yo era ejecuto este programa queríais claro no va a ocurrir nada porque pues porque yo lo que estoy haciendo es cuadrar en memoria una función pero no estoy usando esa función cuando yo uso el comando de f es para definir funciones pero yo ahora puedo decir mi función ahora es cuando estoy usando la función vale entonces pulso f 5 y ahora me dice hola cómo estás porque primero he guardado en memoria mi función vale entonces yo voy a escribir por aquí varias cosas print hoy es miércoles print hoy es verano yo guardo la función ejecutó la función me dice estas tres cosas pero lo interesante es que yo ahora puedo copiar la función varias veces ya lo haremos en un bucle for pero como veremos estos bucles for pues todavía no se puede enseñar así vale pulso a efe 5 y fijaos que lo que hace es que lo que hago es que me ahorro escribir todo esto varias veces es lo que hace la función la función entre otras muchas cosas ya lo ir explicando en próximas clases pero lo que hace es aunar esas piezas de código para poder reutilizar las entonces ahora por último lo que voy a hacer es aplicar esto al ejercicio de la calculadora para aplicar el ejercicio de la calculadora dejadme guardar una copia guardo una copia para que luego recordemos cuáles eran los dos estados de la calculadora calculadora con funciones vale entonces a continuación voy a hacer lo siguiente indica la operación para voy a decir d calculadora calculadora paréntesis dos puntos ya os contaré más adelantado de los paréntesis y para qué sirven lo que voy a hacer ahora es todas estas líneas y voy a pulsar el tabulador para sangrar las para que de esa forma el programa entienda que todas estas líneas están dentro de la función calculadora y ahora a continuación ejecutó este programa introduce tu nombre jose y no ocurre nada más porque pues porque he definido la calculadora pero no he ejecutado la calculadora o sea no os olvidéis que después de definir una función en alguna parte hay que ejecutar la función calculadora s 5 introduce tu nombre jose y se ejecuta pues quiero una suma de cuatro tres y ya está o sea hasta ahora no no ha sufrido ninguna modificación este programa lo único que he hecho es encapsular la palabra veréis que es muy importante encapsular todo este código dentro de una función llamada calculadora y a continuación por último llamar a la calculadora pero claro por qué diríais que he hecho esto pues he hecho esto porque a continuación voy a crear una recursividad es decir la función se llama a sí misma lo cual quiere decir que cuando la función acaba de ejecutarse se vuelve a llamar para que vuelva a empezar con lo cual lo que voy a hacer es que un bucle infinito pero luego ya veréis que podemos finalizar el infinito vale no os preocupéis por eso pero guardo ejecutó tu nombre es josé quiero una suma quiero 4 más 3 el resultado es 7 y ahora elige la operación que vas a realizar quiero una división de 12 entre 3 y el resto 2 4 y ahora vuelve a elegir la operación que vas a realizar quiero una multiplicación de 4 por 8 en los otros 32 y ahora elige la operación que vas a realizar vale trabajar con funciones vais a ver que nos va a dar muchas ventajas no sólo esta ventaja de la recursividad pero desde luego hoy como mínimo nos viene bien para trabajar correctamente esa parte vale bien a continuación a continuación vamos a vamos a ver antes de entrar en materia en la sesión de hoy para empezar voy a decir en base a las a las cosas que me has comentado en el correo con respecto a por ejemplo la base de datos por es para empezar no voy por orden entonces hay que tener en cuenta que como comentaba el otro día dentro de las dos familias principales de base de datos técnicamente todo el mundo le llama pos gres pero es postre sql entonces con esto lo que te quiero decir es que esa base de datos realmente aunque tiene funcionalidad extra con respecto a otras bases de datos pero que hay dentro de la misma familia quiero decirte con esto que tenemos por ejemplo otra base de datos llamada maría debe maría db que de hecho es una evolución de mysql tenemos oracle tenemos microsoft sql server entonces todas estas bases de datos realmente no te digo que son lo mismo pero parten de un mismo estándar que es el sql sql si le echamos un vistazo por ejemplo por aquí en la wikipedia encontraremos que viene de search query language y básicamente es un lenguaje estructurado para realizar búsquedas en base de datos es una estándar y por tanto a partir de ahí hay varias bases de datos hay múltiples bases de datos que se adhieren a ese estándar prácticamente ninguna de las que yo he visto se adhieren al cien por cien esto quiere decir que cada base de datos coge una gran mayoría de sql cambia unas cuantas cositas y muchas de ellas lo que hacen es meter más cosas más cosas con respecto al estándar vale por eso hoy todavía no es momento de profundizar en los conceptos pero básicamente decirte qué postres sql no supone ya lo verás mucha diferencia en cuanto al funcionamiento en cuanto a cómo funciona internamente con respecto a otras bases de datos de tipo sql entonces luego también has comentado cosas acerca de o sea que tu interés es trabajar con data science entonces el campo del data science es muy interesante desde el punto de vista de que de hecho se está construyendo un campo actualmente a partir de la tasa yen hasta hace unos pocos años se suponía que era una rama de la informática pero pues cuantos más años pasan más está claro que el dato saliente es algo que bebe tanto de la informática como de matemáticas como estadística como de un montón de campos más como de la sociología por ejemplo para entonces comentabas en tu correo por ejemplo que actualmente utilizar el lenguaje de programación r para tus trabajos vale entonces vamos a ver el lenguajes de programación aquí estuvimos el otro día total vale r lo podríamos colocar dentro de los lenguajes de alto nivel de hecho r es un lenguaje de muy alto nivel yo te preguntaría y la respuesta es la misma que da todo el mundo porque utilizas r para tus programas verás el lenguaje de programación r más allá de que efectivamente en la universidad la principal ventaja que tiene es que es un sistema es un sistema de programación porque realmente no es solo lenguaje es el lenguaje es el entorno de las librerías lo que tiene es una magnífica proporción entre el esfuerzo que tú aplicas y el resultado que obtienes por ejemplo en muchas librerías de r tú dices quiero dibujar una gráfica que haga no sé qué automáticamente efe la gráfica y tú te olvidas de descargarte librerías de gráficas te olvidas de aprender a trabajar con gráficos 2d o 3d tú simplemente dices quiero mi gráfica y la gráfica aparece en pantalla de hecho hay algunas funcionalidades de r que me tienen muy enamorado son a veces un poco trampas vale para que te quedes en r pero qué es el hecho de que tú pides algo por países y te dibuja el mapita del mundo con los países o pides algo por estados de eeuu o por provincias de españa y te dibuja el mapita correspondiente entonces eso tú no sabes el esfuerzo que ahorra con respecto a tener que hacerlo manualmente sale el ahorro de esfuerzo es brutal entonces que nos da r pues r nos da algo parecido a lo que nos da el lenguaje de programación python para en este caso para hábitat ahora está science que es una proporción muy buena entre escasa dificultad de uso y de aprendizaje y gran cantidad de resultados como te decía el otro día de la misma forma no le pidas a r un rendimiento excelente no le pidas a él que rinda igual que un programa programado en fe pero es que de 3 que no es comparable porque en cp lado te lo tienes que hacer tú todo y cuesta un huevo hacértelo todo mientras que nerea hace splash y lo tienes todo ya hecho la ley quiere decir que el objetivo no es en sí mismo comparar correcto y no solo documentación sino que incluso la documentación a veces lleva los los ejemplos de copiar y pegar y funcionar que eso tienes que te ayuda mucho a aprender el lenguaje yo siempre digo que hay dos lenguajes de programación como por ejemplo java que tú cuando tienes un problema en java vas a documentación oficial de java y parece que la documentación oficial de java esté pensada para que no programe en java o sea parece que la documentación oficial esté pensada para asustarte en la documentación es técnicamente correcta pero cuando eres un megacrack del java tú entras ahí dentro y entiendo lo que está pasando pero cuando yo tengo algún estudiante que me dice oye donde acudo el denominado punto del oficial no porque te va a asustar porque para resolver alguna duda te echan un roi a ccoo que no te puedes ni imaginar vale entonces efectivamente otra de las de los beneficios de r es precisamente lo que se ha puesto lo que se ha puesto de moda hay una cosa que yo te quiero decir de todas formas yo tengo un oráculo que es google trends aunque el programa para un lenguaje de programación r va a ser difícil porque claro r r programming a leer el lenguaje de programación entonces lo que estoy haciendo en este caso es buscar cuál es la frecuencia de búsquedas del lenguaje r no sólo en eeuu lo puede buscar en todo el mundo esto es google trends stents punto google.com lo enseñó mucho en los cursos de marketing porque es una herramienta muy buena y lo que quiero es ver cuánto ha buscado la gente desde 2004 hasta hoy al entonces vemos como el lenguaje r actualmente está en su apogeo vemos también como la gráfica empieza a caer no creo que caiga muy rápidamente pero a diferencia de por ejemplo python es más lo vamos a meter aquí mismo como comparación python lenguaje de programación pero así como por ejemplo python ocurre esto khalid es que ahora mismo está emplear su vida con r lo que ocurre es que ha tenido su moda y parece que ahora mismo está empezando a caer no creo que caiga como te digo en poco tiempo por la sencilla razón de que no conozco nada que se compare a r como para reemplazarlo no es que hombre si está matt lamb pero más largo es otra cosa muy diferente entonces lo que te quiero decir es que siempre hay que tener cuidado con los lenguajes de programación que se ponen de moda en un cierto momento porque en otro cierto momento pueden caer y por ejemplo estas otras cosas que explica el resurgimiento de payton actualmente y es que se está poniendo de moda como lenguaje de programación común a múltiples a múltiples entornos bien vamos a continuar y otras de las cosas que comentadas en tu correo es acerca de introducción al deep learning que realmente en cierta forma va enlazado al data science evidentemente el de planning es un tipo de the machine learning que a su vez es un tipo de inteligencia artificial y data science es otra cosa pero son disciplinas que son primas hermanas porque al final cuando en data science quieres realizar ciertos tipos de cribados de datos las técnicas de inteligencia artificial dentro de las cuales están el de blair ning pueden ser de gran utilidad para realizar esas operaciones de migratoria de atasa jets vale por tanto de la misma forma que en próxima sesión estaremos trabajando con data science y con deep learning con la saliente quería decir de la misma forma estaremos trabajando con mi pierna porque efectivamente comentabas el tema de descubrir el potencial de que eras y de tensor flow yo antes de hablarte de tensor flow realmente te hablaré de por qué tensor flow para mí es más hype que otra cosa es decir que además de los tensores de para qué sirven los tensores en inteligencia artificial porque tensor flow como framework lo que hace es intentar reducir de la complejidad para que puedas trabajar de la forma más sencilla posible pero claro pero tensor flow muchas personas parece que lo conciben como bueno es que si quieres aprender de gente artificial tienes que aprender tensor flow y es como no eso sería como decir si quieres conducirte es comprarte un pelo es como decir a ver no pero es uno de muchos coches que puedes tener pero pero no hay que flipas tampoco es más importante saber por qué los tensores son importantes en inteligencia artificial que exactamente concretamente para qué sirve tensor flow vale y luego y esto ya en el tiempo que nos quede así que por lo menos quiero comentar algo el tiempo que nos quede a la cia a la segunda mitad del curso no ya sólo las estructuras de datos que comentabas en tu correo sino también las estructuras de perdón las los algoritmos de búsqueda de short quick short y todo esto es decir y lo del tema de la complejidad o elevado a 1 o elevado a n y todo esto digamos que algoritmos hay y cuáles tardan más y cuáles tardan menos en función de las estructuras porque todo esto evidentemente quiero decir yo enlazó el punto 3 que me has dicho con el punto 1 ya que generalmente lo de la complejidad y la velocidad de búsqueda en grandes estructuras de datos tiene una importancia muy relativa en programación general es decir a veces es más teoría que otra cosa pero evidentemente en data science cuando en muchos casos trabajamos con grandes volúmenes de datos ahí sí que tiene una importancia más grande es las estructuras de datos correctas para que el procesado de esos datos tarde lo mínimo posible es decir conocer cuáles son los índices de complejidad y cada estructura de datos qué índice contiene para elegir la mejor estructura de datos según el tipo de búsqueda que vayas a realizar así que este tipo si fuera en cualquier otro caso tendría abuso eso es algo bastante teórico y en programación del día a día no tiene tanta importancia pero si la programación del día a día es bilidad adelgaza science evidentemente sí que tiene su importancia clara por eso bueno la cuestión es que quería esperarme para resolver esta duda pero ahora en clase cuando también estuviera tu compañero pero el caso es que no está así que no te has respondido por correo para que ayer también la respuesta pero la verdad nos hemos quedado en el momento y vamos a continuar por donde nos quedamos el otro día entonces abro la carpeta de curso de payton el otro día nos quedamos bueno estuvimos viendo las estructuras de control como por ejemplo live y antes de ir a otras estructuras de control por ejemplo las de bucle y que nos quedara una clase más teórica que otra cosa pues lo que preferí es finalizar la clase del otro día con un ejercicio práctico que es la calculadora con funciones para que pues es lo que te decía no que la clase no quedara tan teórica vamos a hacer lo mismo generalmente en prácticamente todas las sesiones que va a ser empezar con la parte la parte teórica y luego en la segunda mitad de la clase pues ir yendo nos cada vez más a la parte práctica así que para esto a continuación bueno esto lo voy a guardar esto luego lo tocaremos me voy a ir a abrir y dell y de la versión que sea me da igual y voy a crear un nuevo archivo de texto lo voy a guardar y vamos a empezar con la revisión de las estructuras de control de bucle no había escritorio me voy a curso de payton me voy a payton 18 y voy a escribir aquí foro bien la estructura de control force no tiene mucho misterio lo único es que evidentemente se conoce es cómo funcionan otros lenguajes basados en ce pues como veíamos el otro día sí que hay una variación voy a poner el foro y un range dos puntos y fíjate que en el momento en el que puso enter a persona sangría y haremos el otro día que la sangría es funcional y voy a decir print que está es una línea vale acuerdo y ahora salgo del bucle fort como salgo del bucle for algo digo que fort quitando la sangría y digo quita el punto y coma y digo si ves esto es que ya no estamos en el bucle for guardo ejecutó hola muy bien reintsch vale entonces muy bien por en rain si tengo que decir cuál es el principio del rango y cuál es el final del rango entonces voy a decir 1,10 básicamente es lo mismo esto en un lenguaje derivado de fe se formularía por por ejemplo en la ong sería int y es igual a 0 y es igual a 1 realmente para mostrar el ejemplo y es menor o igual que 10 e iu más más entonces en este caso y ya ella evidentemente se abriría al paréntesis ten en cuenta que está de color rojo porque lo he comentado porque si no dará error evidentemente es un poco para comparar lo que ya conoces con respecto a lo que tenemos en python para que veas que realmente es igual pues fuera un range lo que hace es que el iter ador lo aumenta automáticamente por jim reid 110 lo que hace es que va a ir desde el 1 hasta el 10 y es más ésta es la línea coma ejecuto y me dice esta es la línea 1 2 3 4 5 6 7 8 9 técnicamente esto es como poner menor que bien es decir no llega a tocar el 10 de la misma forma yo puedo poner 10.1 entonces lo que hace el sistema es hacer un litera door en este caso de cree mental yo también lo que puedo hacer es aquí en el elemento decirle mira por ejemplo 1,10 y le digo y más más vamos a pulsar f 5 vale y en este caso voy hago el punto y coma pulsamos el 5 y en este caso lo que ocurre es que es igual a más 1 más 1 efe 5 fíjate que lo que hace en este caso es empezar por la línea 2 y así llegar hasta el número 10 en definitiva las posibilidades son parecidas a las que tenemos en un lenguaje de llevado efe pero fíjate que no es exactamente igual vamos a continuar con el bucle wilde donde de la misma forma que ocurre en cualquier lenguaje de programación el bucle for lo que hace es que tiene un principio tiene un final y el programa para automáticamente cuando llega a ese final vamos a ver a continuación qué es lo que pasa en el bucle igual en el bucle while momento voy a crear un nuevo documento lo voy a guardar y en el bucle while lo que ocurre es que voy a decir que por ejemplo número es igual a 1 voy a decir while número es menor que bien dos puntos voy a imprimir hola y ahora te pregunto qué es lo que va a ocurrir si le doy a ejecutar el qué correcto te quedas encerrado en el bucle por la sencilla razón de que mientras que el bucle fortín el iter adora automático en el bucle while no hay un integrador lo que yo tendría ahora mismo es un bucle infinito voy a ejecutarlo voy a pulsar f5 y veo que hola hola hola hola y esto no va a acabar nunca pulso control ce he pulsado el control c simplemente para hacer un keyboard interact y para interrumpir mediante el teclado para forzar una interrupción y ahora es cuando puedo poner por ejemplo o bien número es igual a número uno o bien se acepta la sintaxis reducida la sintaxis abreviada de número más igual a 1 es así que se acepta el incremento no pero el más igual a unos y entonces pulso f 5 y ahora a continuación me dice 10 olas y simplemente el programa acaba vale entonces en este caso suelo decir una cosa y es que hay que tener en cuenta que muchas veces cuando hablamos de bucles infinitos hablamos de programas de los cuales parece que perdemos el control no tiene por qué ser así de hecho es decir hay muchos programas en los cuales de hecho queremos un bucle infinito pero un bucle infinito controlado evidentemente en un bucle infinito del cual nos vamos salir por ejemplo los programas gráficos los videojuegos son muestras de este tipo de casos por ejemplo efectivamente pues sí correcto efectivamente y de hecho ahora en un momento vamos a ir a esa cuestión que es la idea de por recursiva recursiva mente senos repetitivamente por ejemplo poder leer en archivo donde otro programa vaya escribiendo en ese archivo no te digo ya leer 10 veces por segundo pero igual leer una vez cada cinco segundos para ver qué novedades en el archivo y por supuesto por ejemplo representarlos en pantalla antes de continuar y volver de hecho a las funciones hay una cosa de la cual quiero hablar que es la estructura de control switch la estructura de control suites que de hecho como te acuerdas el otro día comenté que no hay switch dentro de dentro de payton y yo durante muchos años me he preguntado el porqué nunca he podido obtener una respuesta cristalina mente clara porque no existe switch dentro de payton y entonces en foros en diferentes foros de programación te digo lo de los foros porque hay veces que lo que dicen los foros escogerá un poco con pinzas pero lo que hoy es que la estructura de control switch es una estructura de control muy pesada desde el punto de vista de la computación y que la estructura de control switch realmente es un montón de yves anidados con lo cual los cadáveres de payton dijeron mira para validar y pge para eso que anide la gente y yo ya te digo que cuando vengo de otros lenguajes de programación he echo mucho de menos la estructura de control suites pero como ahora verás pues hay una forma de replicar la así que yo a partir de ahí digo vía es igual a lunes el clásico ejercicio de switch en programación entonces yo ahora diría switch día y según el día que sea me dirá una cosa o me dirá otra pero no hay eso exactamente no hay suites dentro de payton con lo cual lo que voy a hacer es decir if día es igual a comillas porque es una cadena al lunes en ese caso lo que voy a decir sprint hoy es el peor día de la semana y a continuación voy a decir el if el leaf que es la contracción de elx yf que está en otros muchos lenguajes de programación en otros muchos lenguajes de promoción aparece como el speech en patrones que aparece como el ifd y fría es igual a martes print permite y de hecho me lo voy a copiar en plan plantilla porque así así es copiando y pegando en un momento tengo lunes martes miércoles jueves viernes sábado domingo y a continuación lo que quiero decirte es que existe un caso else y el caso es es cualquier otra cosa que no cuadre dentro de esto entonces hoy es el segundo peor día de la semana ya estamos en el medio ya casi es fin de semana el mejor sí sí correcto esto está estructura de este work around si quieres llamarlo así este atajo realmente se puede hacer en cualquier otro lenguaje de programación pero claro en cualquier otro lenguaje de programación como java si alguien te ve haciendo esto pero si tienes el switch para qué haces esto sabes y eso de hecho se puede ir y vamos a ver yo también te digo que te encontrarás con que soy una persona bastante poco purista en el sentido de que yo soy de la opinión de que si algo funciona funciona y si algo funcionaba para que hacerlo de esta forma si funciona de esa pero ya te digo en python por ejemplo pues esta es la forma de hacer y de simular s switch y mañana es lunes entonces por último yo no sé lo que has puesto pero no es un día de la semana así que guardo f5 y me dije hoy es el peor día de la semana si le digo viernes guardo f5 6 efe 5 y me dice el mejor día de la semana y si escribo longaniza f5 y me dice yo no sé lo que has puesto pero no es un día de la semana para que veas funcionando el caso else que es lo que cualquier otro lenguaje de programación con switch sería el case default es el caso por defecto de cuando no hago no cuadra con ninguna otra cosa por último antes de que me lo digas tu respeto lo digo yo que nos estás dando cuenta pero al al esto no ser un switch no tiene break no tiene la instrucción break sino que automáticamente si no cumple un caso pasa al siguiente no es como lo que ocurre con la estructura de control switch que se ejecuta un caso el caso verdadero sigue ejecutando el resto de casos que pueden dar también verdadero vale pues simplemente eso al no ser un switch real pues evidentemente no se aplica el caso él no es aplicar instrucción break vale continuamos profundizando con lo que empezamos a aprender el otro día en cuanto a funciones el otro día aprendimos el modo más simple de trabajar con funciones que son las funciones vamos a abrir por aquí que es las funciones sin parámetros funciones funciones aquí que son las funciones que como podemos ver aquí no llevan ningún parámetro de los paréntesis y el otro día dije el próximo día o sea que es hoy veremos porque es obligatorio poner el paréntesis y para qué existe el paréntesis así que voy a crear un nuevo documento voy a guardarlo esto se va a llamar funciones con parámetros vale ya continuación lo que voy a hacer es por ejemplo definir una función lo de definir una función en los cursos de payton solo repetir mucho definir una función para que la gente se quede con que des y no function es la palabra clave para crear funciones vale entonces digo test vale definir función y digo saluda saluda me con esta mayor plan y ahora te comentaré un poco lo del camp el case momento entonces saluda me dice print bienvenido jose vicente guardamos y ahora lo que voy a hacer es llamar recordamos que se ejecutó esto no va a ocurrir nada porque únicamente he definido una función pero si ahora llamo a salúdame lo que va a hacer efe 5 es decir bienvenido jose vicente claro de esta forma lo que está ocurriendo es que esta función sólo sirve para saludar a jose vicente si yo quisiera saludar a jaime a jorge oa juan tendría que crear diferentes funciones de salúdame y esto no es especialmente óptimo entonces para aprovechar mejor el funcionamiento de las funciones valga la redundancia existe el concepto de parámetro o parámetros dentro de los paréntesis entonces yo quiero que salúdame me sirva para saludar a múltiples personas entonces pongo aquí el nombre porque pongo nombre porque me lo inventado otra cosa que yo suelo decir esto lo llevo diciendo hace muchos años y lo sigo diciendo es que una gran ventaja de los cursos de programación en español en castellano es que si no habéis escribir algo en castellano es porque puedes poner lo que tú quieras y si me veis escribir algo en inglés es porque tienes que escribirlo tal cual como yo lo escrito es decir porque es un elemento del propio lenguaje de programación y evidentemente no lo podemos cambiar yo puedo cambiar nombre como quien dice longaniza pero no puedo cambiar print no puedo poner imprime porque es una instrucción del propio lenguaje de programación digamos que es una palabra reservada entonces aquí donde pone el nombre pongo bienvenido coma coma nombre ya sabes que la primera coma es estética mientras que la segunda coma es de encadenación de encantamiento que vimos otro día cuidado cuidado porque lo que tengo aquí ahora es un poquito peligroso en el sentido de que tengo una función que he declarado con un parámetro y tengo una función que estoy llamando sin ningún parámetro voy a pulsar de f5 y el sistema me dice esto vale y el sistema me dice a ver tú me has prometido una cosa que no has cumplido me has prometido que me ibas a pasar un parámetro y no lo has cumplido y yo también lo que puedo hacer es por ejemplo por aquí arriba voy a intentarlo salúdame y print bienvenido quien seas vamos a ver si esto se lo come dejame separar un poquito esto pulso f 5 vale y en este caso salúdame no está siendo sobre escrito correctamente quería hacer una sobre escritura evidentemente pero no me está dejando no pasa nada esto lo voy a comentar en forma de acuérdate que puedo comentar me lo comenta automáticamente y salúdame en este caso lo que voy a hacer es poner a josé vicente hablaremos de las sobrecargas más adelante pulso f5 y me dice bienvenido josé vicente salúdame juan pulso de f5 y me dice bienvenido juan es decir la ventaja de todo esto evidentemente es que con una sola función estoy obteniendo múltiples comportamientos de la misma forma que puedo poner un parámetro puedo poner dos pero cuidado si aquí me comprometo a poner dos parámetros aquí lo tengo que cumplir entonces josé vicente 30 juan 40 cuidado ejecutó en este caso me dice bienvenido josé vicente bienvenido juan donde está la edad pues la edad no está es decir la edad la estoy pasando la edad la estoy llamando pero no la estoy utilizando en ningún momento quiero decir que esto no es un error de sintaxis de hecho fíjate que no da error es un error de lógica evidentemente vale entonces lo que voy a hacer en este caso es decir bienvenido como nombre y tu edad es de coma edad coma años así que vamos allá voy a pulsar f 5 y me dice bienvenidos jose vicente y torales de 30 años bienvenido juan y tu edad es de 40 años vale esto es algo que siempre suele explicar de esta forma de una forma lo más sencilla posible cuando llego a este punto generalmente los alumnos suelen decir esto es muy bonito pero esto para qué me sirve a mí pero veremos más adelante que el poder llamar las funciones con parámetros es algo totalmente imprescindible para realizar programas de una mínima complejidad bien y antes de meternos con el trabajo con listas que es lo que en python digamos viene a ser como las matrices en otro en otros lenguajes de programación quiero hablar un poquito de la librería matemática y de las librerías matemáticas de las librerías en python en general voy a hacer un nuevo archivo voy a hacer se iba y antes de eso por cierto quiero hablar de otra cosa que te he dicho hace un momento antes de escribir esto por cierto quiero hacer referencia a un término que he utilizado anteriormente pero no sé si conoces que es el término de kamel cakes entonces lo conoces veo vale perfecto simplemente decir bueno no sé si alguna vez por cierto has buscado en en internet y kamel cakes pero camel keys es que el gráfico es como un dromedario cara y lo otro como se llama lo que no es un temerario un camello un camello que es como si tuviera las letras metidas en las jorobas entonces es un tipo de escritura de código que como te decía el otro día con el tema de las mayúsculas en los nombres de las clases suele utilizar un poco por buenas prácticas vale porque es una costumbre bastante extendida a lo largo de los programadores y con esto te vuelvo a decir que soy una persona bastante poco purista pero dentro de que soy poco purista quiere es que no quiero escribir código que luego solo pueda pasar otras personas y lo entiendan y quiero leer código otra persona y entenderlo bien entonces por eso al final pues quieras que no te acabas adaptando a una serie de buenas prácticas más cara para esto bien pues lo que te decía verás en cuanto a librería matemática lo primero que te voy a decir es que payton hace algo parecido a lo que hace java en el sentido de que java cuando arrancas no tiene prácticamente nada cargado y tú tienes que empezar a cargar librerías para cargar sobre las funciones que tú quieras lo bueno el lenguaje es eficiente porque no carga nada que tú no vayas a utilizar lo malo tienes que saber qué librerías hay y tienes que aprender a trabajar con librerías que a veces no es especialmente fácil con python ocurre lo mismo existen una serie de librerías que vienen ya por defecto con el lenguaje aunque no están cargadas y existe una infinidad de otras librerías que podemos descargar de internet de momento lo que voy a hacer es decir import más el importe es lo mismo que tenemos en hama voy a hacer unas cuantas demostraciones pero también lo que voy a hacer es lo siguiente y es que si me vengo por aquí y busco python más entraremos en la página oficial de la documentación de payton con respecto a las funciones matemáticas vale entonces vamos a ver qué tenemos failing que tenemos combinador es que tenemos factorial es que tenemos redondeo a la baja que tenemos suma factorial que tenemos un montón vale entonces lo que voy a hacer es simplemente copiar y pegar y documentación sobre librería matemática la pego ahí y ahora voy a estas dos líneas y las voy a comentar más cara para que se quede como documentación el que si quieres averiguar más lo tienes en esa dirección entonces bueno por ejemplo lo que quiero a continuación es print y voy a poner más punto y lo que yo quiera lo que yo quiera por ejemplo voy a empezar con la raíz cuadrada que es square ruth s qr te vamos a poner una facilita del número 9 así que pulso f 5 y me dice que la raíz cuadrada straits de la misma forma pongo print y ahora por ejemplo quiero más punto round de 3.3 a cuánto va a redondear el redondeo natural de 3.3 pues evidentemente va a rodear a tres entonces a ver momento me había parecido que el programa de grabar se desarrolló entonces sí le doy a ejecutar veremos como el cuidado más puntos round como momento vale pues voy a poner flor voy a poner ese 5 para comprobar que redondea flor al suelo y voy a poner fail pecho para comprobar que redondea al alza redondea al 4 un momento porque el país son más sí vale no lo acabo de encontrar pero tiene que haber una función por ahí de redondeo ahora mismo pero de momento tenemos las funciones de esta flor para redondela baja failing para redondeo al alza ahora lo buscaré la del redondeo natural y a continuación también dentro de esta librería de funciones matemáticas quiero demostrar que también existen funciones trigonométricas las funciones trigonométricas a mucha gente no le interesan especialmente mucho yo suele decir y tenemos un ejemplo de esto no es precisamente por ejemplo lo que pediste otro día pero veremos un ejemplo de esto que es videojuegos o por lo menos gráficos animados pero por ejemplo en tu caso es importante para el tema de generación de gráficas ya que por ejemplo para gráficas de tarta es importante trabajar con ángulos trigonométricos así que por ejemplo en este caso yo quiero el más punto sin el seno de una constante que es más un tope vale entonces el seno de pi hay que tener en cuenta que para iu son como prácticamente cualquier otro lenguaje de programación trabaja en radiales no en grados sexagesimal es entonces te recuerdo que trabajando en radiales pi son 180 grados sexagesimal es 2 pi es una vuelta entera al círculo con lo cual cuál es el seno que es la proyección vertical de 180 pues es cero vale entonces a ver moment in más verdad que es más con minúsculas efe 5 y me dice que cuidado tu diràs no te ha salido 0 pero sí que me ha salido 0 tú qué dirías por qué claro porque el exponente es al menos 16 o sea esto me ha salido 0 0 0 0 0 0 0 0 0 1 con lo cual prácticamente cero vale esto que te voy a decir no es que tenga mucho valor ahora mismo pero [Música] lo digo porque te acabo de contar un momento que estaba yo ahí haciendo de promoción de otros cursos te acabo de contar un rollo de trigonometría no tengo muy claro si tienes la trigonometría en mente ahora mismo la cabeza lo normal es que no vale porque no es algo que yo no tenga todos los días en mente entonces básicamente para para simplificarlo decirte que dentro de lo que es un círculo lo siento esa patata es un círculo si este es el ángulo cero pues esto es cero esto es 90 por lo que es lo mismo en radiales speed partido 2 esto es 180 por lo que es lo mismo en radiales es igual a pi esto es pero realmente es igual a cero o es igual a 2 p esto es 270 que es igual a acuerdo a partido que a 2 y partido 3 creo que es creo recordar dos tercios de pino no será tres medios de pi algo así con lo cual cuando hablamos del seno hablamos de la proyección vertical y cuando hablamos del cose no hablamos de la proyección perdona no sabes cuando hablamos del seno hablamos de la proyección vertical en el eje vertical y cuando hablamos del cose no hablamos de la proyección horizontal eso quiere decir que la proyección vertical de este punto de aquí como podrás ver es cero si yo por ejemplo cojo mi partido 2 y preguntó por el seno cuál será el seno de mi partido 2 pues será 1 vale vamos a comprobarlo sólo queremos hacernos más que ha dado un repaso que es más partido 2 le doy a ejecutar y efectivamente vemos que el seno de partido 2 es uno vale simplemente y como te digo cuando hagamos este ejercicio de o bien hacer gráficas en python o bien hacer alguna animación en python volveremos a trabajar de una forma aplicada al uso de la trigonometría pero te lo digo porque te acabo de echar un rollo de senos y cosenos y tal y cual y tú si no tienes claramente dirás pues me parece fantástico pero no mentira ahora vale yo lo tengo en mente más clara por el tema de videojuegos que sino tampoco lo tendría en mente entonces lo que te digo es tu de momento confía en lo que te acabamos de decir tú de momento recuerda lo que es grabado en el vídeo recuerda las que mitad este que acabo de hacer y cuando lleguemos a los ejercicios prácticos ahí verás la aplicación práctica de esto que te acabo de decir y verás que cuando hay una aplicación práctica probablemente se quedará en la mente porque si nunca has trabajado con trigonometría es algo que suena a la carrera o instituto pero se ha trabajado con ello ya te lo interioriza es como algo propio qué te sirve para tus cosas debemos continuar pues a continuación un momento y a continuación como te decía voy a crear un nuevo archivo voy a guardar esto como listas y este cuento vamos a ver y prácticamente cualquier lenguaje de programación si hablamos de estructuras de datos volvemos a freeman recordamos que estuvimos hablando en un momento dado de estructuras de datos y hablamos de variables en un momento y hablamos de listas en otro momento las listas son la estructura de datos por defecto que tiene python para almacenar múltiples piezas de información en un solo contenedor entonces si yo por ejemplo digo edad es igual a 40 pues no tiene mucho misterio vale porque la edad de una persona es una pero si yo no quiero guardar edad sino que quiero hacer una agenda yo digo agenda es igual a jose y ahora puedo venir aquí abajo y poner agenda es igual a ‘juan este código es válido este código es legal pero no me sirve para nada porque es que ahora pongo print agenda ejecutó y me dice agenda es igual a juan es decir lo que acabo de hacer es reemplazar porque para eso se llama variable por cierto porque su valor puede variar antes valía jose ahora vale juan pero el problema es que he perdido a juan cuando yo quiero hacer una agenda yo quiero poder guardar múltiples piezas de información y no perderlas yo puedo hacer lo siguiente yo puedo hacer agenda 1 y agenda 2 y agenda 3 y agenda 4 y haciendo a 5.525 yo puedo crear tantas variables como quiera y ser abengoa agenda 1 me recuerda que es jose y si ahora vengo agendados me recuerda que es juan pero hay un pequeño problema y es que esta forma de guardar datos no es especialmente eficaz y luego hay otro pequeño problema y es que en la gran mayoría de lenguajes de programación y payton es uno de estos casos las variables no se pueden declarar en tiempo de ejecución señora estoy programando yo puedo crear tantos valores como quiera pero cuando le doy a ejecutar cuando le doy a correr el programa en ese momento no puedo crear nuevas variables es lo que se llama en tiempo de ejecución por cierto que ya que me comentaste el tema de inteligencia artificial una de las grandes limitaciones de cualquier lenguaje de programación moderno actual es precisamente no poder declarar cosas en tiempo de ejecución porque en una inteligencia no digo ya humana sino prácticamente cualquier tipo de inteligencia se están creando nuevos conceptos y nuevos contenedores en cualquier momento pero bueno pongamos que de momento no estamos ahí todavía y pongamos que de momento esto no es demasiado cómodo agendados agenda 3 agenda 4 agenda lo que sea entonces yo a partir de ahí lo que puedo hacer es decir lo siguiente agenda y puedo poner un par de corchetes y puedo poner jose vicente como ‘juan coma jorge como jose con el cable con la comedia guardo efe 5 y evidentemente no tengo nada porque lo único que 3 declarar una lista pero todavía no he usado la lista ahora vengo print y con cuidado pongo agenda así que pulso f5 y lo que hace el programa es vomitar la agenda entera y me dice con suficiente juan jorge y josé pero yo puedo venir aquí y puedo decirle quiero agenda de cero es decir quiero agenda corchete cero y lo que hace agenda corchete cero es sacarme el primer elemento de la lista que es jose vicente las listas al igual que las matrices en otros lenguajes de programación empiezan siempre por el índice cero agenda de uno es igual a efe 5 y es juan es el segundo elemento que ponga uno es el segundo elemento agenda de dos es jorge agenda de tres es jose con esto tengo lo que se llama una lista o una matriz unidimensional pero sigue sin ser una agenda demasiado útil porque yo probablemente lo que querría es una agenda multidimensional vamos a verlo a continuación para ver una agenda multidimensional voy a guardar voy a listas multidimensionales y digo lo siguiente la agenda es igual a algo otra forma es decir agenda de uno es igual a jose para quiero print ej pero técnicamente esto lo puedo hacer es legal pero no es muy limpio lo mejor es empezar con el índice cero efe 5 en este caso dice elisa sainz min es euro friends esto quiere decir que aquí tengo que decir le voy a poner 100 elementos vamos a ver aquí tengo que decirle cuántos elementos van a haber qué quiere decir esto pues que yo pongo 101 le había efe 5 y me vuelve a dar error pero yo vengo por aquí y me digo 99 y f5 y hoy no indexa euro frames voy a probar 95 vale esto no me cuadra tanto y 5 porsche es el ok vale 0 bueno cuidado claro pero también te digo que sea aquí pongo 95 aquí pongo 95 bueno pues pues hoy no quiere vale no pasa nada vamos a 200 y ahora hablamos de esto antes que nada vamos a ver payton es uno de los lenguajes que trabajan con la filosofía de estructuras de datos e inmutables hay lenguajes de programación que trabajan con estructuras mutables y con estructuras inmutables las mutable son aquellas las que no me hace falta definir cuál va a ser la longitud de los datos porque yo voy a añadiendo el sistema va añadiendo a la pila y aquí no pasa nada los sistemas los lenguajes de programación que trabajan con inmutables son aquellos en los cuales tienes que reservar el espacio que vas a utilizar son menos eficientes en el sentido de que no te permiten crecer de forma ilimitada pero son más eficientes desde el punto de vista de que reservan un espacio de memoria y por tanto luego se ejecutan de forma más rápida vale por tanto tiene su tiene su explicación bueno pues voy a decir en este caso que agenda de cero es jose vicente como un número de teléfono como un correo electrónico y mañana ejecuto y en este caso me dice todo estoy aquí pero qué es lo que ocurre si yo le digo que quiero agenda de 0 de 0 pulso f 5 y lo que me dice es que solo me devuelve jose vicente es decir el registro 0 elemento 0 si yo le digo que quiero el registro 1 me devuelve el número de teléfono porque es el registro cero el elemento 1 creo que hoy he puesto un punto y como aquí por cierto que no tocaba creo que lo podrás ver mejor si pongo agenda 1 que es juan voy a poner 1 1 1 proponer aquí juana entonces pulso f5 me dice que está afuera agenda 1 y sauro french vale bueno pues ahora ahora veremos esto por donde pita porque he cometido algún error pero ahora mismo no acabo de ver que entonces la idea de esto de aquí es que yo puedo tener un registro que a su vez tiene diferentes elementos es decir yo que es lo que acabo de hacer pues mira lo que acabo de hacer para que te hagas la idea voy a abrir una hoja de cálculo es una matriz multidimensional una matriz multidimensional que en este caso tiene dos dimensiones donde yo tengo por ejemplo el nombre el teléfono y el correo yo tengo un nombre un teléfono un correo un nombre un teléfono un correo un nombre un teléfono un correo la idea de todo esto es que si yo quiero buscar algo en una matriz multidimensional tengo que saber cuál es su coordenada x y cuál es su coordenada y y en la intersección entre la coordenada xy la coordenada y es donde voy a encontrar el dato esto funciona exactamente igual que es que básicamente lo que está haciendo es indicar cuál es la coordenada x cuál es la coordenada y y a partir de ahí encontrar el gato vamos a ver las duplas es otra de las estructuras de datos que vienen por defecto en python y que no son tan normales en otros en otros lenguajes de programación antes de hacer un ejemplo concreto de tu plas o bueno la verdad es que podría hacerlo directamente yo te pregunto en qué otro contexto has oído hablar de las duplas vale muy bien pues te comento el otro contexto en el que oímos hablar de las duplas es en bases de datos es decir una dupla es un registro de una base de datos es una fila de una base de datos verás te cuento vamos hablar de tu plazo vengo por aquí vengo por aquí voy a payton 25 y voy a hablar de tu plas verás la idea es la siguiente mientras que las listas como ya ya hemos visto son notables y van con corchetes con las duplas ocurre algo parecido son inmutables y van con paréntesis voy a poner esto como comentario a continuación hago lo siguiente voy a decir que por ejemplo vamos con embutidos longaniza es igual a 1 2 3 esto es una dupla mientras que morcilla es igual a lo pudo copiar sabes hay a 1 2 3 entonces en este caso por ejemplo lo que voy a hacer es demostrar como el acceso a la información es exactamente el mismo voy a decir print y vamos a decir lo siguiente print longaniza de uno en ambos casos se usan los corchetes y print longaniza de uno me va a dar dos a continuación esto es la tabla morcilla de 1 y me da exactamente lo mismo me da dos giros la diferencia en este caso una de las funciones que podemos utilizar por cierto sprint longitud leen de la longaniza pulsado efe 6 vale me dice que es 3 y a continuación quiero la longitud de la morcilla y me dice igualmente que es 3 la diferencia en este caso es que yo puedo venir por aquí y puedo venir puedo decir longaniza perdón morcilla primero morcilla de 0 1 2 3 es igual a 4 vamos a ver lo que dice ahora esto es lo que me está fastidiando un poco mientras que vengo por aquí ah perdón perdón perdón ron no la organiza de 3 es igual hay lo mismo no soportan en la tu plan no soporta asignación de ítems vale vamos a ver cuando hablamos de trabajar con tu plazo cuando hablamos de trabajar con listas o en definitiva cuando hablamos de trabajar con grandes estructuras de datos finalmente llega un momento en el que queremos poder guardar esta información a alguna parte por ejemplo al disco duro yo por ejemplo que haría a continuación con esto es decir que haría a continuación con un ejercicio en el que estoy hablando de listas o de tu plan pues lo típico lo clásico es hacer una agenda una agenda de teléfonos en la cual yo voy metiendo datos como el otro día hicimos una calculadora vale pues meter una general de teléfonos que es lo que va a ocurrir cuando yo acabe después de un rato de meter registros en la agenda de teléfonos que dirías que voy a querer el que es guardarlo evidentemente por eso antes de continuar ahora luego otras formas haré un push a la esta a la estructura de datos pero de momento vamos a ver lo que voy a hacer a continuación es mostrarte cómo leer y cómo escribir archivos entonces para ello para ello en primer lugar vamos a ver en primer lugar voy a guardar me este archivo vengo aquí a 26 y escribir archivo escribir archivo en python es muy sencillo porque archivó es igual a open y mi archivo txt entre comillas punto txt con el flag de cómo voy a abrir ese archivo para una lista completa de flags los puedes ver en python open y verás bueno están los documentos en oficial igual voy a a esta página y verás que si yo he puesto una es de apem de añadir entonces las flags son r para solo leer w para escribir x para creación exclusiva para aprendizaje para añadir que en modo texto ve en modo binario y plus para actualizar panel cuidado con el modo w porque lo que hace es que trunca el archivo si existe salmón w es me da igual lo que hubiera lo machacó y escribo lo que quiero escribir por eso yo soy más de poner el modo a que es respeta lo que hubiera y escribir a continuación vale entonces yo vengo por aquí esto lo puedo cerrar ya esto también puede ser área a derecho y a continuación lo que voy a hacer es decir lo siguiente archivo punto right y este es un texto que estoy escribiendo y es una buena costumbre en python y en cualquier otro lenguaje de programación archivo punto close que es cerrar recursos una cosa esto que tenemos aquí archivo es igual a open eso está haciendo un montón más de lo que parece lo que está haciendo es asignar a archivo no una variable y una función sino todo un objeto que es el objeto que me permite tratar con archivos pero todavía no hemos visto clases y objetos entonces cuando lleguemos a esa parte del curso te volvería a recordar esto para que para que veas que payton tiene una interfaz muy fácil pero que hay realmente en esa asignación está ocurriendo mucho más de lo que parece entonces en primer lugar en curso de payton quiero que te fijes en que no hay ningún archivo txt son todos archivos de payton pero si yo le doy a efe 5 verás como realmente parece que no ha ocurrido nada pero si yo me vuelvo a esa carpeta verás que ahora en la parte de arriba del todo pone mi archivo punto txt y ahora sí además hago doble clic en ese archivo verás que pone este es un texto que estoy escribiendo luego es cierto que el programa ha sido capaz de abrir un archivo y escribir información vamos a vamos a la siguiente parte donde la siguiente parte como te puedes imaginar es leer archivos entonces para leer archivos evidentemente lo que voy a hacer es archivo es igual a open mi archivo txt pero convendrán conmigo que si voy a leer pues cuidado esto es leer archivo pues el flag correcto es la r vale entonces a partir de aquí yo lo que puedo hacer es lo siguiente vamos a ver yo puedo decir archivo voy a decir print print archivo punto rif line red line con minúsculas recuerdo y recargo el frente y me dice este es un texto que estoy escribiendo lo que hay en azul abajo del todo pero hay un problema y es que pulso enter esta es la segunda línea del documento cuando salgo ejecutó y este es un texto que estoy escribiendo es decir si ejecutó varias veces es cuando este es un texto que estoy escribiendo y esta es la segunda línea del documento es decir read line lo que hace es leer una línea y deja el cursor al final de esa línea deja el cursor quiere decir que si vuelves a invocar a ese comando realmente lee la siguiente línea hay otro comando por cierto déjame que déjame que comente esto para que lo tengas como documentación que es archivo punto read que es léeme lo que es que de un solo golpe te lee todo el documento y luego también lo que puedes hacer evidentemente es con la estructura de control porque hemos visto antes por ti bien range de 0 a 10 por ejemplo las líneas que tú quieras print bueno de hecho esto y lo que hace es f 5 lee las primeras dos líneas y luego evidentemente lee 8 líneas más que realmente no están pero técnicamente el programa las ley evidentemente lo que podemos hacer es dentro de este de range meter un if y decir si la línea está vacía haz un break es decir si la línea está vacía es que ya has dejado de leer y no continúes leyendo vale decir hay múltiples trucos para eso y antes de continuar algo que muchas veces doy por hecho me costó años que alguien me lo dijera pero verás que siempre en los bucles foros se ponen la letra y sabes por qué es pues yo tampoco chávez ha metido un montón de años eso poniéndola ahí porque todo el mundo la pone y un buen día en un curso dejaba un alumno me dijo por qué se pone siempre un ahí y dije pues mira sinceramente no lo sé y entonces una alumna que había en la clase dijo yo sí que lo sé se pone la iv porque es un integrador y uniter ador es un número que una variable que está especialmente diseñada para ser integrada para para ir pam pam pam uno detrás de otro entonces tú puedes poner cualquier letra evidentemente pero se suele poner la y de iter ador y dije pues es muy muy bonito es de la misma forma que cuando haces gráficos en todos los programas se da la circunstancia de que tenemos los ejes x y en los programas que son 3d tienen también la zeta la profundidad y yo nunca me había explicado porque en a lo largo de los programas siempre la x es de color rojo la hay y es de color verde y las veces de color azul o sea da igual a qué programa vayas siempre será por suerte porque esto está bien siempre será la misma la misma nomenclatura de color pues yo nunca lo había sabido y un día un alumno me dijo a por si está clarísimo fijamos lo que está por que no lo veo claro entonces este alumno me dijo sí hombre es x y z porque es rgb rojo verde azul el sistema de color rojo verde azul y dije apuestos fíjate qué sencillo que era y nunca me había dado cuenta vale pues hay veces que es esto hay convenciones o hay reglas que se dan por hecho y no sabemos de dónde vienen y muchas veces tienen un por qué muchas veces realmente tienen una historia detrás bueno pues vamos a continuar vamos a continuar yo vengo por aquí y me puedo decir lo siguiente sí archivo read line es igual a nada en ese caso break y f-5 a ver si no está allá y fíjate sí pero no vale vale porque el segundo read line pero ha cogido si recuerdas que antes había lo tienes aquí había este ha hecho uno en blanco porque ha detectado uno en falso en blanco y luego el siguiente es cuando ha detectado el segundo en blanco ha parado pero bueno pero para que te des cuenta de que por ejemplo este esa estructura de código funciona también te digo que así aprovecho y te presento los ‘breaks’ porque la verdad es que no sólo no sólo programar con ‘breaks’ pero mira pero de vez en cuando vienen bien para parar la ejecución de un bucle que ya de paso lo hemos visto vale pero bueno no se podría establecer una excepción es decir algo que como estoy viendo que en la segunda línea tengo un espacio pues con un contador por ejemplo a partir del segundo contador pues en ese caso corta la ejecución quiere decir que y para eso podríamos utilizar la lógica booleana que vimos el otro día es decir contador es igual a cero yo vengo por aquí y digo contador más igual a 1 o sea añade el contador y digo si archivo read line es igual a cero and contador es mayor que 2 lo sé pues en ese caso para es decir cualquiera de las ejecuciones que de las condiciones que te encuentres he puesto hambre a ver mayor que 3 el mayor que 5 vale no está qué raro no está teniendo en cuenta esto lo cual me extraña mucho pero no enrollar los ya la buscaré qué le pasa esto prepararnos para que vieras que se puede meter un centro de fort y meter el break y parar la ejecución cuando se quiera vamos a ver valía a continuación verás a continuación en la próxima clase y quiero empezar con interfaces de usuario pero no quiero empezar todavía en esta clase y te voy a explicar por qué voy a crear una mini interfaz de usuario y ahora a continuación verás verás el por qué vamos a ver pero para que vale para no quedarnos sólo hemos anillo voy a guardar esto voy a llamarlo 28 pk inter voy a estar trabajando con la librería de interfaces de usuario por defecto y voy a decir from beckham inter import asteriscos mucho dejaba porque es lo mismo es de teca inter dámelo todo esto no es muy eficiente porque lo que está haciendo es cargar todos los elementos de la librería de interfaces de usuario sin saber realmente cuáles voy a usar pero para aprendizaje suele usar esto que estuve me lo todo yo haya luego veré lo que uso y cuando haga programas de verdad pues ya sólo luego acabaría importando lo que realmente vaya a usar pero de momento como no sé que hay es dámelo todo y entonces yo ahora vengo y digo lo siguiente efe es igual a frame y dijo wyss es igual a 300 height es igual a 300 y pongo efe pack y voy a decir en este caso que el parking debe explicar esto el pánico x en horizontal es igual a 30 y el para bing en vertical es igual a 30 si todo va bien pulso f 5 y lo que ocurre es que sale esto sale un programita en ventanas entonces ya así de sencillo es crear un programa en ventanas en python o sea realmente fíjate que no hace falta mucho más déjame que lo cierre y simplemente para acabar voy a decir en este caso bueno título es igual a un label que es igual a efe efe quiere decir que estoy llamando al frame y texto es igual a holanda ni y ahora lo que voy a hacer es título punto pack no punto pack y voy a decir side ese centro side es igual a top si ahora ejecuto verás que aparece el programa pero verás que aparece un hola dani por aquí dentro que además verás que está side top alineado en la parte de arriba al entonces como verás a partir del próximo día crear aplicaciones de interfaz de usuario gráfica en python es algo muy sencillo como verás con unas pocas instrucciones estamos funcionando pero no quiero que ocurra esto en esta clase porque si lo hago no no cerraré ningún ejercicio y todo lo que te he contado anteriormente se va a quedar en el aire se va a quedar como para que me ha contado esto como un montón de conocimientos sin aplicación entonces vamos a crear un segundo programa de línea de comando pero tampoco quiero que esto parezca un curso aburrido donde mostrar todo los días trabajando con línea de comandos que también quería decirte que a partir del próximo día estaremos trabajando evidentemente con programas de interfaz de usuario verás que de hecho es mucho más sencillo y mucho más agradable que en otros lenguajes de programación

hoy lo que quiero como te digo es crear una agenda voy a hacer una cosa voy a 29 agenda 1 y lo llamo agenda 1 porque es muy probable que este ejercicio a lo largo de los próximos 40 minutos vaya creciendo agenda 2 agenda 3 agenda cuadrillas y entonces vamos a ver en primer lugar programa agenda por jose vicente carratalá esto lo cojo y lo comento ahora siguiente a continuación lo que voy a hacer es decirle al sistema lo siguiente agenda es igual a voy a hacer una prueba porque antes me he quedado con la cosilla jose coma teléfono coma correo con lo cual print esto es una lista print agenda de 0 y me va a decir jose vale ahora dando un segundo porque ahora a continuación vamos a ver voy a parar aquí jose voy a poner aquí juan voy a poner aquí jorge y si no me deja hacer esto porque ya hemos visto que no me deja 0 1 2 3 pues voy a poner aquí y jose efe 5 ya hemos visto que no me deja porque da error pero sí que puedo hacer lo siguiente que es agenda jose entonces pulso f5 a ver el momento en todo momento así perdón como es una función entre paréntesis vale sigue diciendo jose vamos a ver pero sí le digo 0 1 2 3 llamó el número 3 le di a ese 5 y me vuelve a decir voy a hacer una cosa voy a poner joselito para comprobar que realmente me está leyendo el nuevo elemento que me tiro vale entonces con esto lo que quiero es dejar resuelto lo que hemos visto antes en cuanto a la al añadido inmutable de nuevos elementos porque evidentemente si creamos una lista necesito poder hacer eso vale bien entonces ahora con esto vamos a hacer lo siguiente agenda es igual a esto para cada elemento quiero josé vicente quiero un teléfono pero esto claro yo puedo hacer esto es decir yo puedo hacer lo siguiente nombre como teléfono coma email esto fuera un segundo efe cinco hembras fuera de la lista euro friends le digo el cero y me dice esto de aquí con lo cual ahora le puedo decir 0 de 0 f5 y únicamente el nombre es decir lo que esto es una matriz bidimensional metida en una línea con esto a continuación de lo que puedo hacer es meter más elementos vamos a ver ahora haciendo punto apple y voy a escribir esto nombre 2 teléfono 2002 ejecutó y ahora lo que hago sprint agenda a la bestia efe 5 y ahí podemos ver que lo que ha hecho es que me ha aprendido a una lista de aprendiz ado otra tengo una lista de listas con esto lo que quiero decir es que print realmente más que print kerwin vale e introduce el nuevo nombre en la agenda y digo nombre es igual a input podemos ver aquí recordamos el código entradas abro con python y edad es igual a input con lo cual le puedo decir el nombre es igual print e introduce el número del teléfono el teléfono es igual a input voy a quitar espacios porque este programa va a crecer print introduce el correo correo es igual al input si yo ahora ejecutó veremos que introduce el nuevo nombre juan el número de teléfono teléfono y el correo juan correo puntocom problema el sistema lo que hace es que se sale entonces ya continuación lo que haré por ejemplo es pues definir esto como una función vuelvo a decir la palabra definir para ver mi agenda no lleva parámetros de momento y al final ejecución recursiva mi agenda para que no se salga del programa entonces f5 juan el que ha pasado juanes no de find qué puedo decir es interesante es interesante que haya ejecutado esto cuando yo ni siquiera lo he llamado ahora no sé qué cosas vale mi agenda que causa más rara pasado no no porque no se debería haber ejecutado vale pues sale juan teléfono y correo juan otra vez y ahora nuevo nombre en la agenda entonces yo lo que quiero a continuación es antes de hacer nada más lo metemos en la lista y sacamos la lista por pantalla para comprobar que estoy mutando el contenido de esa lista vamos a ver un momento y a continuación lo que hago es lo siguiente digo agenda aquí quiero el nombre aquí quiero el teléfono y aquí quiero el email correo yo creo que esto nos lo podemos saltar porque ya hemos visto que funciona y antes de nada antes de salir antes de volver realmente quiero que saque la agenda pulso de f5 introduce el nuevo nombre juan número de teléfono es de teléfono el correo es juana roba lo que sea y tengo aquí nombre teléfono email y juan introduce el nuevo nombre es josé número de teléfono tal jose correo y comprobamos que tenemos a juan y comprobamos que tenemos a jose con lo cual lo que estamos haciendo de esta forma es en este caso meter elementos dentro de la agenda ahora yo lo que quiero es lo siguiente ahora yo lo que quiero es que si yo ahora por ejemplo cierro este programa soy yo creo que lo voy a hacer un nuevo archivo si yo cierro este programa toda la memoria se va a la porra es decir pierdo a juan y pierda a jose por eso es importante que por ejemplo cada vez que hago un elemento nuevo añadido lo ponga también en un archivo de texto entonces voy a hacerlo aquí vale con un keyboard interna lo que ha hecho es control ce para salir del programa esto lo guardo como payton 30 y como te había dicho agenda 02 y así luego puedes ver cómo va creciendo el programa qué pasos hemos dado y ahora hago lo siguiente y es que de hecho se utilizó el código esto fuera esto es leer archivo y hago esto copio pero cuidado aquí porque esto va dentro de la agenda agenda txt y lo que voy a hacer claro en un archivo de texto no puedo guardar una lista porque las listas son una estructura de datos que en memoria pero no puedo meterlo tal cual en un archivo entonces no sé 7 si estás familiarizado con los csv es con los archivos csv vale pues los archivos psv por ejemplo son un candidato para guardar información de tal forma que podemos convertir una lista en un csv y más adelante un cese o en una lista entonces lo que voy a hacer es lo siguiente lo que voy a hacer es esto no sé si me lo va longaniza es igual a esto y coma creo que ahí sí que me lo va a como contra barra m para bajar la siguiente línea y ahora lo tengáis o lo llamo longaniza porque es como que está hecho por varias partes como la localidad entonces guardo f5 nombre juan en el número de teléfono correo juan correo bien vamos a ver y el argumento debe ser string y no una dupla toma lo ha reconocido como tu plan vale no sé por qué cuadra porque lo reconoció como tu plan pero pero lo que puede hacer es forzar el dato también te lo digo cuál bueno forzándolo con un string hemos conseguido que el programa no entienda que es una tabla sino que entienda que es un string de hecho ahora me voy a el curso de payton me voy a agenda y comprobamos como en agenda me ha guardado esto vale ahora bien eso me sobra me sobra me sobra bastante entonces lo que voy a hacer es esto en la r2 contra el xerez efe 5 juan número teléfono correo vale para la ejecución vale no solamente las comas me lo ha metido en ese formato casi casi que me interesa y todo casi que me enterase ahí todo vale y el momento right line voy a vaciarlo 5 teléfono correo y el raid line vale es que quiero meter una nueva línea pero no me deja pues me voy a meter esto y ya está lo meto como dupla luego lo dejamos y ya está entonces ello a partir de aquí voy a volver a editar el archivo creo que nos ha guardado nada en este caso no vale yo lo que puedo hacer es lo siguiente vengo por aquí vamos a ejecutarlo quiero a juan número y juan quiere ba jorge número y jorge y ahora salgo del programa ok que es lo que tengo en el archivo de agenda bueno pues lo que tengo en el archivo de agenda realmente me sirve ya como datos estructurados o sea lo puedo tener como datos para ahora a continuación convertirlos en una en información que venga ahora el problema de esto es que estos datos si te fijas los ha metido como de hecho los ha metido como tu plan cuando me gustaría tenerlos como como lista lo que te quiero decir con esto es que estaba pensando cambiar el programa de listas a tu plan pero claro hacer una pena va a ser posible lo que necesito en todo caso es más adelante al principio del programa cuando arranca el programa leer el documento de texto y cargar el documento de texto como sabes como una lista puedo hacer lo siguiente deja de pensar pues voy a probar esto y es que longaniza más más y a este más le pongo contra barra m limpio esto cierro el archivo ejecutó el programa juan portal juan jorge número jorge cierro el programa abro la agenda ahora sí vale y ahora el problema es que los tengo todos juntos con lo cual si los tengo todos juntos ahora si es cuando aquí en el más puedo meter por ejemplo un separador qué es bueno voy a meter la coma estoy aquí teléfono y correo entonces si ahora ejecutó el programa juan teléfono juan cierro el programa abro la agenda y tengo juan coma teléfono correo electrónico vale porque las comas iguales que otras formas nos han venido bien otras veces nos han venido bien para concatenar strings en este caso es que fíjate que todo indica tanto cuando ha guardado como cuando ha dado error que lo estaba convirtiendo en una dupla de hecho fíjate que le ha metido los paréntesis que yo nos los había metido entonces la forma original de concatenar es con coma pero bueno en este caso como con coma lo ha cogido como como si ron a tu plan lo que ha hecho es usar el más como si fuera un lenguaje derivado de f ya sabes el otro día que comenté que no me gusta nada el signo más porque es ambiguo porque a veces cuesta saber cuándo es una suma aritmética y cuándo es una concreta de acción pero bueno un momento que me estoy quedando sin luz a encender a la lamparita vale a continuación ahora lo que podemos hacer vamos a ver lo que podemos es el programa y empezar a digamos leer y empezar a partir para ello voy a voy a hacer un new file voy a llamar a esto payton 31 no va a ser agenda 2 sino que va a ser explica verás y con esto te digo lo siguiente cierro por aquí esto es escribir quiero leer quiero es pleito voy a leer agenda punto txt y ahora lo que quiero es línea es igual a archivo punto red libro pero qué problema tengo ahora le voy a dar a efe 5 y me dice juan el teléfono y el correo electrónico es decir ha leído correctamente esa línea pero yo a continuación de planteó esa línea es una lista de momento no de momento esa lista esa línea perdón es un string si fuera una lista aparecería con corchetes entonces hay una instrucción dentro de las operaciones de tratamiento con cadenas que las iremos viendo durante durante el curso que es una serie de herramientas que son imprescindibles que es la herramienta split entonces partido es igual a línea punto split y split le tengo que decir cuál es el carácter de partir que en este caso recuerda que ha sido la coma podría haber sido cualquier otro pero he usado la coma base en este caso les voy a decir ahora dime print partido de 0 efe 5 y me dice que es juan si te fijas ahí sí con el split dejamos entre comillas por arte de magia acabo de convertir un string algo que realmente es una lista si yo ahora vengo aquí y le digo no me des partido de cero dame partido fíjate que cuidado cuando la contra pero esto es un string pero fíjate que esto hoy perdón fíjate que esto es un listo de verdad entonces es split como una de las herramientas que tenemos de tratamiento de cadenas es importante porque nos permite convertir nos permiten leer de un archivo que es un string y convertirlo a un listo entonces ahora si puedo venir aquí puedo venir a agendados puedo venir a guardar lo como recuerdo como python 32 agenda 3 y digo antes de nada vamos a cargar los registros que teníamos en el archivo de texto es como léeme el estado anterior entonces yo vengo aquí y digo archivo es igual a open agenda punto txt y digo en reims vamos a leer 10 10 líneas un momento vale donde está en la pena aquí y le digo a un saber nueva línea es igual un momento espera archivo con turín vale archivo read split pero punto split de coma y ahora agenda nueva línea y ahora antes de seguir dime en qué estado está la agenda entonces tengo por aquí y digo print agenda vale darte cuenta déjame que perdón déjame que te esto pulso f 5 a ver si no explotó vale pulso f 5 y fíjate que me ha pillado ese juan donde estaba ese juan pues ese juan estaba en el archivo de texto te das cuenta vamos vamos a continuar la verdad ejecutó la agenda efe 5 ningún nombre esto josé que se vale jose número teléfono vale me lo invento y jose correo puntocom vale tenemos ella josé ahora salgo cierro pero sabes que cierro o cierro cierre super cierro cierro cierro todo abro la agenda y la tengo a juan y tengo a jose cual le tengo exacta jose con su correo electrónico y tal y ahora vuelvo a y del solo hablo desde cero para que veas que que no recuerdo nada para que veas que todo ha guardado ha quedado cuando guardo de verdad y ahora abro la agenda le doy a ese 5 y antes de empezar dice mira aquí tienes a juan y aquí tienes a jose juan jose momento que está pasando aquí contra barra n 1 cuidado porque jose no aparece muy bien no aparece muy bien parado vamos a ver temas juan y tengo a jose no está muy bien pero por lo menos me está cogiendo ajo se ve el correo electrã del archivo de texto quiero decir que antes de nada carga lo que ya tenía en memoria vale ahora vamos a ver qué pasa aquí agenda ap en nueva línea archivo agenda txt nueva línea a no no no nos red line madre mía read acuérdate que leía todo el documento red line lee una línea vale control cf5 ahora sí vale ahora fíjate que tenemos allá juan tenemos allá jose y tenemos unos registros vacíos entonces fíjate que ya tenemos una agenda de teléfonos donde yo cada registro que voy metiendo lo va guardando en la en la agenda de teléfono si quieres ya podemos ya podemos mutilar esto porque ya no es necesario porque ya estamos viendo que funciona con lo cual sería momento de empezar a meter diferentes funcionalidades a la agenda por ejemplo igual que el otro día hicimos dime la operación de suma resta multiplicación división en esta agenda de hoy podríamos decir dime qué quieres introducir un nuevo registro o buscar un nuevo registro o listar la agenda vale entonces vengo por aquí y digo menú inicial y digo print escoge tu opción uno e introduce nuevo registro y entonces 2 y 3 esto es listar registros y buscar registro así que opción es igual a wood y aquí es donde por ejemplo podríamos trabajar con if sí podríamos hacer el ife antes pero bueno entonces si opción el cuidado el innova con paréntesis si opción es igual a 1 en ese caso todo esto de aquí va con sangría porque está dentro de la opción 1 y si legislación de los x no pasa nada entonces yo vengo por aquí y argumento voy a ejecutar qué quieres pues quiero dos pues nada no está la opción del programa quién lo son tres pues tampoco está al cien pero tres programadas pero que quiero la opción 1 pues venga posible el nombre vale entonces de esta forma voy a programar la opción 2 te dejaré la opción 3 a ti para que lo hagas como deberes para el miércoles vale pero arte de hoy alguna pista pero verás opción 1 pues yf opción es igual a 2 y voy a decir lo siguiente print bueno sabes qué en reims y así te dejo ya los deberes casi hechos de 1 a 20 y pam pam pam pam print print agenda de iu con eso ya lo tenemos voy a probarlo ese 5 quiero listar los registros con lo cual me diste los registros cuidados por qué me causa error que es list index auro brains vale pues lo que puedo hacer en lugar de 20 le puedo decir te acuerdas lo que vamos adelante es la longitud leen leen de agenda y así en teoría no se debe salir del rango vale dos listas registros ok vale y ahora tres buscar registro entonces con esto lo que vamos a hacer es ir cerrando la clase i faltan momentos todavía pero te voy indicando cuál sería la forma de resolver este ejercicio de dvds la forma de resolver este ejercicio de beber es realmente sencilla y es que yo aquí he usado un foro el foro lo que hace es recorrer sí o sí todos los registros de la agenda una forma que puede utilizar insisto que no estamos todavía trabajando con bases de datos porque esto en bases de datos sería una petición sql con un web pero una forma que podemos tener es que de paso que recorro el registro lo que hago es buscar por ejemplo estoy buscando por nombre puedes decir si el nombre coincide con tal ok imprímelo y haz un break si el nombre no coincide no lo muestres y sigue haciendo el foro es decir sigue realizando registros luego por ejemplo si cojo la opción 3 que es buscar registro pues por ejemplo una vez que tengas eso que te acabo es decir puedes continuar con el siguiente paso que es que cuando buscas por registro aparezca una siguiente pregunta sí pero quieres buscar por nombre buscar por teléfono o buscar por correo electrónico y luego algo ya mucho más avanzado esto no quiero que lo hagas porque te lo enseñaré yo en próximos días que es trabajar con expresiones regulares es que encuentras resultados incluso cuando no se ve una coincidencia exacta es decir que con que pongas un trocito de la cadena con que encuentre algo parecido ya te dé un resultado vale pero eso como ya te digo son expresiones regulares que es una forma de resolverlo que es algo bastante más avanzado y tampoco quiero que te metas en eso a menos que te veas muy seguro yo ya lo dejó un poco en tus manos pero sí que me gustaría que esa tercera parte la opción 3 la tuvieras resuelta para la casa del médico les vale y no os preocupéis porque la clase de miércoles como ya te digo entramos directamente con teca inter que es hacer programas con la interfaz de usuario donde verás que todo esto que hemos hecho tiene todo el sentido del mundo porque realmente bajo de un programa de interfaz de usuario hay un programa de payton funcionando con lo cual necesitamos todo esto que hemos aprendido ok y alguna pregunta

bueno pues vamos a pesar la clase de hoy en primer lugar trabajando con ese culito hoy voy a ser muy ambicioso y quiero trabajar tanto con bases de datos el principio de base de datos con sql vamos a empezar con una que se quite y también quiero trabajar con el desarrollo de interfaces de usuario con teca inter sobre todo con el objetivo de que desde la clase de hoy hasta la próxima clase el lunes que viene pues tengáis cositas para hacer y tengáis ahí chicha para estar trabajando el fin de semana entonces en primer lugar lo primero que voy a hacer lo primero que voy a hacer es abrir idle evidentemente y una vez que abrimos y del voy a crear un nuevo archivo este archivo lo voy a guardar a guardar en escritorio en curso de payton con el nombre 33 y sqlite comprobar más bien el security comprobar varía a continuación lo que voy a hacer es lo siguiente voy a decir import s kulite 3 y en este caso lo que voy a decir es as lite el as es un alias en este caso yo lo que puedo hacer es elegir el alias que yo quiera por ejemplo puedo decir mi base de datos o puedo elegir ese cubo o puedo elegir sql sql realmente mejor que no porque es una palabra reservada para entonces lo que voy a decir es crear un alias que va a ser el ítem y a continuación voy a decir que quiero importar también si es decir quiero importar una serie de comandos del sistema que me permitan por ejemplo leer y escribir archivos del disco duro cuando estamos hablando de importación y de hecho en días anteriores ya hemos empezado a hablar de importación de elementos la primera duda que nos puede surgir es bueno yo he importado de sekulic e importados ys cuantas más cosas puedo importar la respuesta a esta pregunta os la voy a dar visitando la librería el librar y default y tengo por aquí la librería por este estándar de payton donde aquí vais a ver que hay una serie de objetos que directamente podemos empezar a usar también puedo buscar list of python models al listado de módulos que vienen en python por defecto y cuando digo por defecto lo que quiero decir es que se pueden instalar más módulos desde terminal o bajando los de internet esto es únicamente los módulos que vienen por defecto entonces claro veo solo con echarle un vistazo a esto creo que tengo uno que a mí personalmente por mis interés personales me interesa bastante que es audio loop que me permite manejar información de audio es decir me permite meter una onda de audio y tratar la tengo por ejemplo base 64 para codificar y descodificar información tengo una librería de conversión de binario a asf y tengo herramientas de compresión tengo herramientas de calendario tengo herramientas para hacer cg y que ya hablaremos de esto porque es una parte de hacer con python servidores de aplicaciones en la web tengo por supuesto cmd para llegar a la a los comandos del sistema tengo un montón de cosas de herramientas para trabajar con decimales day time para trabajar con fechas gestión del correo electrónico para hacer por ejemplo un servidor de correo electrónico en python funciones para trabajar con ftp en definitiva si empezamos a funciones para iu map por ejemplo para para correo electrónico requiere sockets pero es que si veis más abajo por aquí por la s veréis que tenéis un socket server es decir podéis crear un servidor de sockets con python y por ejemplo ya que estamos en la s vemos que una de las librerías uno de los módulos que tiene por defecto python es ese kulite 3 entonces en primer lugar deciros que la instalación de payton no sólo lleva a lo básico sino que lleva un montón de módulos incorporados pero estos módulos están durmiendo es decir estos módulos están desactivados hasta que los activemos manualmente esto hace que al principio programar con python pueda ser un poco difícil desde el punto de vista en que desconocemos los módulos que hay disponibles pero también hace que payton consuma el menor la menor cantidad de memoria posible ya que en definitiva sólo estamos cargando aquello que en un momento dado realmente necesitamos con nuestro lo que quiero decir es que esto es algo que puede durar al principio pero veréis que al final es muy conveniente bueno pues lo que voy a hacer a continuación es en lo siguiente tengo aquí el archivo y digo conexión a la conexión es igual a light lit punto connect vamos a ver vamos a ver vamos a ver y en este caso lo que voy a decir es lo siguiente quiero conectarme a un archivo que de momento ahora mismo no existe llamado agenda punto sqlite ahora haremos que exista a continuación lo que voy a hacer es cursor es igual a conexión punto cursor y de momento lo que voy a hacer es que en el cursor voy a ejecutar un comando sql ahora hablaremos de esto que es cursor punto execute y dentro de estos paréntesis voy a indicar que select s kulite guión bajo versión qué manía componer con tu hijo más al final por último datos es igual a cursor wang ahora hablaremos de esto y por último quiero que me imprima en la pantalla que la versión de ese culito es dos puntos coma para encadenar datos y ahora a continuación paso a explicaros cada una de las líneas que escrito bueno si queréis de hecho vamos en primer lugar a ejecutarlo y ahora a continuación paso a explicar las líneas ejecuto y básicamente me dice que la versión de ese kulite es la versión 3.22 2.0 realmente con que sea una versión 3 punto algo ya me vale por cierto deciros que que la versión de s kulite sea a la 3 y la de payton sea la 3 no tienen nada que ver son versiones completamente diferentes porque son software completamente diferentes no relacionados entre sí y a continuación os digo necesito importar los módulos de ese culito para poder trabajar con bases de datos porque sí no cuando yo hago un live connect me dirá que eso no sabe lo que es no conoce el conector formato vamos a decir en este caso que comentar a continuación lo que hago es me conecto a una base de datos llamada agenda si queréis vamos un momento al curso de payton y vamos a listar los archivos y vemos que en este caso hoy a las 11 y perdón a las 8 y 11 de la tarde al realizar una conexión y al realizar un select automáticamente se ha creado un archivo agenda apuntó ese kulite es decir el comportamiento es el mismo que el del otro día con archivos de texto en el sentido de que si el archivo o sea si el archivo existe él evita y si no existe lo crea pero como podéis ver evidentemente este archivo ocupa 0 bytes eso quiere decir que está completamente vacío en este caso me conecto a una 3 me conecto a una base de datos llamada agenda a continuación establezco un cursor para saber en qué punto de la base de datos voy a trabajar en este caso esto para este ejercicio no es demasiado imprescindible ya que no estoy haciendo ningún listado de nada y ahora esta línea es realmente la interesante le pido algo a la base de datos el lenguaje sql esta línea es interesante y a la vez es delicada por la sencilla razón de que en una misma línea de código estamos mezclando dos lenguajes de programación tenemos por una parte hasta aquí el lenguaje de programación python pero aquí dentro en verde tenemos una sentencia escrita el lenguaje sql entonces como ya os digo y de hecho esto lo vamos a hacer en la clase de hoy unas cuantas veces más ejemplo es delicado este ejercicios delicados de punto de vista que aquí está trabajando con dos lenguajes a la vez pero esto no es de payton si esto lo haces con python o lo haces con java o lo haces con ce o lo haces con lo que sea es exactamente igual hay que estar trabajando por una parte con el lenguaje de programación nativo y cuando le pides algo a la base de datos hay que pedírselo en el lenguaje de la base de datos que es el sql por último a continuación datos contiene lo que me devuelve la base de datos y el print no hace falta comentarlo mucho porque ya lo conocemos el print lo que hace es sacar algo por pantalla que en este caso es el resultado de la petición donde pido la versión de la base de datos a continuación tenemos como os digo un primer ejemplo en el que nos hemos podido conectar a una base de datos realmente nos hemos conectado para nada y lo que hemos hecho es simplemente pedir cuál es la versión de ese culito en realmente y con este ejemplo con este ejercicio lo que hemos podido hacer es comprobar que tenemos soporte para ese culito dentro de payton a continuación voy a hacer una serie de ejercicios básicos de conexión a base de datos y de realizar las cuatro operaciones básicas y características danny lo que hablábamos el otro día no sólo en esta base de datos sino en cualquier base de datos de tipo sql evidentemente lo que te quiero decir con esto es que lo que voy a hacer a continuación vamos a dar persistencia lo que voy a hacer a continuación las sentencias que voy a escribir a continuación cuando trabajemos con mysql y cuando trabajemos con poster sql verás que son exactamente iguales de hecho las que voy a escribir con toda probabilidad vas a comprobar cómo las usando ya porque son las básicas entonces las bases de datos de tipo sql se suele decir que son bases de datos donde tenemos una serie de operaciones llamadas llamadas cruz que en algunos casos se expresan como crudos entonces este acrónimo es muy sencillo no no voy a entrar dentro de algo tan profundo como normalización de bases de datos aunque ahora luego presentaré ese concepto para que sepáis que existe pero algo mucho más sencillo que normalización consiste en que cuando te conectas una base de datos por lo menos tienes que poder hacer cuatro opcionalmente cinco operaciones básicas que son create reír update del itd y opcionalmente la s es de search entonces más allá de conceptos avanzados lo primero que hay que asegurarnos en una base de datos es que podemos hacer esto el comando de create realmente en sql se implementa con una instrucción llamada insert insertar algo en una base de datos la instrucción llamada read se implementa mediante un select realmente el search es select con wear quiero seleccionar algo donde se cumplan una serie de condiciones la opción de actualizar realmente es la misma es update y la opción d eliminar es con deleite entonces en primer lugar nuestro objetivo en la siguiente parte de la clase es asegurarnos que podemos implementar estas operaciones básicas en base de datos por cierto que en el ejercicio anterior hemos visto que hemos podido conectarnos una base de datos pero la base de datos por defecto está vacía lo primero que necesitamos hacer es trabajar con algún tipo de programa que nos permita trabajar con bases de datos en ese kulite 3 es decir hay operaciones de base de datos mediante las cuales podemos crear una estructura de base de datos desde línea de comando pero no os recomiendo lo que recomiendo es utilizar alguna herramienta como ésta que estáis viendo aquí que es davi browser for es tu light que es una herramienta que de una forma visual la vais a ver nos permite crear bases de datos no quiero nueva versión esta herramienta como os digo vamos a ver voy a sacar un un explorador vamos a buscar del libro ser esta de aquí la tenéis en esta página de aquí es still light browser o hereje y si os vais a download veréis que la tenéis tanto para windows como para como para mac está por allí como para mac como para linux y por supuesto gratuita vale por tanto lo que voy a hacer la pantalla lo podéis hacer vosotros exactamente igual dejadme que de momento elimine este agenda de ese culito porque como comprenderéis conmigo es un poco una aberración porque es un archivo de cero bytes creado accidentalmente entonces lo voy a eliminar y a continuación lo que voy a hacer es crear una nueva base de datos voy a crear una nueva base de datos la voy a guardar en el escritorio en curso de payton y la voy a llamar agenda agenda punto sqlite los archivos de base de datos de ese kulite suelen tener las extensiones o bien punto debe o bien punto seco lite o bien puntos e coli 3 o bien punto debe 3 yo lo que suelo hacer es que la suelo llamar a ese culito porque de años y casi lo diría de décadas anteriores tengo un montón de bases de datos hechas con ese kulite 2 y todas las bases de datos que tengo con ese culito 2 las tengo con la extensión debe por eso utilizó el extensión s kulite para ello luego acordarme de sólo con un vistazo en qué versión está la base de 2 que estoy haciendo pero es posible llamarlas punto debe bueno pues guardo el security y ahora a continuación lo que necesito realizar es que lo primero que sale en el asistente es la opción de crear una tabla para esta base de datos así que bueno si queréis más que nada lo que estoy haciendo es continuar con la filosofía del ejercicio de la clase pasada para que tengamos todos un poco en mente qué es lo que quiero conseguir con este ejercicio dentro de qué era una base de datos evidentemente se puede guardar lo que queráis vale pero voy a crear una tabla llamada contactos campos utilizamos el otro día bueno pues añadimos un campo para empezar voy a crear un campo llamado identificador que va a ser auto incremental va a ser una clave primaria y va a ser un número entero es decir cuando trabajamos con bases de datos cada registro debería tener no es obligatorio pero es muy recomendable un campo llamado identificador que sea un número entero que sería algo así como el dni sería algo así como el número de identificación del registro voy a decir que sea una prime eric i una clave primaria lo veis ahí y que sea auto incremental esto quiere decir que yo no me tenga que preocupar de aumentar manualmente el número sino que aumente es por él solito añado un campo y qué campos teníamos el otro día pues teníamos os acordáis el nombre el nombre no va a ser un número entero el nombre va a ser un texto la idea aquí es que integre es para meter números números enteros texto es para meter pequeños campos de texto blog es para meter el elementos binarios por ejemplo meter una imagen dentro de una base de datos no es que se recomienda hacer pero se puede hacer riel son números reales y numérico son números con decimales el double el flow de lo que hablábamos el otro día vale entonces nombre va a ser un texto añade el campo teníamos teléfono teléfono ya sé que me diría es que sería un entero pero no porque si por ejemplo a un teléfono le ponemos el prefijo le ponemos un signo más ya millares un número o le ponemos un paréntesis ya no es un número entonces en el teléfono voy a poner un texto y añade un último campo que es email que va a ser un campo también text una cosa muy divertida es que si os fijáis el editor de ese culito me va activando cuál sería la sentencia sql en el caso de que yo quisiera crear manualmente una tabla ale con lo cual por esto pues estaría bien igual para copiar melo y pegarme lo en algún blog de notas ahora mismo no lo voy a hacer pero que sepáis que eso existe entonces ya lo tengo por aquí ok vale pues ahora a continuación lo que quiero es esto es el avanzado vale lo que quiero es aceptar quiero aceptar y vamos a ver ahora el aceptar veis que el botón parecía que no estaba activo pero realmente sí que estaba activo a continuación lo que quiero es trabajar con esta base de datos voy a hacer una cosa voy a meter un registro manual para que veáis que de hecho se pueden meter registros manuales y ahora meteremos registros desde la programación bueno pues aquí dentro de contactos lo que voy a hacer es insertar un registro entonces voy a mostrar los datos y a continuación voy a crear un nuevo registro entonces vamos a ver el nombre va a ser juan el teléfono va a ser un número de teléfono y el email va a ser info juan puntocom ya tengo esto con lo cual ok ya lo tengo todo un momento por él vale la estructura estoy viendo si voy a guardar cambios ahora si estoy comprobando si tengo que decirle al sistema que vale guardar la tabla ok muy bien ahora tengo una base de datos que ocupa 12 casas por cierto deciros que voy a cerrar este archivo deciros que este archivo agente sqlite es un archivo que está en un formato byte code eso quiere decir que no lo podéis abrir directamente no podéis abrirlo en un editor de texto ya no es un archivo de texto para entendernos bien a continuación voy a guardar este proyecto voy a crear un nuevo archivo y voy a pegar algo de código voy a copiar este código de aquí voy a pegarlo y lo voy a guardar así que este es el archivo 34 y es ese kulite lee no sé si hacer primero un leer o hacer una escribir vamos a verlo vamos a leer entonces en primer lugar importo esto de aquí esto sí es exactamente igual me conecto a una base de datos que es agente sqlite porque ahora sí existe correctamente voy a crear un cursor esto lo mantengo y ahora a continuación lo que voy a hacer es realizar el primer tipo de operaciones que es la de seleccionar voy a escribir un comando muy sencillo que es select all from contactos que esto básicamente aparte el lenguaje sql que sabes inglés ya sabes lenguaje sql porque es seleccionar melo todo el asterisco quiere decir todo from contactos la selección a melo todo de la tabla contactos ahora a continuación lo que voy a hacer es lo siguiente anteriormente he dicho datos page one fechu one lo que hace es obtener sólo el primer registro que me de la base de datos pero yo en este caso si vale ahora tengo un registro de eso es cierto pero ahora más adelante tendré más registros entonces no quiero fechu wang quiero fech el lechero que me des todo aquello que provenga de la base de datos por cierto una cosita un detallito y es que en python no se pone en punto y coma se pone punto y coma al final de cada instrucción pero en sql sí que se debe poner punto y coma para una sola instrucción no es obligatorio pero es una buena costumbre acostumbrarse a ello porque en definitiva son si taxis diferentes y ahora voy a poner una estructura de control parecida a la que hemos usado anteriormente que es la siguiente hemos visto anteriormente la estructura de control for four y un range y el range tenía por ejemplo de 0 a 10 la estructura de control por lo que hace es recorrer una estructura de datos pues lo que voy a hacer ahora es decir sol y team datos no quiero que recorra un número que me acabo de inventar desde 0 hasta 10 lo que quiero que hagas es recorrer la estructura de datos que te está volviendo de la base de datos entonces es fort y en datos ya sabéis que y puede ser lo que os dé la gana y datos puede ser lo que queráis siempre que coincida con lo que habéis declarado entonces en datos dos puntos y digo print y voy a poner el nombre y voy a poner y índice 1 ahora os digo porque el 1 el teléfono comillas teléfono coma y dedos como email coma y de 3 y si todo ha ido bien y si si todo ha ido bien ejecutó este código vamos a asignar ningún error y podemos comprobar qué nombre juan teléfono estoy aquí email es de aquí voy a poner un punto voy a poner un contra barra t y aquí un con traba rate anteriormente en otras clases hemos visto que contra barra n sirve para bajar artificialmente una nueva línea pues contra barra te sirve para insertar artificialmente un tabulador está este código de hecho también existe en otros lenguajes tales como por ejemplo java o tales como por ejemplo fe entonces guardo vuelvo a ejecutar vamos a ver vamos a ver qué es lo que pasa con el inicio yo para empezar dentro de que anteriormente he comentado que las listas empiezan en el número cero y sin embargo si os fijáis estoy empezando en el número uno porque pues porque en la base de datos donde es mega sino que la encerrado de libro ser la voy a volver a abrir en la base de datos he creado un primer campo el campo hoy escritorio muy a curso de payton voy a agenda punto sqlite voy a contactos le recordamos que tenía un primer campo que es lo identificador yo he hecho cuando he insertado un registro voy a mostrar los datos comprobamos que yo no he puesto un identificador número uno pero como le he dicho antes que es una clave primaria y que lo quiero auto incremental la palabra es auto realmente el sistema automáticamente ha puesto un número uno generalmente en una base de datos cuando extraes la información generalmente insisto tú no quieres saber cuál es el identificador porque es una columna que usa internamente la base de datos para poder asignar o para poder dar darle consistencia a los datos sin embargo yo puedo venir aquí y digo y de coma y de 0 y no hay ningún problema es decir en un momento dado yo podría querer saber cuál es el identificador y ya está así que vengo por aquí pulso f5 y me dice el identificador es 1 el nombre es juan el teléfono es este y el email es este de aquí así que no lo había sacado por nada en particular simplemente porque cuando en una aplicación estoy hablando a nivel general porque luego cuando hacemos una aplicación en python bt saber para quién la hacemos pero generalmente cuando es una aplicación para el público final siempre que en esta aplicación saco el id sé que voy a recibir la pregunta de esto de la y de qué es y mi respuesta va a ser no lo toques que eso es interno de la base de datos global por eso lo que suelo hacer es por defecto no mostrar el identificador pero está ahí y por eso es por lo que lo que estamos haciendo aquí es que en datos lo que hace automáticamente es asignar un número de identificador de lista o de matriz porque la lista al final es como una especie de matriz para cada uno de los campos por el orden en el que aparecen más adelante de hecho veremos que hay otro de los comandos de cursor que es específicamente el pfets mediante una lista con índices de texto en lugar de tener unos índices en base a un número podemos que los índices sean los nombres de los campos de sql con lo cual a veces es más fácil trabajar y otras veces no depende un poco de qué es lo que estamos haciendo pero tampoco me quiero liar con eso a continuación ya que tenemos el select vamos a continuación al insert a la break y al de élite y vamos a comprobar que lo podemos hacer todo correctamente continuamos por tanto y a continuación voy a hacer un nuevo archivo voy a copiar este archivo porque para qué vamos a hacer todo el código desde cero si podemos reutilizar una gran parte ese culito e insertar y cuando trabajamos con insertar mientras que el select evidentemente me saca resultados en pantalla el insertar no tiene porqué sacar nada en pantalla entonces con insertar con actualizar y con eliminar me puedo cargar directamente las líneas correspondientes a imprimir algo en pantalla así que digo lo siguiente insert quinto vamos a insertar en contactos values y ahora os pregunto cuántos campos tengo en la base de datos tengo 4 1 2 3 y 4 pues inserto cuatro espacios a continuación en el primer espacio voy a poner no le pongo null para decirle al sistema que es el sistema el que se debe encargar de aumentar automáticamente el identificador a continuación con comillas sencillas voy a poner los otros tres campos porque pongo esto con comillas sencillas porque ya estoy usando comillas dobles para la cadena si pusiera comillas dobles el programa entendería que me estoy intentando escapar de esta cadena de aquí más adelante os enseñaré caracteres de escape con lo cual podría usar dobles comillas aquí sin que fueran incompatibles con estas dobles comillas de aquí pero hoy para hacerlo sencillo lo que os voy a decir es si fuera habéis utilizado comillas dobles dentro utilizar comillas sencillas y así no habrá ningún problema y entonces voy a crear el registro de jorge voy a crear un teléfono el 2 2 2 2 2 y jorge arroba correo puntocom a continuación voy a hacer esto un poquito más grande a continuación guardo por supuesto pulso f5 para trabajar me dice que actúa y que ha ejecutado este archivo pero como os digo cuando insertamos algo en la base de datos el ordenador no tiene porqué devolver nada en pantalla ahora si me voy a la base de datos actualizó la base de datos a ver momento tendré que ir a voy a abrir base de datos muy bien el journal vale voy a actualizar y yo os comento una cosa que me estamos quedando un poco que es este journal de aquí que es de hoy a las 8 36 vale pues voy a hacer una cosa voy a hacer una cosa a continuación vamos a ver que es que voy a cerrar la base de datos veréis vamos a ver en ese culito a veces aparece este archivo que no debería estar apareciendo ahora mismo que es el journal el journal es un listado de tareas pendientes cuando ese archivo existe es porque la base de datos tienen un listado de tareas pendientes y no las ha ejecutado todavía contra la base de datos entonces a continuación lo que voy a hacer es cerrar manualmente la conexión de la base de datos momento pero segundo y de esa forma aquí vale voy a hacer una cosa me voy a cargar el journal y lo que voy a hacer es cerrar manualmente la conexión con puntocom it para que realmente es el journal lo convierta a la base de datos así que vengo por aquí vuelvo a ejecutar f5 bien no es con esa conexión le digo efe cinco palabras y le di a actualizar y ahora sí tengo a jorge directamente en la base de datos y si miramos el archivo veremos qué agenda punto s kulite es de hoy a las 8 y 38 y no tenemos el archivo punto journal en este caso el archivo punto journal no se acaba de meter dentro de la base de datos hasta que no hacemos un comité ten en cuenta una cosa y es que ese archivo journal existe porque uno de los puntos débiles de ese kulite pero que se puede solucionar con ese archivo es la concurrencia alguien sabe que es la concurrencia os cuento la concurrencia no es ya exactamente ejecutar dos instrucciones a la vez la concurrencia es cuando múltiples usuarios se conectan a la vez a una misma base de datos a sus varios usuarios concurren en la misma base de datos de los usuarios piden cosas a la vez a una base de datos te lo digo porque un usuario podría pedir varias cosas a la vez a una base de datos pero eso no se denomina realmente concurrencia porque es solo un usuario aprovechó por cierto para deciros que ese kulite desde el punto de vista del marketing tiene un beijing fatal porque lee te suena como a pequeñito dentro de todo el mundo cuando hablo de ese cool y te dice va a pero me enseñas la pequeñita enséñame la grande vale entonces si busco sqlite el secure italy mix encontraré encontraré aquí está vale que con ese culito podemos llegar a almacenar bases de datos de hasta 140 terabytes quiero decir que no es tan lite como pueda parecer en un primer momento y podemos tener cientos y cientos de usuarios a la misma vez conectados a una base de datos de esecurity honestamente os voy a decir que una base de datos de sécurité no es tan potente como una base de datos de oracle o de mysql pero que hay cuantas veces hacemos una base de datos en la que tenemos decenas de miles de personas conectadas a la vez pues no todos los días por eso lo que quiero deciros es que ese kulite no está elite como en un momento dado puede aparecer vale bueno pues ya tenemos el ejercicio de insertar hemos conseguido insertar un elemento en la base de datos a continuación lo que voy a hacer es el ejercicio de actualizar para ello voy a crear un nuevo archivo voy a copiar el código anterior lo voy a guardar archivo 36 sqlite actualizar y lo único que voy a variar en este archivo es a ver contactos y voy a cambiar por ejemplo todos los teléfonos de teléfono es igual a 1 2 3 4 5 y 6 cuidado no he puesto un where ahora en el siguiente ejercicio os voy a enseñar qué es esto del web lo que voy a hacer en este caso es actualizar todos los contactos de un solo golpe en este caso los dos que hay voy a ejecutar efe 5 no sale nada en pantalla porque no tiene por qué salir nada me voy a la base de datos actualizó los datos y compruebo como los dos registros que hay habría hecho lo mismo si hubiera dos registros que se hubiera habido o 20.000 registros el teléfono lo ha cambiado a un 2 3 4 5 6 es decir he comprobado que puedo leer de la base de datos he comprobado que puedo escribir en la base de datos he comprobado que puedo actualizar en la base de datos de a continuación voy a comprobar que puedo eliminar registros de la base de datos para ello voy a crear un nuevo archivo copio el código anterior lo pego y voy a hacer lo siguiente de lit all from contactos y esto lo guardo es ese culito eliminar número 37 y os digo lo siguiente debe tener mucho cuidado porque si yo a continuación ejecutará este código automáticamente estaría borrando la tabla de contactos de la base de datos ya no estaría borrando no estaría eliminando la tabla estaría vaciando la entonces es muy recomendable poner un where y establecer una condición where identificador es igual a 2 solo quiero eliminar un registro donde se cumpla una condición concreta por ejemplo en este caso la condición es que el identificador sea igual a 2 atención todo programador en la vida en algún momento de su vida ha hecho un desliz en el web y se ha cargado por accidente todos los datos de una base de datos de hecho no te puedes llamar programador hasta que no te has cargado por accidente una base de datos además sin copia de seguridad entonces simplemente lo que quiero deciros es pues que tengáis cuidado con esto danny y pone cara de extrañado de cómo no vas a tener copia de seguridad en la base de datos por favor eso sonó como una cadena de atrocidades pues sí de hecho las atrocidades nunca suelen venir juntas así que en definitiva yo creo que a todo el mundo nos ha pasado y danny pones cara de que no te ha pasado porque ha sido una persona precavida y has tomado las acciones para que no te pase pues entonces no eres un programador todavía hasta hasta qué deberías esa es la teoría efectivamente pero a todo el mundo le pasa una vez que se lo ha cargado y lo ha hecho algunos males no pasa nada y ya ha llamado el informático viendo esta copia de seguridad y el informático ha dicho copia de seguridad pues ahora que lo dices lo tengo en la lista de tareas para hacer entonces sí sí sí realmente realmente vamos a ver yo no he dicho que haya que hacerlo en un entorno de producción y en una empresa donde haya en juego miles y miles y miles de euros sabes lo puedes hacer en casa y cargarte una base de datos tuya y convertirte en programador sin que perjudique a toda la empresa pero oye yo que sé también te digo que es una forma de entrar a las bravas es esa la forma de entrar por la puerta grande en el mundo de los programadores lo que no te recomiendo que lo hagas y luego diga las cosas que nos dijo el profesor y luego bueno pues en este caso lo que voy a hacer es que voy a pulsar f5 y vamos a ver del itd satélite from contact os voy a quitar el asterisco f5 ahora sí y nos vamos otra vez a la base de datos sigue existiendo el registro con identificador 2 pero es porque no he actualizado los datos actualizo y compruebo como el registro ha desaparecido correctamente vale con lo cual comprobamos mediante esta pequeña tanda de ejercicios a través de línea de comando seguimos siendo capaces de realizar programas que en este caso cumple la función de poder conectarse a una base de datos más avanzada que lo que hacíamos el otro día que era leer escribir archivos de texto y podemos conectarnos ya a base de datos reales basadas en sql

bueno pues a continuación voy a pasar a la siguiente parte de la clase que como os decía es una parte por eso donde quiero apretar un poquito el acelerador para enseñaros lo máximo que pueda desde aquí al final de la clase porque quiero hablar de interfaces de usuario hasta ahora hemos trabajado con línea de comandos es posible que hagamos algún ejercicio más con línea de comandos pero prácticamente todo lo que haremos a continuación será con interfaz de usuario gráfica como os he comentado anteriormente un programa no es una interfaz de usuario un programa es lo que hemos hecho hasta el momento pero para el usuario final para que el usuario final pueda interactuar con el programa es muy recomendable crear una interfaz gráfica de usuario en ventanas dentro de payton tenemos una librería de creación de interfaces de usuario ya predeterminada que esté acá inter no es la única y no voy a decir que sea la mejor no no es la mejor desde el punto de vista de la modernidad no tienen los widgets más actualizados del mercado no tiene el aspecto más profesional el windows 10 del mercado pero es una librería como la vais a ver brutalmente fácil de utilizar y además es multiplataforma multiplataforma quiere decir y esto yo no sé para vosotros para mí para mí es muy importante el hecho de que si haces un programa en una plataforma yo en este caso por ejemplo en mac que me la pueda llevar a windows que me la pueda llevar a linux linux es menos frecuente pero por lo menos que se la pueda pasar un usuario de windows y que yo sepa que usuario de windows lo va a ejecutar exactamente igual en este caso yo por ejemplo estoy dando clase desde un mac yo lo que quiero es poder hacer código que luego vosotros os lo vais a descargar en windows y funcione exactamente igual que a mí y yo os diga no es que esto que he hecho me funciona a mí y para vosotros no o viceversa vale entonces vamos allá vamos allá y el otro día hicimos un pequeño ejemplo rápido lo voy a hacer ahora otra vez pero más poco a poco voy a guardar este esto voy a guardar este archivo con python 38 y esto va a ser teca inter 1 yo voy a hacer lo siguiente from teca inter importa todo cuidado qué quiere decir todo bueno pues voy a sacar de nuevo un navegador payton teca inter me voy a la documentación vamos a ver aquí payton 27 mejor python 38 bueno y aquí y aquí empezamos a ver que tenemos un texto scroll tenemos un selector de color tenemos un diálogo común tenemos un file dialogó para importar o exportar archivos la capacidad que trabajar con fuentes sacar mensajes ya tenemos cosas y cosas y cosas pero claro hoy veis por ejemplo hoy esto tenemos como boxes que somos la mayor hoy por ejemplo estamos empezando con teca intel pues yo lo que quiero de momento es detectar inter dámelo todo qué quiere decir dámelo todo yo perdón al que se ha pesado pero siempre digo lo mismo dámelo todo quiere decir que voy a usar más memoria porque estoy importando una serie de elementos que todavía no sé si voy a utilizar o no de hecho probablemente al final de la clase habremos dado un 1% de lo que tiene teca intel pero cuando estamos empezando prefiero importarlo todo y ya cuando vayamos avanzando podemos hacer programas más eficientes en los cuales diga mira que voy a usar un label una imagen y un botón pues desde caín te importa me lave la imagen botón y así me aseguro de que solo estoy usando la memoria que realmente necesite usar pero ese momento no es ahora vale por eso ahora de momento lo digo porque a veces cuando estoy impartiendo cursos de payton y hay algún purista en la sala pues dice hoy es que esto de importarlo todo es una barbaridad porque a gastar mucha memoria es porque quiero decir es sí lo sé pero lo estoy haciendo con fines didácticos vale siguiente cuestión voy a hacer lo siguiente marco y si digo marco es que me estoy inventando la palabra la variable en este caso marco es igual a frame porque frame porque evidentemente en el momento en el que importado teca inter de repente python ya sabe lo que es un frame por eso nunca os olvidéis de la importación porque es un evidentemente os dará error y frame voy a decir que es wef es igual a 300 píxeles coma height es igual a 300 píxeles a lo cual a vosotros os surgirá una pregunta que es de la misma forma que has metido with height que puedes meter pues puedes meter una barbaridad de cosas pero no me quiero parar ahora mismo demasiado en ello voy a hacer lo siguiente python teca inter frame voy a ir a la documentación esta no es la documentación oficial es otros reales point pero como no estoy viendo la documentación oficial vamos a cualquier página aquí aparece un listado de las opciones que tenemos tenemos el background que de hecho si queréis saber lo puede utilizar también el background size el border el cursor que voy a utilizar la altura sé que lo utilizado la anchura el highlight background el highlight color vale y si tiene algo de relieve esto queda muy mal queda muy noventero entonces simplemente deciros que hay páginas donde podéis ver la documentación que tiene el sistema voy a hacer este ejercicio con wifi con height y a continuación meto algún parámetro como por ejemplo el background de dejarme esto por aquí un poco apartado ahora sigo con ejercicio y digo lo siguiente ahora marco marco punto pack y digo el pac como ahora veréis es es inevitable ya básicamente lo que haga en un programa lo tengo que empaquetar dentro del marco es como diciendo lo que acabo de hacer metro dentro del marco y le digo padding x el margen x es igual a 30 y el margen y el margen vertical es igual a 30 si no quiero digo nada son píxeles hecho voy a quitar aquí pixel y ya está así que le voy a f5 y aparece esto y aparece una ventanita una vez yo como os digo enseño programación en varios lenguajes de programación y siempre que llego a este punto en python comparativamente a lo que cuesta crear una mínima ventana de un programa basado en ventanas en otros lenguajes como java o como c + más o como en definitiva cualquier otro lenguaje esto de poder escribir tres líneas que además me río yo de la dificultad de las líneas y automáticamente obtener una ventana esto no ocurre en prácticamente ningún otro lenguaje de programación por eso desde el primer día os estoy diciendo que una de las diferenciaciones de payton con respecto a otros lenguajes de programación es la sencillez entonces qué ocurre que os veo realmente su autoridad y danny pero o sea os veo y es como que no estáis flipando entonces no quiero aplausos quiero vítores quiero alegría quiero es que de verdad sea no os hacéis la idea de esta tontería de hacer una ventana lo que cuesta en otros lenguajes de programación la de cosas que hay que importar la de código que hay que escribir y de verdad si alguna vez os dedicáis a trabajar con los lenguajes entenderéis lo que os estoy diciendo de lo que es de agradecer que en python sea así de sencillo así de terriblemente sencillo verás en otros lenguajes como por ejemplo java que de hecho el netbeans no sé si ahora mismo mira si tengo me viene instalado o sea hacer una interfaz de usuario en java es la muerte pero es que además yo siempre que hago una interfaz de usuario en java directamente uso el asistente porque es que sea hacerlo solo cuando por ejemplo miran java 3d no voy a crear un nuevo documento voy a crear un nuevo proyecto y no quiero dependencias 90 que esto responda vale voy a crear nuevo proyecto es de tipo java y forma example sea ejemplos de formulario con interfaz de usuario le doy a phoenix esto es la documentación allen aquí aparece me voy a sus paquetes está abriéndose y voy a abrir el código de uno de los ejemplos en java para que veáis lo que estoy diciendo me voy a mirar contact editor que es algo muy parecido a lo que vamos a hacer que es el típico editor de contactos yo digo que java por ejemplo tiene este editor gráfico que viene muy bien pero nos vamos al sol los vamos a la fuente y esto que estáis viendo aquí el código generado es esto de aquí o sea esto es de decir bueno pues vale pues apaga y vámonos por eso es de agradecer que esté el editor gráfico de interfaces de usuario porque ya os digo yo de vez en cuando cuando algún cliente muy concreto me lo pide lo que hago es trabajar en java sin él sin el asistente y me pasa como a ti es que tengo que el último proyecto que hice y empezar a copiar y pegar código ya adaptarlo porque enfermedades que desde cero es que aparte de que como me dedico a programar un poco de todo no programo todos los días interfaces de usuario en java desde cero si lo hiciera probablemente no sabría de memoria pero como no es así como programa interfaz de usuario entre otras muchas cosas ahora lo hago los meses pues claro no se puede pretender que de un mes a cinco meses siguientes recuerdo de memoria en tres ya os digo es la muerte y luego de repente venimos aquí a payton y pum tras líneas y lo tenemos que por eso digo que en la medida en la que en un futuro e investigar sobre más lenguajes de programación es cuando os daréis cuenta de la gran suerte que tenemos de que en python sea así bueno y antes de pasar al siguiente ejercicio quiero escribir algo en esta aplicación si queréis antes de hacer eso voy a poner una coma he visto que el background color se pone con bg en tres pongo bg es igual y voy a poner a red no la estoy jugando mucho entonces le doy a red cierro esta ventanita f5 vale y en este caso lo que hace es que no me reconoce aguirre this is not the fine un momento estaba jugando mucho ballet y aquí tengo el fondo de color rojo me diréis oye por qué no coge todo el fondo por una razón muy sencilla porque acordamos que le dan un padding de 30 píxeles ese margen en x y ese margen en y que tenemos ahí es precisamente el parking que elegir o si yo vengo aquí y le digo 0 y 0 cierro evidentemente la vía f 5 y entonces veréis que todo el fondo es de color rojo a ver una cosa no me gusta mucho utilizar nombres de color amigo porque me puedo ir aquí me puedo ir payton decay inter color names y hay una lista color charles ford forte k inter vamos a ver de que inter colores hay una lista qué efecto puedes usar cualquier color que esté localmente definido yo digo vale muy bien cuál es la lista de colores definidos entonces me dice los los colores white black green blue cian hielo y magentas siempre van a ser disponibles y pero no vale entonces hay documentación de teca ínter que sugiere que los nombres que están disponibles son los mismos que están disponibles para css3 entonces css3 color names en la lista de 121 sé cuántos color names 217 por otro digo 140 al 140 con el sexaje decimales que son estos de aquí mi recomendación es expresar un color mediante su componente hexadecimal por ejemplo el rojo es #ff 0000 le doy me da como ya tenía rojo antes voy a poner verde 300 s s 0 0 guardo recargo y veo que tengo una ventana de color verde muy rápidamente porque acostumbrarse a formular los colores mediante códigos acción decimales os puede llevar años de práctica y os lo digo en serio lo que voy a hacer es deciros muy rápidamente que los primeros dos dígitos corresponden al color rojo los segundos dos dígitos corresponden al color verde y los terceros dos dígitos corresponden al color azul pero para que no tengáis que aprender os de memoria las 16 millones de combinaciones que hay de hecho técnicamente hay 16,7 millones de combinaciones os recomiendo usar algún programita como elgin también sirve photoshop por el que empresa tu hito y con el gimp o realmente cualquier programa de edición de fotos ahora veréis lo que ocurre si yo selecciono un color yo selecciono un color el que queráis le cojo el color que queráis por ejemplo este harán javito ocre veréis que el yin me da la anotación html yo me la puedo copiar la puedo poner ahí y al ejecutar el programa veis que aparece exactamente el mismo color que he seleccionado en el game de esta forma al principio para no para que nos explote la cabeza pensando en colores hexadecimal es lo que podéis hacer es utilizar un programa como el game que tú coges un color y automáticamente te da el código hexadecimal y simplemente copia y pega el hilo ponéis ahí vale el gimp ya sabéis que como os he dicho antes es un programa que es gratuito y lo podéis descargar de forma gratuita desde la página game punto o hereje aunque igual para otras cosas y para otros usos ya no tenía este cargador de forma previa y evidentemente lo primero que queremos meter en un programita es el contenido algo de algún título vale entonces título es igual a label nos vuelve a decir que la belle como frame son palabras reservadas que están dentro de teka inter soy yo no puedo poner etiqueta no tengo que poner en inglés pero sí que puedo poner título porque es el nombre de un y variable y digo label es en el marco quiero crear un texto que sea pues programa agenda versión 0.1 y siempre título punto pack y voy a decir side y es igual a tope quiero que me lo alinee es en la parte de arriba una vez más diréis bueno aquí expuesto guys aquí expuesto height hay expuesto text que puedes poner aquí pues me voy a la documentación payton teca inter label por ejemplo allí y veréis que pues puedo poner color de fondo puedo poner un beat map para hablaremos de esto puedo poner un border puedo poner un cursor puede elegir la fuente puedo elegir el color del texto para entonces voy a decir sg for gr un color es igual a por ejemplo voy a decir white así que le doy a efe 5 y haber momento vale parece que no lo ha cogido correctamente un segundo correcto este programa white y lo que ha hecho es que el fondo ok no pasa nada me ha desaparecido el fondo luego lo recuperaré en este caso voy a decir fg es igual a red porque antes le estaba poniendo la letra blanca sobre fondo blanco simplemente para que veáis que sí que me hace caso con respecto a lo que tenía antes ese momento voy a cargar un poco el side vale el programa agenda ok bueno me ha machacado el wifi no pasa nada esto es porque le he puesto un label y automáticamente se adapta al label y luego lo que haré es volverle a decir lo del wifi el hype para que me respete las proporciones originales del programa por cierto otra cosa que os quiero decir es que la ventana como veis es totalmente manipulable se puede maximizar incluso de hecho yo lo que puedo hacer mediante programación no todavía luego os enseñaré las instrucciones es bloquear esto es decir no sólo decirle el wifi el height sino especificar si se puede maximizar si no se puede maximizar si debe estar sin ver en el frente que se puede enviar al fondo si se puede modificar si desaparecen algunos botones de esto desde aquí o que ale quiero deciros que de que inter como ahora lo veréis es una librería que tiene un montón de utilidades vale para el siguiente ejercicio lo que voy a hacer a continuación es trabajar con más textos entonces autor autor es igual a label voy a poner aquí otra vez el side es igual a top quiere decir josé vicente carratalá esto es blue pero lo que hago es autor punto pack y salto es igual a top guardo recargo y tenemos aquí esto que tenemos en rojo programa agenda en azul josé vicente carta cuando empieza a diseñar programas con interfaz de usuario tiendo a ser brutalmente hortera lo digo porque esto de un programa que tiene un título rojo título azul de momento estéticamente ya sé que está quedando fatal vale pero evidentemente lo estoy haciendo voy a recuperar de hecho el padding lo estoy haciendo para demostraros el funcionamiento y para que veáis que realmente se pone en práctica lo que vemos aquí de los colores a continuación más cosas que puedo hacer como habéis visto en el texto lo que puedo hacer es elegir el las propiedades del texto y digo lo siguiente font es igual a comillas ariel coma verdad sans serif y lo quiero a la letra 24 voy a hacer esto más grande para que lo podáis ver pulso c5 que pasa fondo si hay que van a tomar ok f5 vale así perdón todo esto de aquí va entre paréntesis como veis a parte del fondo verde ahora vemos de él pero como veis me ha creado la letra arial y o sea a tamaño 21 hay una cosa que me gusta mucho de la especificación de las fuentes que es esta sintaxis de aquí está en taxis lo que hace es primero en tu sistema operativo intenta buscar la fuente de tipo arial si no la encuentras en ese caso busca una fuente que se llame verdad y si no la encuentras pilla una fuente que tengas que sea de la familia sans-serif es decir de la familia de fuentes tipográficas sin decoraciones sin remates en vuestro sistema operativo tenéis un listado de fuentes muy bien aquí catálogo tipográfico estaba ahí al tratar algo tipográfico vale y nos dice las fuentes que tenéis instaladas en este momento en el sistema del ordenador y veréis como aquí por ejemplo veis que tengo varias con lo cual lo más normal es que haya cogido correctamente la letra arial debo tener también verdad por la verdad un poco para que veáis en dónde salen estos nombres tenemos los nombres que me invento sino que son nombres que corresponden a fuentes tipográficas que debéis tener instaladas mayormente en vuestro sistema operativo voy a hacer lo mismo aquí voy a hacer lo mismo voy a decir 16 y si queréis para que este programa sea menos hortera voy a decirle que esto es black y esto es grave efe 5 y aquí tenéis con lo que hayamos hecho antes y bueno en este caso el background lo voy a quitar porque esto que veis allí es un remanente de ese background que había puesto antes lo quito muy bien ahora a continuación lo que quiero es ser capaz de importar imágenes dentro de este programa vamos a meter una imagen ya tenemos un label vamos a ver que hay otro tipo de recurso que es el photo image para meter un foto email si me permitís ser un poquito egocéntrico voy a buscarme a mí mismo en internet me voy a ir a imágenes fíjate que porte que tengo agraviados que estoy increíble así que vengo por aquí y cojo esta imagen me guardo la imagen me la guarda en curso de payton me la guardo como jose vicente para que tener un nombre reconocible y a continuación lo que quiero es meter esa imagen o realmente meter cualquier imagen dentro de mi programa en python para eso voy a hacer lo siguiente voy a poner foto es igual a foto email otro de los recursos incluidos dentro de ética inter y es file es igual a jose vicente entre comillas josé vicente punto jpg una vez más me vengo aquí donde se me ha ido el navegador pues no sé dónde yo una vez más vengo aquí y vigo python pk inter foto email y lo que quiero es saber los formatos que tengo disponibles el momento foto email foto m sí pero no voy a wifi heights quería algo más como lo que hemos encontrado antes con la tablita voy a cerrar por cierto todo esto también de aquí más que nada por lo siguiente la imagen que he bajado pues bueno no la he escalado en ningún programa entonces qué va a ocurrir pues que la imagen probablemente el que pasa por aquí la vamos a ver no puedo reconocer datos en josé vicente punto jpg vale vamos a verlo me voy a josé vicente punto jpg parece que la imagen existe correctamente en la carpeta correspondiente pero sin embargo me dice que no ha podido no ha podido reconocer datos en la imagen esto a veces pasa cuando esto pasa es porque las imágenes bajadas de internet a veces pueden estar corruptas entonces una forma muy buena de limpiar las imágenes es abrirlas con el gimp volverlas a guardar con el gimp y si la imagen estaba corrupta el gimp la suele limpiar bastante bien también sirve photoshop pero más grave es que no quiero recomendaros un programa que es de pago cuando os puedo recomendar un gratuito entonces me voy a exportar me voy a guardarlo como jose vicente 2 exportó y vamos a ver porque así así debería haber cogido correctamente esta imagen vamos a verlo efe 5 y ahora que me dicen no puedo reconocer data en el archivo bueno vamos a saberlo a ver si es que me falta algo vale a ver foto pack y side es igual a top dale y yo enferma cosa etiqueta foto es igual al abl donde voy a decir que en el marco en el marco es image es igual a foto y voy a decir qué etiqueta foto punto pack side es igual a top y ya está vamos a verlo efe 5 no todavía no vamos a ver y me dice no puedo reconocer datos parece parece como que la foto este corrupta un segundo a ver repaso lo que he hecho en primer lugar es que he convertido la imagen de jpg png y eso ha aparecido arreglar el error insisto que no es un error de teca inter porque evidentemente entre que inter puedes meter imágenes jpg como quieras dentro también puedes meter el gif y james animados pero lo que ha hecho es guardar en formato png porque la imagen jpg que estaba utilizando estaba dando algún tipo de error y luego el segundo error que me ha dado eso sí que es correcto y es que foto no tiene el atributo punto pack sino que la foto debe ser cargada dentro de una etiqueta foto si queréis en lugar de marc lo etiqueta foto voy a llamarlo texto foto para que nos entendamos a texto foto es literalmente como cuando estoy creando un label la diferencia es que en este primer label le estoy diciendo el texto que va a incluir y en este tercer label porque este es el segundo en lugar de meterle un text le estoy diciendo que lo que contiene el label no es un texto sino que contiene una foto que foto la foto que he cargado anteriormente vale entonces vamos a esto otra de las cosas que probablemente me vais a preguntar desde el punto de vista de la rev actualización es si no se puede hacer lo siguiente cojo esto hago esto me cargó esto ejecutó y comprobamos bueno a ver hola al aparecerá pues no no aparece sin embargo si os fijáis sí que ha dejado el hueco de la imagen por lo cual sí que la está reconociendo porque el hueco que está dejando es tal cual en la imagen pero no voy a volver loco como estaba antes la cuestión es no haría esto y lo que os pregunto es por qué por qué no haría eso esto cualquier lenguaje de programación y especialmente en eso que os comenté el primer día que se llama refactorización se llama una variable intermediaria la variable intermediaria es una variable que realmente no sirve de nada porque sirve únicamente para almacenar esto aquí para luego utilizarlo aquí es decir para eso podríamos meter directamente el photo y me dice aquí dentro entonces si estuviéramos hablando de cualquier otro lenguaje de programación y estuviéramos hablando de la factorización os diría que efectivamente sí pero creo recordar que el otro día en la primera sesión estuvimos hablando del fent de payton os acordáis y en el zen de payton dijimos que una de las frases del zen de payton era explícito es mejor que implícito vale por tanto esto es explícito mientras que lo de meterlo aquí dentro es implícito por tanto si bien en otros lenguajes de programación se recomienda que esto vaya aquí dentro en python por la explícita se recomienda que esté separado vale bien y luego tengo más parámetros tales como por ejemplo fotos emails puedo decir wifi es igual a 100 hyde es igual a 100 guardo recargo ejecuto y así de esa forma lo que ocurre es que estoy cogiendo únicamente un recorte de los 100 primeros píxeles y los 100 primeros píxeles cuidado no estoy escalando la imagen lo que estoy haciendo es recortar un trozo de imagen evidentemente también se puede rescatar quiero decir que haber un momento quiero decir que vengo por aquí y digo python pk inter foto emails kyl con reese eyes no voy a hacer ahora risas porque prefiero hacer otras cosas de momento lo que sí que puedo hacer es ir a photoshop gimp insisto esto y pasarlo a 100% píxeles y guardarlo como josé vicente 4 png y aquí en el programa de agenda poner josé vicente 4 y ahora sí veremos cómo sale correctamente la imagen completa y por último antes de pasar al siguiente ejercicio voy a ejecutar una función qué es una función llamada main look insisto una vez más en que si lo estoy poniendo en inglés es porque no podéis cambiar el nombre de esa función anteriormente hemos comentado que os acordáis cuando vimos los bucles while que dijimos que si llamábamos a un bucle while y no poníamos su condición de finalización entraba en un bucle sin fin y yo os comenté que en programación los bucles sin fin no son tan malos sino que hay ocasiones en las que están justificados mail loop lo que hace es arrancar un programa en ventanas y arrancar de fondo un bucle infinito arranco un bucle infinito porque de esa forma arranca escuchadores de eventos en los escuchadores de eventos van a ser muy importantes en los siguientes ejercicios por ejemplo para estar pendiente de cuando pulso un botón o cuando pulso una tecla así que vamos al siguiente ejercicio y para ello es crear un documento nuevo lo voy a guardar como teca inter 2 si me permitís me voy a encender la luz de la lamparita por qué porque estoy empezando no ver nada y voy a bajar la persiana y vamos allá y a continuación ya continuación por aquí un segundo vamos a ver ok esto por aquí esto es el 38 esto fuera y aquí a continuación lo que voy a hacer es añadir un botón así que digo button digo button no digo botón es igual a ahora si button donde lo quiero poner en el marco el texto va a ser igual a pool same y de momento ya está y ahora digo el botón punto pack y digo side es igual a top para que todo vaya cayendo hacia abajo y bueno voy a poner un poco de par en par inglés es igual a 10 píxeles padding igual y es igual a 10 píxeles ejecutó y tengo esto tengo un botón llamado pulsar en este botón ahora mismo no está haciendo nada para ello lo que voy a hacer es introducir dentro de este botón un command que es igual a salud os lo vuelvo a decir una vez más si yo pongo la palabra coman es que esa palabra tiene que estar así en inglés pero si yo pongo saluda está en castellano eso quiere decir que podéis elegir lo que queráis este programa va a dar un error alguien se le ocurre donde más está el error el error es que estoy llamando un comando que no existe estoy llamando la salud y no está definido saluda esos pulsos de f5 y fíjate que saluda is not y find y de hecho ni siquiera me llega a aparecer el botón pero ya sabéis cómo creamos funciones en python cuál es la palabra mágica y la palabra lógica no es por favor divide hoy vas a decir es correcto ya sabéis que siempre digo lo mismo definimos funciones en python para definir de salud pongo dos puntos y ver algo sencillito voy a poner print has pulsado un botón guardo ejecutó ahí lo tenemos it’s not be fine bueno porque lo que voy a hacer en este caso es poner el de saluda aquí arriba para que cuando lleguemos a este punto del programa conozca la existencia de salud a efe 5 ahora sí y comprobamos que se ha ganado ya pulsa me medirá a expulsado un botón de una forma todavía muy como diría yo muy arcaica vale pero por lo menos tenemos la comprobación de que efectivamente el programa está respondiendo a esa pulsación de botón generalmente cuando llego a esta parte del curso yo lo voy a decir números de memoria lo veréis pero cuando llega esa parte del curso la gente dice oye y hacer un programa de salir del programa que yo siempre digo para qué quieres un botón de salida del programa cuando tienes el botoncito rojo pero bueno pero vale vale entonces yo siempre lo que suele hacer es vamos a ver python de acá inter kuyt command entonces close te cae inter windows y esto vale contexto ok aquí el root puntos strong vale entonces cojo root punto de strong y la catarata ok lo pongo aquí ejecuto f5 pulsó el botón y cuidado ruth is not the fine vale porque no lo he definido con lo cual marco punto destroy pulso ha expulsado un botón no está destruyendo el marco bueno pues ahora lo veremos pero generalmente con eso lo que suele hacer es destruirlo sí no vamos a ver claro puedo esto global root y ruth punto kuyt efe 5 tampoco ruth es not the fine roth is not the fine porque están programando de esta otra forma que también es posible pero no lo estoy utilizando yo nada pues ya es lo comentaré con esta metodología de programación cómo se puede hacer el quit vale pero de momento evidentemente para cerrar un programa en python pues simplemente hacemos así cerramos el programa y ya está vale bien vamos a trabajar ahora con otros elementos de payton como son por ejemplo los inputs si quiero hacer una agenda evidentemente lo que quiero es poder escribir dentro de un input copio el nuevo archivo ya continuación lo que voy a hacer es crear un nuevo archivo pego y ahora por aquí debajo del botón voy a utilizar el siguiente campo vamos a hacer vamos a ver voy a decir campos está en castellanos que puedo elegir lo que quiera entrar dentro del marco y ahora un campo pack es igual a tope y ya está esto es el python 40 teka inter 3 vamos a darle ese 5 y como veréis tengo un campo en el cual puedo introducir contenido entonces pérez a continuación lo que voy a hacer estamos ya en el entrando en el último cuarto de la clase de hoy es empezar a enlazar cosas que hemos aprendido en la clase de hoy eres yo que es lo que quiero lo que quiero es lo siguiente quiero vamos a ver el título antes del campo introduzca un nombre esto va a tener letra 14 el botón lo quiero al final efe 5 y comprobamos cómo vamos hasta ahora pero impulsado el 6 siempre pasa introduce un nombre esto que esto no es muy limpio lo voy a decir que es que es reutilizado el nombre de la variable título dos veces si luego quiero acceder al nombre de la variable voy a tener un problema porque no podré localizar esta de aquí porque la exor escrito pero tampoco voy a acceder a esta variable quiero deciros que lo que he hecho es un poco guarrete pero lo he hecho para escribir código rápidamente para no perder mucho tiempo renombrando variables a continuación esto sí que lo voy a nombrar bien campo nombre eso sí que me interesa nombrarlo bien escribo otro título voy a hacer esto para que no se me salga del sitio título vale título es label introduce un teléfono me he puesto el acento pero bueno y esto es campo teléfono campo teléfono y por último e introduce un email campo email campo email y por último guarda este registro en la base de datos s 5 y veis que tengo introduce un nombre introduce un teléfono introduce un email y el botón de guarda este registro en la base de datos en qué base de datos pues evidentemente en la base de datos que hemos utilizado hace un rato así que pinchó por aquí de momento me dice es pulsar un botón y yo lo que quiero a continuación es que cuando yo pulse el botón el programa se conecte con la base de datos y le dé lo que sea que voy a utilizar para el bebé en definitiva como te diría yo la información para ello evidentemente en primer lugar voy a recuperar el código de ejercicios anteriores de élite no update no insert estés y copio el código y lo copio con cuidado evidentemente las importaciones van arriba del todo y todo esto de aquí me lo puedo poner dentro de salud cuidado con las sangrías las sangrías hay que ponerlas correctamente si me permitís me voy a cargar los comentarios porque ya está claro del ejercicio anterior los comentarios vamos a ver vamos a probar este ejercicio de momento aunque no estoy pasando todavía bien los datos pero si yo ahora voy a poner esto aquí para que se vea todo el código si el pulso f5 y ahora introduzco un nombre un teléfono y un email guardo este registro en la base de datos ya os cuenta de momento que estoy guardando jorge 2222 jorge arroba correo o sea no está completo pero voy a pulsar esto una y dos y tres y cuatro y cinco veces os acordáis veis lo he pulsado cinco veces ahora me voy a la base de datos me voy a actualizar y veo como uno dos tres cuatro y cinco veces ha insertado ese registro o sea ya tengo un programa de agenda que es capaz de recoger unos datos en los campos y cuando pulso un botón es capaz de meter algo en la base de datos pero claro ahora evidentemente como os podéis imaginar en la siguiente parte del ejercicio yo no quiero que me meta jorge 2222 y jorge arroba correo yo quiero que me meta la información que yo he creado realmente en este campo de aquí vale entonces para ello entonces para ello lo que voy a hacer es lo siguiente en el botón le voy a decir qué el comando es saluda pero voy a hacer lo siguiente vamos a ver voy a decirle que en la función de guarda va a guardar de esto si queréis ya no van a ser salud va a ser guarda iba a ser guarda vale entonces va a aceptar tres parámetros acordaros del otro día de lo que estuvimos aprendiendo acerca de parámetros de las funciones va a guardar el nombre va a guardar él el teléfono va a guardar el email a continuación voy a hacer lo siguiente como estoy llamando a campos ya no puedo llamarlo como directamente un comando sino que tengo que decirle comando es igual a lambda el hambre porque lo que estoy haciendo es pasarle parámetros y ahora los parámetros son los siguientes campo nombre os acordáis que he dicho que tenía que tener mucho cuidado con los nombres campo nombre punto get coma campo teléfono coma campo email campo email punto que está es decir estoy llamando a la función guarda con un lambda para poder pasarle parámetros estoy llamando la función guarda pasándole el el get el dame lo que tenga el campo nombre el dame lo que tenga al campo teléfono y el dame lo que tenga el campo email y estos tres parámetros se los estoy pasando a la función que de hecho espera recibir tres parámetros bueno antes de darle a ejecutar os voy a decir que estoy nervioso las probabilidades de que esto explote son relativamente altas así que voy a darle f5 y bueno de momento no ha explotado esto ya me extraña que voy a decirle a teléfono 111 y mail a apunto com guardó este registro en la base de datos el programa no da ningún error estoy muy extrañado me voy a la base de datos refresco vale pero ya me extrañaba que funcionara todo perfectamente y vale de momento no ha insertado nada de hecho es 1 2 3 4 5 y 6 sí claro muy bien no he acabado la función porque si he guardado aquí nombre evidentemente tengo que bajar los parámetros a la instrucción cuidado aquí sí que necesito encadenar vamos a ver mi nombre [Música] estoy correcto nombre aquí va una comida sencilla aquí teléfono aquí gmail vamos a volver a ejecutarlo guardo el nombre y teléfono 111 email cocu le doy a guardar de momento no ha reventado me voy a la base de datos actualizó los datos y ahora si tengo a 111 coco como vale con lo cual comprobamos como estamos combinando las dos partes que hemos realizado que estamos realizando en la clase de hoy como es por ejemplo en este caso poder realizar un programa que nos permita insertar vale que nos permita cargar registros a continuación puedo complementar este programa creando por ejemplo pues un label y un label vamos a ver creando un label o creando una entrada título dame los registros de la base de datos efe a ver antes de avanzar más vamos a repasar esta parte que evidentemente tiene su miga vamos a ver si lo devuelvo a como estaba antes déjame deshacer unas cuantas veces que recuerda ai y así así es como estaba originalmente lo que voy a hacer es voy a copiar para no olvidar lo que teníamos originalmente y voy a analizar qué es lo que tenemos esto de aquí es una cadena de texto es una de cadena de caracteres alfanuméricos cuando aquí estás viendo que hay una comilla ten en cuenta que es una comillas sencilla y por tanto es una comida que está yendo a mysql o sea no es una comilla de payton pero yo ahora mismo tengo un problema y es que esta cadena de caracteres es estática eso quiere decir que siempre me va a guardar ‘jorge 22 22 jorge correo yo quiero que sea dinámica entonces para que sea dinámica yo lo que quiero es utilizar estas variables que tengo aquí arriba pero para utilizar variables lo que tengo que hacer es escaparme de la cadena de caracteres y por tanto me escapo si aquí he empezado la cadena me escapo con comillas comillas porque comillas comillas porque es no fíjate que todo se corrompe vale tiene que ser comillas para salir y comillas para entrar entonces lo primero que tienes que entender es que estas comillas sencillas son las comillas de dentro de la cadena alfa numérica las comillas dobles marcan que me quiero escapar de esta cadena de aquí y ahora evidentemente tengo que poner más más para encadenar lo que veíamos el otro día de las comas comas vale el carácter más no como suma sino como encadenado entonces ahora es cuando puedo poner nombre te voy a decir que las probabilidades que tenéis de equivocaros en este punto del programa son altísimas efe olvidaros una coma doble una coma sencilla de olvidaros el signo más es decir como ya tengo estas comillas para que quienes tras otras comillas cuando realmente sí que las quieres vale entonces te voy a hacer una cosa y lo vuelvo a dejar como estaba te voy a hacer una cosa las probabilidades de que os equivoquéis en este punto son altísimas y las probabilidades de que en un momento dado no sepáis dónde os habéis equivocado también son altísimas entonces os voy a contar una cosa os voy a contar una anécdota una batallita para que os acordéis de mí cuando llegue el momento hace unos pocos años tenía un alumno muy bueno llamado nicolás y de un alumno muy bueno porque como diría yo no es uno de esos alumnos que les cuesta sino un tío de los que van a saco alemán a muy buen ritmo y un buen día yo estaba en mi casa y ese uno me llama y me dice oye mira estoy en la calle porque me he viajado a la calle a darme una vuelta y a fumar yo le dije muy malo de fumar y me dije pero qué haces en la calle porque me estás llevando desde la calle porque generalmente la gente me llama cuando está delante el ordenador y me dijo mira me he puesto nervioso que me bajo la calle dar una vuelta y le dije vale porque te has puesto nervioso y entonces estaba haciendo una cosa de estas no en este lenguaje no en python sino en php pero la dificultad es exactamente la misma y simplemente había estado como dos o tres horas buscando el error y no le salía se había puesto nervioso se baja la calle y le dije mira llámame cuando seas de ante el ordenador porque en la calle te voy a poder ayudar poco se teme dar ánimos pero poco más vale entonces me llama el rato cuando sube me lo envía por correo y básicamente para que te hagas la idea le pasaba esto ya le faltaba una comilla y por una comilla no le funcionaba nada que sabía te de unas cuantas horas intentando que emocionada en vez que lo vi su código y le dije ah mira así después de tal campo no sabía teléfono después del campo de falta una comida sencilla por lo ya está lo puso le funcionó y me dijo me quiero cortar las venas y me dijo me quiero cortar las venas porque como es posible que tú vayas averiguado en cinco segundos lo que yo en tres horas no podía averiguar lo que yo le dije es yo lo averiguado en tres segundos porque llevo un montón de años haciendo esto y porque yo ya me he tirado unas cuantas horas cuando aprendí a programar buscando ese tipo de errores entonces cuando eso ocurra no penséis si al profesor de salida totalmente viene en clase porque a mí me da fallo y no acabo de encontrar el fallo porque así lo buscáis al final lo encontráis pero yo soy perfectamente consciente de que esto que os acabo de enseñar aquí que es igual en cualquier lenguaje de programación es difícil acordarse de comillas sencilla comilla doble más pues más comilla doble comilla sencilla comillas sencilla comilla doble más pues más comilla doble comida sencilla todavía no hemos hecho ningún ejercicio pero técnicamente aquí si os fijáis empieza a aparecer de lo del tema de los paréntesis el número de paréntesis este es otro de los grandes puntos de fallo en un programa informático que es que se te olvide o que sobre alguno de los paréntesis de apertura o de cierre y es otra de las cosas mediante las cuales puedes estar horas y horas delante de un programa a ver por qué me falla este programa vale entonces lo que os quiero decir es que cuando os pase no os desesperéis solamente acordaros de mí cuando lo estoy diciendo que esto es lo más normal del mundo que es acuerdos además lo que os dije el primer día creo que fue y es que el objetivo no es programar sin errores eso es imposible el objetivo más realista es cuando comentáis errores porque los vais a cometer aprender a localizar lo más rápido posible los errores y aprender a arreglarlos lo más rápido posible eso es un objetivo más realista en programación no digo ya en python sino en cualquier otro lenguaje de programación bueno vamos a seguir y como os decía como os decía a continuación lo que voy a hacer es poner un título y dame los resultados de la base de datos ok voy a llamar a un botón donde esta el botón aquí lo voy a llamar un botón dame qué es devuelve los registros la función es lee no le voy a pasar parámetros veis mira voy a eliminar voy a eliminar este trozo y fíjate que a veces no es fácil saber hasta que paréntesis tengo que eliminar y ahora evidentemente tendría que crear una función de schleck voy a leer la base de datos este 5 y dame los resultados devuelve los registros voy a leer la base de datos y ahora lo que voy a hacer es crear un label título label –resultados esto es título devuelve vale y lo que quiero hay donde poner redes cuando pool se devuelve los registros quiero que allí ponga aquí están los registros de la base de datos entonces con momento vale lo que voy a hacer para eso es venir aquí y refiero el título devuelve punto clave el texto es igual a aquí van los resultados efe 5 pulso devuelve los resultados no me lo está cogiendo no me lo está cogiendo porque tendría que definir ese texto como cambiable voy a leer la base de datos actitud de huele punto label text ok vamos a verlo un momento lo que he hecho finalmente vamos a ver lo que he hecho finalmente es cambiar el título devuelve por un entrar en el cual es más fácil cambiar el texto en el título devuelve lo que he hecho es que cuando lee el título devuelve punto insert y le digo en cero inserta la palabra hola y de esa forma comprobamos cómo devuelvo los registros y dice hola evidentemente en lugar de decir hola lo que quiero es que me ponga todos los registros de la base de datos así que me vengo por aquí me vuelvo al ejercicio de leer y digo lo siguiente no vamos a ver conexión es esa de allí cursor es este de aquí cursor exacto es este de aquí y ahora voy a decir lo siguiente longaniza es igual a nada datos es igual a estos datos y for in en datos longaniza más igual a esto de aquí y por último y ahora os cuento que estoy haciendo y por último título devuelve insert longaniza lo que es lo siguiente si yo aquí dentro del bucle for le digo que cambie el texto del campo lo que va a ocurrir es que lo va a cambiar y luego lo va a cambiar y luego lo va a cambiar y luego lo va a cambiar pero yo lo que quiero no es que me lo cambie sino que me lo vaya metiendo en una variable poco a poco es decir que me lo vaya encadenando que me lo vaya sumando y al final que me devuelva toda la longaniza encadenada suele usar la variable de nombre longaniza cuando lo que voy a hacer es encadenar unas cosas con otras con otras con otras uso longaniza uso morcilla uso embutido uso ese tipo de cosas entonces guardamos f5 le doy al botón de devuelve los registros vale entonces solo sólo puedo encadenar str y me ha dicho que parece que estoy intentando encadenar una dupla esto ya nos pasó el otro día en clase entonces lo que voy a hacer en este caso es asegurarme que esto de aquí es un string acordamos que el otro día teníamos y aquí está el problema vale sí pero otra forma de hacerlo es que en lugar de poner una coma voy a poner un signo más porque visteis que cuando poníamos la coma el programa tendía a a considerarlo como si fuera una dupla efe 5 devuelvo los registros no puedo encadenar strings no entero to string pues en este caso lo que voy a hacer es str y lo esfuerzo la cadena pero hoy vale bueno y tres no voy a cargar esto aquí más paréntesis ok vale ahora sí entonces ahí bueno únicamente lo que pasa es que me lo haya encadenado toda la bestia con lo cual tendría que hacerlo en una nueva línea o algo así o por ejemplo vamos a ver aquí voy a poner contra barra n para que baje de línea pero no baja de línea porque no es un campo de texto no es un campo de texto multi línea es un campo de texto de una única línea pero por ejemplo lo que podría hacer es utilizar un campo de teca intel que sea de múltiples líneas vamos a buscar alguno de estos entonces he encontrado este texto estoy buscando uno que no dependa de widgets avanzados sino que sea los de por defecto de teca inter entonces he encontrado este que en lugar de ser un entrar es un text y que además tendrá altura 2 anchura 30 pues vamos a decirle qué altura 20 anchura 30 vamos a probar así en principio parece que soporta perfectamente el comando insert que es este comando de aquí pulsamos f5 vemos como ya de hecho el hueco que está dejando es un text field y si le digo devuelve los registros vale moment in bad texting dexter o sí porque éste no requiere el parámetro 0 vamos a comprobarlo ateca bueno si requiere requiere esto no es venga pues vamos a poner te caen pero te caen no es te caen porque no esté acá en sí no es marco no me creo que eso vaya a funcionar ok vale pues son segundos pues ahora sí de verdad f5 he podido encontrar la palabra de cerebral insert que me sirve para insertar en el punto actual que en este caso es el punto cero y por ejemplo quiero meter el usuario pues en nn nn y en nn guardo el registro en la base de datos y devuelvo los registros y veo que de hecho tengo juan tengo jorge pero si miro por ahí abajo tengo el 111 el jorge con 222 y nn con teléfono nn con mail nn en definitiva ahora sí ya tengo estas dos funciones principales que son las que nos permiten tanto introducir registros en una base de datos como en este caso también poder leer los registros dejadme que por último para formatearlo un poco en width le diga 60 y quizás en height le diga 30 pulso f 5 devuelvo los registros y ahí los tengo y como veo me hace caso a lo del contra barra n en cuanto a bajar los registros bueno pues finalizando la clase hablamos de deberes para la semana que viene recordamos que tenemos la próxima clase el lunes que viene entonces lo que quiero para que os pongáis un poco a prueba un ejercicio que podría poner es hacer esto mismo y que os funcione no tiene mucho misterio porque sería repetir el código que he hecho y además hará un momento como ahora veréis os lo voy a dejar en el google drive lo que quiero es que hagáis una agenda completa una agenda completa en el sentido de que se pueda introducir un nuevo registro se pueda buscar un registro o sea búscame por nombre búscame por teléfono búscame por email se puedan devolver todos los registros y se puede hacer alguna operación tales como por ejemplo a actualizar registro vale no espero maravillas de vosotros lo que quiero es que como veis un poco las neuronas para lo que quiero es que no sólo copies el código que yo he hecho sino que empecéis a pensar cómo podríais modificarlo oye que haría que tocaría si quisiera no no es pero tampoco que empecéis desde una página en blanco si no lo veis claro mi código copiarlo y pegarlo y empezar a modificarlo vale hay diferentes tipologías de alumno de lo que se trata cada alumno encuentre el ritmo que le que le guste entonces fernando he visto que es levantado la mano ahora vamos a duda entonces un momento y nada acabo de explicar una cosa sí dime aunque no te preocupes no a ningún problema pues como lo estoy grabando ahora luego mira la grabación del vídeo y verás lo que he explicado en cuanto a los regresos de recuperación ningún problema venga nos vemos luego a ti hasta ahora entonces veréis hay alumnos que sólo copiar el código y modificarlo no le supone ningún reto yo quiero construirlo desde cero y quiero y quiero probarlo desde cero y hay alumnos que dicen mira yo con el nivel que tengo de payton no me atrevo a empezar de una hoja en blanco porque no me atrevo porque no sé todavía qué va a ocurrir entonces lo que quiero es que cada uno encontréis vuestro espacio es decir vosotros sois los que vais a decidir si si copiar es código y no es malo o si empezáis desde cero vale pero sí que me gustaría que para esta semana que viene diréis algo más que simplemente editar o sea mi código sino que simplemente buscará es la forma de modificarlo y que os funcione y si no funciona pues no envía el correo vale a una pregunta

bien a ver varias cosas para la sesión de hoy tenemos varias cuestiones en primer lugar de hecho incluso empezando con el ejercicio qué que has presentado y vemos que cuando un programa crece es no sólo inevitable sino que es conveniente dividir el código en varios archivos diferentes tú en este caso tienes un main punto python y tienes un consultas punto python vamos a ver cómo se hace esto y de hecho para ver cómo se hace eso probablemente vamos a entender de paso mucho mejor cómo funcionan otras muchas cosas que hace tiempo que estamos trabajando dentro de payton entonces voy a crear un new file voy a crear un nuevo archivo lo voy a guardar como vamos a ver lo voy a guardar en curso de payton lo voy a guardar como y 40 módulos punto python y a continuación lo que voy a hacer es crear un nuevo archivo que voy a colocar de momento dentro de esa misma carpeta llamado mi módulo y punto payton así que en primer lugar dentro de mi módulo lo que voy a hacer es definir es decir definir una función por definir varias voy a decir di meola con el camel case y voy a crear print yo te digo hola y de hecho voy a definir una segunda función dime adiós y digo print yo te digo adiós así que ahora a continuación dentro de módulos yo por ejemplo evidentemente ahora llamo a di meola evidentemente igual no está evidentemente pero llamó a di meola pulso f 5 y lo que ocurre es que ahora mismo módulos no conoce la existencia de mi módulo punto python digamos que como antes por ejemplo has puesto el ejemplo de dejaba pues no ocurre como java que en el momento en el que declarar tus archivos en un mismo paquete automáticamente se reconocen entre sí aquí no vale aquí cualquier archivo de payton se puede convertir en un módulo pero para eso tenemos que llamar a un archivo desde el otro documento entonces ahora a continuación lo que voy a hacer es lo siguiente voy a decirle al sistema import y en este caso voy a decir mi módulo la importación se tiene que llamar exactamente igual que el archivo no hace falta poner punto para no hace falta poner python y veremos que este archivo este ejemplo no está todavía preparado para ejecutarse correctamente porque pulso f5 y me sigue diciendo que no reconoce di meola entonces esto es porque una vez que yo importo mi módulo y a continuación puedo llamar a todas las funciones que haya dentro del módulo todas las funciones y todas las variables y todo lo que haya poniendo mi módulo punto di meola así que pulso f5 y ahora sí me dice yo te digo hola ahora sí que está funcionando correctamente mi módulo ponte en punto dime adiós efe 5 y ahora me dice yo te digo hola y yo te digo adiós en definitiva lo bueno que tienen los módulos es que podemos nuestros archivos podemos nuestros nuestros bloques de código y en definitiva lo que podemos hacer es llamarlos otra cosa que hemos visto a lo largo de estas clases anteriores y que lo hemos hecho yo he dicho cómo se llamaba pero podemos utilizarlo en nuestros propios en nuestras propias creaciones es que podemos utilizar alias yo llego por aquí y digo que es escribir cada vez mi módulo pues es un poquito demasiado escribir entonces hay una opción que me permite poner as y dentro de las al igual que al igual que los alias de las bases de datos de tipo sql le puedo poner una palabra por ejemplo m m mi módulo vale entonces yo puedo venir por aquí y me ahorro y pongo m m di meola m m dime adiós y así lo que estoy haciendo es digamos escribir más rápido cuidado esto no es muy feo vale esto es más bien como tendría yo ocultar el código evidentemente mi módulo es más explícito que m m pero bueno es para poner un ejemplo así que pulso f5 y ahora comprobamos como el código se ejecuta exactamente igual pero de esta forma nos daremos cuenta como cualquier archivo que nosotros podamos crear se puede convertir en un módulo y también estuvimos viendo el otro día que existen diferentes módulos pre implementados voy a crear un nuevo archivo ah por cierto antes de crear un nuevo archivo quiero ir al curso de payton y ver si ha ocurrido algo particular aquí y ver si ha ocurrido algo particular y es que vamos a poder comprobar que en el momento en el que yo creo un módulo y realizó una primera ejecución se crea una carpeta llamada pay caché y si me meto dentro de la carpeta pay caché voy a encontrar que tengo un archivo compilado es decir fijémonos que no es país sino que es osea perdón no es país y no es país y en este caso dice en mi módulo punto skip iphone es decir con para el país payton compilado 3 838 es el compilador con el cual lo he compilado técnicamente ese archivo compilado sirve para hacer que la ejecución sea más rápida que cuando estoy trabajando con un módulo cuando en un momento dado hago cambios al módulo es recomendable eliminar la caché para que el programa tome los cambios que he realizado y me asegure de que no esté tomando una caché antigua debo decir una cosa y es que bueno esto es algo que podría haber dicho el primer día de clase pero hubiera sido un poco empezar la casa por el tejado prefiero decirlo ahora que ya tenemos un poco una idea más clara de qué es lo que hace python payton es un lenguaje interpretado eso quiere decir que en prácticamente ningún momento estamos hablando de que haya en ninguna parte un compilador es decir en todo momento en python estamos trabajando con archivos de texto que se compilan al vuelo en el momento de la ejecución esta es una de las cosas que hace que payton sea un lenguaje no tan eficiente desde el punto de vista de la ejecución como otros lenguajes de más bajo nivel como por ejemplo ce entonces si yo aquí os estoy diciendo que este módulo es un archivo compilado no quiere decir que ese compilado sea un archivo binario es decir una cosa es compilar y otra cosa es generar un archivo binario ese archivo es un byte code de tal forma que si yo intento abrir lo voy a intentar abrirlo con brackets si yo intento abrirlo con brackets o con cualquier editor de textos vamos a ver como el archivo no se puede leer vamos a cargar lo bueno fijémonos eso es lo que sale sale una directamente o sea básicamente no lo podemos abrir entonces lo que quiero decir con esto es que el hecho de poder compilar archivos con python no quiere decir que esos archivos tengan el mismo nivel de rendimiento que por ejemplo un archivo de fe compilado archivo binario también hay que decir esto que de hecho es una cosa digamos mala una cosa buena es que este archivo siendo un archivo compilado es multiplataforma un archivo binario compilado por ejemplo df no lo es vale entonces eso quiere decir que yo me lo puedo llevar a cualquier plataforma windows mac linux o cualquier otra plataforma vale entonces una vez que tenemos esto vamos a continuar y sabemos de la clase anterior que si bien en este caso yo lo que he hecho es generar me en mi propio módulo de la clase anterior sabemos que existen más módulos dentro de python que módulos existen bueno pues yo vengo por aquí me abro un navegador y digo python list of default models y aquí entonces vimos el otro día que estos son los módulos que vienen por defecto y yo por ejemplo digo quiero saber más de él http pinchó el http y aquí lo que tengo es el listado de pues de procesos el listado de procesos de funciones que tengo entonces otra forma de trabajar es la siguiente yo importó la librería http esto es python 41 y le van a estudiar y a continuación lo que voy a hacer es lo siguiente he importado un módulo en este caso ha sido hp podría haber sido cualquiera y creó una variable me la inventó voy a decir mi variable es igual a dir http a continuación print mi variable dir en un momento dado lo que hace es sacarme un listado de todo aquello que tiene el módulo entonces yo ahora guardo pulso f5 y como podemos comprobar tengo http status tengo intenten gogh evidentemente las de por defecto vale sobre todo en este caso tengo el http status que de hecho si nos fijamos lo estoy viendo exactamente igual aquí dentro vale entonces para ver el listado de lo que tiene cada librería podría hacerlo igual con mi módulo también te lo digo y es que vengo aquí importa mi modelo hago un día de mi módulo pulso f5 aquí está y aparte de los de por defecto aparte de los constructores a la derecha hablaremos de los constructores en la siguiente parte de la clase tengo también dime adiós y tengo también di meola es decir en un momento dado si por lo que sea para un cierto módulo no veo clara la documentación y quiero decir me no quiero saber qué es lo que hay dentro de este módulo pues mediante el dir lo puedo conseguir y para continuar voy a abrir de nuevo tu código también voy a abrir el mail por ejemplo vamos a ver bien y yo estoy viendo aquí que tú has usado aparte de usar módulos evidentemente has usado funciones has definido las funciones antes de hacer lo que sería el bucle principal el main digamos y aquí has hecho un while true esto qué quiere decir bueno pues en la siguiente parte de la clase a continuación voy a hablar de clases y objetos y por tanto de programación orientada a objetos dentro de payton con esto lo que te quiero decir es tú no has usado programación orientada a objetos y la cuestión es tampoco tendría por qué es decir con todo esto lo que quiero decir es que precisamente una de las cosas que más me gustan de payton no solo de payton sino de otros lenguajes tales como por ejemplo también php hace más más es que soportan el paradigma de programación orientada a objetos pero no te obligan al tala digma de programación orientada a objetos que quiero decir con esto pues lo que quiero decir es que yo abro por ejemplo por aquí una wikipedia y pongo php wikipedia si puede ser en inglés pues mejor y si no pues nada en inglés vale entonces vamos a ver vale entonces como vemos en php en el lenguaje php tenemos que tiene los paradigmas imperativos funciona al orientado a objetos profesoral y reflectivo es decir es un lenguaje llamado multi paradigma porque no te obliga a trabajar con un solo paradigma sin embargo java wikipedia english acogido en momento personalmente le ponga en inglés pero es que la wikipedia en inglés obtener más información al menos a día de hoy entonces el paradigma de java se supone que es multi paradigma pero finalmente esto no es demasiado cierto desde el punto de vista en que se nos fijamos en la propia descripción dice que java es un lenguaje de propósito general pero que está basado en clases orientado a objetos por lo cual esto estoy viendo aquí en la práctica no es muy cierto porque por ejemplo cuando arrancas con java lo primer que tienes que hacer es programar con clases sí o sí vale entonces primero creo que que todos son clases y que solo para empezar ya tienes que declarar tu clase y tu método principal y por tanto tienes que entender lo que es una clase y lo que es un método y todo eso entonces una de las cosas como os decía que más me gustan de payton es precisamente esa cuestión y es que es multi paradigma a día de hoy hasta llegar a este momento hemos estado trabajando en todo momento sin orientación a objetos y a continuación voy a enseñar a trabajar con programación de clases y con programación de objetos y eso no quiere decir que el resto del curso lo vayamos a hacer programando a objetos aquí ya cada programador y también cada profesor pone sobre la mesa sus propias manías entonces claro yo a lo largo de los años me he encontrado con muchas personas que en un momento dado el programa en procedural programa funcional en un momento dado descubren la programación orientada a objetos y es como madre mía sabes como un nuevo nivel en mi vida como a partir de aquí lo tengo que hacer todo con objetos yo soy más de la filosofía apliquemos y es que los objetos sirven para lo que sirven y para lo que sirven vienen muy bien pero precisamente lo bueno que tiene python es que con tres líneas tengo un programa no quiero ahora complicar artificialmente si no lo necesito mis programas vale entonces las clases eso sí representan en ciertos escenarios una serie de ventajas yo por ejemplo puedo abrir ya te digo tu código o el código que hicimos la clase anterior da igual y puedo ver o puedo por ejemplo trabajar aquí con consultas voy a cargar ahora consultas ahora como cargue el bracket y yo puedo ver que tú por ejemplo te has decidido una serie de funciones porque te has definido una serie de funciones pues porque tú sabes que esas funciones las lajas y además múltiples veces a lo largo del código y tú por tanto sabes que encapsular ese código en funciones te va a venir bien te va a ser conveniente de la misma forma que has hecho aquí un archivo de consultas el archivo de consulta es básicamente prácticamente es una librería de funciones y lo que hace por tanto es preparar una serie de funciones para cuando tú las puedas necesitar los objetos por tanto diríamos para decirlo de una forma sencilla son algo así como las funciones pero a un nivel mayor de complejidad y de utilidad vamos a ver los las clases cómo se programa con clases en un momento dado al principio sobre todo una vez que está explicado la gente lo que suele decir es vale entiendo cómo funciona pero no sé para qué me va a servir este en mi vida y yo a continuación lo que suele decir es bueno ten paciencia porque verás que llega un momento en el que trabajar con clases te va a permitir resolver una serie de problemas en el momento en el que aparezcan

para ello vamos a empezar creando un nuevo archivo lo voy a guardar voy a hacer por aquí payton 42 y clases y a continuación voy a usar la palabra reservada la misma palabra que en muchos lenguajes de programación la palabra clase no se definen realmente si ya no hace falta no se pone lo de public private y todo eso que hay en otros lenguajes de programación y hablaremos de ello simplemente utilizamos class y ahora si en un momento dado con las funciones os dije que os recomendaba que las funciones empezarán con minúsculas y que siguieran la nomenclatura cam el case también nos dije que cuando empezáramos con clases seguiríamos la nomenclatura mediante las cuales las clases deben empezar con mayúsculas os lo vuelvo a decir esto es una buena práctica no es una obligación no es un error sintáctico vale si tu nombre es una clase con minúsculas va a funcionar exactamente igual pero si tú compartes código con otros programadores los otros programadores van a agradecer que ese código esté programado siguiendo un estándar vale entonces voy a llamar a esto mi clase vemos que tenemos cam el case pero la primera vez mayúsculas así que a continuación lo que voy a hacer es mirar sabes que vamos a hacer el típico y clásico ejercicio de objetos y de clases y yo creo que así lo entenderéis mejor voy a crear la clase persona lo siento mucho llevo muchos años haciendo este mismo siempre no solo yo sino que es que yo creo que básicamente yo te digo en todos pero en muchos cursos donde aprendas promoción orientada a objetos te ponen la clase persona pero sobre todo es que pensar ojo y hoy estamos con declaración de clases en cuanto os enseñe el tema de herencia de clases en python por supuesto usaré la manera clase de gato para demostraros como gato hereda de mamífero mamífero hereda de animal el típico ejemplo de clases de programación entrada objetos entonces class persona una persona diríamos que tiene una serie de propiedades por ejemplo en este caso lo que voy a decir es nombre es igual a juan esto es una clase que es lo que ocurre cuando a continuación ejecuta una clase no ocurre nada pulso f5 y simplemente no ocurre nada definir una clase es lo mismo que definir una función o definir una variable solo por hacer eso no ocurre exactamente nada ahora bien a continuación voy a usar esa clase entonces ahora vengo por aquí y digo una persona 1 es igual a persona y esto es muy importante esto es muy importante esto es la definición de una clase formato comment y ahora convertimos una clase en un objeto un objeto es cuando tomamos una clase cuando tomamos una clase y a partir de esa clase construimos un objeto hay un ejemplo que también es muy utilizado en internet y es que una clase es algo así como los planos de una casa y un objeto es cada una de las casas que puedes construir con ese plano tú con un solo plano puedes construir muchas casas entonces el plano es la clase la casa que construyes con ese plano es el objeto no es tan sencillo porque luego se afectan modificación sobre la clase se modificará en el objeto o sea que eso desgraciadamente no ocurre así con los planos de arquitectura pero para hacernos una idea vengo por aquí y ahora a continuación voy a ejecutar f5 no va a pasar nada evidentemente porque lo único que ha hecho es almacenar algo en una variable y ahora digo print y voy a decir persona 1 punto y usando el punto yo lo que puedo hacer es llamar a cada una de las propiedades o algo que ahora veremos a continuación a cada uno de los métodos de una clase entonces persona 1 punto nombre es igual en este caso a juan no solo puedo hacer esto sino que de hecho yo puedo cambiar cosas puedo venir aquí y puedo decir persona 1 punto nombre es igual a jorge entonces ejecuto y en este caso me dice que persona 1 punto nombre es jorge qué quiere decir con esto pues con esto lo que quiero decir es que yo puedo ahora crearme personados la persona 2 se llama jaime quiero persona 2 punto nombre pulso f 5 y veo que la persona 1 punto nombre es jorge y la persona 2 punto no es jaime es decir es algo así como una super variable ahora veremos que es más evidentemente pero es algo así como una super variable pero ahora a continuación en los siguientes ejercicios vamos a ver que una clase y la programación orientada a objetos puede ser mucho más que esto que acabo de hacer daros cuenta de una cosa y es que yo en este mismo ejemplo estoy usando el un paradigma digamos multi paradigma porque yo aquí arriba he creado una clase y aquí abajo estoy haciendo programación estructurada y no pasa nada y puedo hacerlo perfectamente y si quiero si me diera la gana cosa que no me va a dar la gana pero si me diera la gana podría programar como o sea podría programar en python como si estuviera en java es decir podría programar estrictamente orientado a objetos cosas que no quiero hacer pero como digo si quisiera podría eso entonces voy a crear un nuevo archivo voy a copiar me al menos este código bien y a continuación en mucho mundo permitirme que voy a abrir la persiana para que entre más luz vale entonces como decía vamos a ver un método muy especial dentro de una clase que se llama el método constructor el método constructor es un método que se ejecuta sí o sí siempre cuando creamos una clase cada lenguaje de programación tiene su forma de definir el constructor en el caso de payton yo lo que hago es que pongo de daros cuenta que este df está dentro de la clase persona y escribo guión bajo guión bajo init guión bajo bajo y haciendo eso el sistema con este nombre especial que tú no debes usar para nada o sea sólo para lo que el programa lo reserva luego veremos qué podemos crearnos nuestras propias funciones pero límites para el constructor el constructor es algo así como digamos que es lo que ocurre cuando esa persona nace que se le asigna a esa persona cuando esa persona nace entonces de espn y te voy a poner en primer lugar una palabra reservada self vale es self es lo mismo self es la clase acordaos siempre de lo que os digo y es que siempre que me veáis escribir algo en inglés lo tenéis que hacer igual y siempre que me describir algo en castellano es que lo podéis poner como queráis ahora voy a poner nombre edad y no sé qué más eso ocurre a parte de nombre de alguna propiedad más de una persona cuando nace y apellido y no sé voy a poner color del pelo color pelo entonces a continuación que vengo por aquí y digo self punto nombre es igual a voy a poner nombre perdón este nombre a continuación voy a hacer lo siguiente self punto edad es igual maldad self punto apellido es igual a apellido y el color pelo es igual a color pelo y esto lo guardo como clase persona vale entonces una vez más evidentemente ejecuto todo esto de momento no hace nada y ahora a continuación voy a crear una persona nueva en el ejercicio anterior la verdad es que era un poquito aberrante porque estaba diciendo que cualquier persona cuando no hacía se llamaba juan automáticamente valley eso no debe ser pero yo a continuación lo que puedo hacer es lo siguiente voy a decir persona 1 voy a llamar a esta persona 1 es igual a persona y voy a decir lo siguiente el nombre es juan la edad es cero el apellido es lópez y el color del pelo es negro y con eso tengo una persona a continuación digo persona 2 es igual a persona y quiero a jaime vamos a poner que en el momento de la creación tiene tres años en el momento de nacer si en el momento en que se mete en el sistema garcía y pelo rubio pulso f 5 y esto evidentemente de momento no hace nada ahora bien yo puedo venir por aquí y decir print quiero el persona 1 punto nombre y me dice que es juan y a continuación print personados punto nombre y me dije que es jaime entonces vamos a continuar con este mismo ejemplo creando una cosa que se llama métodos que realmente son funciones donde el init realmente es el método constructor ya es un método en sí mismo antes de ello dejadme poneros uno de múltiples ejemplos que os puedo poner de para qué sirve todo esto que estamos viendo esto que estáis viendo es un software que irse allá por marzo más o menos está hecho en javascript y simula la propagación de algo como una especie de coronavirus en torno a unos usuarios entonces hay una serie de colores grises no infectado amarillos infectados verdes ya lo ha pasado y rojo es infectado y se ha puesto enfermo entonces este software también lo que hace es que va dibujando por aquí una gráfica donde te dice pues qué es lo que ocurre si no confirmamos a la gente en casa si dejamos que los enfermos estén sueltos por la calle y todo esto vale de hecho la gráfica son mucho de lo que nos estamos encontrando estos meses está versión 3 lo que hace es simular no sólo habéis visto que han aparecido estas celdas y una vez que aparecen en las celdas los usuarios están obligados a quedarse en casa en la versión número 2 de este software los usuarios no se confiaban en casa y por tanto bueno se espera que hasta la versión 2 que tienen muchos usuarios voy a probar la versión 1 aquí vale entonces este software por ejemplo está programado vamos a verlo de momento voy a abrirlo con aptana y así casi abro directamente el código fuente y lo veréis este software está programado con orientación a objetos por una razón muy sencilla ahora en el momento lo vais a ver pongamos que está viendo plana es un software que uso para programar directamente en la nube es decir para no programar un archivo en mi ordenador y luego subirlo sino directamente hacer modificaciones sobre un servidor remoto entonces a ver el momento click y con la virus [Música] venga y número tres y aquí está vale pues pues si os fijáis aquí lo que he hecho es o vaya a una clase persona es decir lo mismo que estamos haciendo porque ese software simula personas a partir de aquí veréis que por ejemplo a cada persona se le asigna una serie de propiedades cada personita cada cada circulito representa a una persona y cada persona tiene una serie de propiedades como son su posición x su posición y en qué dirección va en qué estado está es decir el estado si está enfermo no está enfermo la velocidad que tiene si desarrolle la enfermedad o no el tiempo como una especie de contador si está vivo o no la salud que tiene el ancho es decir cuánto contagia a los de alrededor el tiempo de incubación o sea cada persona tiene una serie de propiedades porque cada una de estas personas cada uno de estos bucles hitos cada uno de estos circulitos tiene que tener sus propias propiedades individuales de todo el resto de bucles todo el resto de circuitos y luego además cada persona tiene lo que a continuación vamos a ver como una serie de métodos un método es como la persona se mueve otro es como la persona colisiona contra las paredes no se puede escapar otro es cómo cambia su estado otro es una cosa que se encarga de dibujar el circulito vale entonces puedo poner los muchos ejemplos de escenarios como por ejemplo este en el cual es muy conveniente programar con objetos y por supuesto puedo poner los otros muchos escenarios donde no hacen ninguna falta programar con orientación a objetos la primera vez que fui a un curso yo como alumno sabes de estos cursos que vas de reciclaje a lo largo de los años que dices va voy a ponerme un curso a ver si relleno en lagunas digamos el curso era con un profesor muy bueno que claro puso como programación orientada a objetos un ejemplo de software bancario donde cada cuenta bancaria era una clase 3 el ejemplo era buenísimo pero claro yo decía esto este ejemplo es buenísimo pero es que yo no programo que no hago aplicaciones bancarias todos los días entonces lo que os quiero decir es que es difícil poner un ejemplo que sirva para todo pero veréis a lo largo de la formación que hay veces en las que necesitamos trabajar con herramientas en objetos y veces insisto y os lo digo una vez más en las que no hace absolutamente ninguna falta vamos a seguir con los métodos entonces yo vengo por aquí y a continuación escribo 10 y ahora puedo poner lo que yo quiera entonces por ejemplo voy a crear una función llamada me presento me presento ok ahora digo lo siguiente y voy a decir self digo self para que me reconozca todas las variables que he creado anteriormente a continuación digo print hola mi nombre es y pongo más directamente y self punto nombre ahora yo vengo por aquí y digo print persona 1 punto con esto no hace falta que ponga un print porque la función de llevar su propio print otra cosa que ya no comentaré que esto no es demasiado recomendable pero ya lo comentaré es algo un poquito más purista y creo no quiero print quiero me presento y quiero me presento de no es persona 1 punto me presento así que pulso f5 y veo que hola mi nombre es vamos a poner aquí un espacio más hola mi nombre es juan ale estoy viendo cómo tenemos digamos dos tipos de entidades una que son las propiedades y para distinguir lo que es una propiedad de lo que es un método yo suelo decir lo siguiente algo que no requiere ninguna acción es una propiedad y algo que requiere una acción es un método por ejemplo si yo te digo tu nombre requiere una acción tú me dirías no yo me llamo así y ya está no tengo que hacer nada para ella para llamarme así es algo que tengo yo y ya está salvo de congelado me sigo llamando igual pero uno usa un método en este caso me presento es algo que requiere que el usuario haga una acción cuando yo me presento es que yo tengo que abrir la boca y tengo que hablar estoy haciendo una acción un método sería camino un método sería duermo un método sería yo que sé cómo serían métodos y las propiedades la cantidad de hambre que tengo no es un método es una propiedad bien una vez que tengo esto por cierto es cuando es cuando a continuación yo puedo variar las propiedades entonces ya continuación digo persona 1 punto nombre es igual a era juan pues ahora va a ser de jorge y ahora persona 1 punto me presento ejecutó y primero decía mi nombre es juan y por último dije mi nombre es jorge esto quiere decir que ahora mismo con esta implementación que tenemos de programación orientada a objetos encima de la mesa las propiedades son públicas son accesibles desde el exterior y se pueden cambiar pero es algo que veremos más adelante la diferencia en programación entre público y privado veremos que en otros lenguajes de programación hay una diferencia muy grande entre público y privado en python por defecto todo es público que quiere decir que no puedo acceder desde fuera y puedo modificarlo y puedo cambiarlo y a continuación quiero mostrar también un comando muy particular que es el comando generalmente siempre alguien que me dice eso lo sé es peligroso y si por supuesto es peligroso vamos a ver es peligroso desde el sentido vamos a antes de explicar el comando del voy a crear un nuevo archivo y vamos a ver por qué estoy de acuerdo contigo en cuanto a que es peligroso voy a crear el archivo 44 llamado peligroso entonces para ello voy a crear una clase llamada cuenta bancaria lo cual ya en el momento en el que queremos una clase llamada cuenta bancaria decimos poca broma con esta clase porque aquí nos jugamos los dineros entonces yo vengo por aquí y digo voy a crear de e-mail y voy a crear vamos a pegar aquí vamos a ver ah perdón a dieta con el método mail init y voy a crear por aquí por ejemplo self y un número mi conexión ente red es inestable me habéis correctamente me veis vale un segundo y si yo creo una cuenta bancaria a continuación voy a decir saldo y vengo por aquí y al principio digo pues yo que sé self a perdón a ese número el número de cuenta de hecho bueno podría poner nombre pero vale nombre entonces el número es igual a número self nombre es igual a nombre y self saldo es igual a saldo claro cuál es el peligro pues el peligro es que yo digo cuenta 1 es igual a mi cuenta o perdona cuenta bancaria y digo el número es 0 0 1 el nombre es josé vicente y el saldo es no sé 1000 1000 de 2000 de lo que sea ya digo print cuenta 1 punto saldo f5 ok para guardar living feroz aquí así que este número de cuenta y me dice que mi saldo es 1000 pero claro a partir de aquí cualquier persona podría entrar y decir bueno pues sabes que cuenta 1 punto saldo es igual a mil millones de trillones de millones con lo cual print cuenta 1 punto saldo y ahora tengo mil millones de trillones de billones de euros en la cuenta vale entonces esto evidentemente es muy inseguro porque quien tiene acceso aquí fuera aquí fuera prácticamente cualquier persona tiene acceso pues generalmente lo que se suele hacer en otros lenguajes de programación que ya veremos cómo se consigue en python pero no es la forma natural de programar es que por ejemplo self saldo es todo lo que hace el pseudo código valiosa esto no es no funciona pero sería private de tal forma que desde fuera no se puede hacer esto ir aquí dentro pondría de modificar saldo y solo la función modifica el saldo desde dentro de la clase puede modificar el saldo es decir estaría protegiendo ese dato estaría modificando ese dato únicamente desde la clase e impidiendo que cualquier persona desde fuera y sin ningún tipo de permiso pudiera truncar ese parámetro qué es lo que te quiero decir con esto que entiendo lo que acabas de decir en cuanto a que es peligroso en cuanto a que no es muy seguro veras de todas formas que dentro de que payton no incorpora tal cual la palabra python o al menos no tiene exactamente la misma funcionalidad que en otros lenguajes como el java así que hay formas alternativas de proteger y encapsular y aislar los datos y hacer que no sean accesibles desde fuera payton no lleva una implementación de programación orientada a objetos con coherencia un polimorfismo público-privado y todo eso tan fuerte como la que lleva java pero de la misma forma tamén te digo que se puede implementar no es lo que voy a hacer ahora mismo porque vamos hacer las cosas pero simplemente que sepas que entiendo lo que quieres decir cuando dices que no es una práctica muy segura pero verás que hay formas de conseguir trabajar de esa forma y aún así trabajar de forma segura bueno pues en este caso lo que voy a hacer para acabar este ejercicio con el que estaba trabajando es acabar con un comando llamado del o sea de lit eliminar no eliminó la clase porque la clase es un concepto pero sí que puedo eliminar un objeto que es persona 1 así que si ahora vengo por aquí y digo elimino persona 1 y digo persona 1 me presento e intentó volver a ejecutar ese código pulso f 5 y me dice hola mi nombre es jorge pero a continuación de error porque después de delito persona 1 ya no existe persona 1 porque se hace esto bueno pues vamos a ver por ejemplo fijémonos yo tengo aquí este software que os he enseñado antes dónde estás aquí yo tengo este software y tengo otros muchos programas enseñando algo en las clases pero tengo este este programa donde por ejemplo yo tengo un montón de bolitas corriendo en la pantalla y como os podéis imaginar tantas bolitas y cada siendo cada una de esas bolitas un objeto eso consume una cierta memoria y consume un cierto proceso que es lo que ocurre por ejemplo cuando una de estas bolitas digamos que por ejemplo se muere y yo la quiero eliminar del sistema digamos que la quiero eliminar del sistema porque ya no afecta al resto de bolitas pues lo que ocurre es que tengo que tener una forma de eliminar algo de la memoria entonces esto es algo de lo cual no hemos hablado actualmente no hemos hablado de ello en este curso hay cursos donde por ejemplo cuando hablamos de cursos de ensamblador o cursos de fe son lenguajes de programación donde es tan importante crear cómo destruir porque si tienes un programa que crea crea crea crea crea crea crea al final lo que ocurre es que llenas la memoria y el ordenador revienta en lenguajes más elevados como por ejemplo el java o como por ejemplo python no parece que sea tan importante o mejor dicho no es tan urgente saber cómo eliminar cosas de la memoria porque el propio lenguaje de programación contiene estrategias para limpiar la memoria de vez en cuando pero sin embargo que el lenguaje de programación lleve estrategias no quiere decir que sea lo más eficiente que nos basemos en las estrategias y por tanto es importante conocer que cuando has utilizado una clase porque insisto yo os he puesto el ejemplo ese de coronavirus para deciros que cuando creas una clase a continuación no vas los objetos igual a continuación has creado una clase para luego crear 2.000 objetos y cuando creas 2.000 objetos te van a gastar memoria y cuando gastas memoria es bueno que tú seas capaz de cuando acabas con esa memoria ser capaz de liberarla el otro día la semana pasada y es algo que tenemos danny para próximas clases indicaste que uno de tus intereses es precisamente data science y ya está science es un terreno donde dentro de la tasa yen se encontramos sus disciplinas tales como por ejemplo big data y tales como por ejemplo inteligencia artificial en ambas dos llegado un momento trabajamos con multitud de entidades a la vez multitud de entidades que gastan memoria y en un momento dado es importante saber liberar memoria porque si no llega un momento que esas entidades que ya no están en uso pueden hacer que tu programa acabe utilizando cantidades prohibitivas de memoria ram vale entonces pues por lo que digo generalmente cuando hablo del del parece que no tenga mucha utilidad pero acordaros de mí cuando hagáis un programa y ese programa empieza a merendarse la ram con patatas y tú digas realmente es una tontería porque la mitad de objetos ya no se están usando en ese caso quiero me expreso acordéis de este momento cuando os estoy diciendo que tenéis estructuras como para poder eliminar información

dicho esto pasamos a la segunda parte de la clase donde en la segunda parte de la clase voy a hablar de algo que en principio parece completamente diferente ya sabéis que a lo largo de las clases para empezar siempre que puedo no sé si en esta clase podré pero vamos a intentarlo siempre que puedo al final de la clase algún ejercicio para aplicar todo lo que hemos aprendido y si no en todo caso como vemos la última clase de vez en cuando haga un ejercicio que aglutinen muchas cosas para ver el sentido de todo entonces ahora en la siguiente parte voy a volver a tecka ínter y voy a contar algo que en principio no tiene nada que ver con lo que acabo de contar pero insisto lo digo porque ahora mismo mentalmente diréis ostras que cambio hemos pegado porque lo que vamos a ver ahora no tiene nada que ver con lo que hemos visto hasta ese momento y es cierto y lo sé pero como os digo es una forma de ir avanzando por múltiples frentes y veréis que he llegado el momento todo ello tendrá un sentido voy a cerrar módulos voy a abrir un módulo por ejemplo voy a abrir voy a abrir el campo inter y a continuación voy a crear un nuevo módulo y lo voy a llamar python 44 dibujar vale a continuación importante que inter se acopió este bloque a continuación creó un marco y una vez que tengo ese marco ahora a continuación lo que vamos a hacer es aprender a dibujar el dibujo se crea mediante un elemento llamado canvas entonces voy a hacer lo siguiente entonces voy a decir lienzo es igual a este caso voy a decir canvas sin punto y coma qué quiere decir esto ya sabéis lo que yo digo siempre y es que si lo pongo en castellano es que lo podéis cambiar si lo pongo en inglés no lo podéis cambiar y enzo es una variable que yo me acabo de inventar y canvas es de la misma forma que en tecka ínter tenemos label tenemos foto email tenemos button tenemos lo que sea pues también tenemos canvas de hecho canvas se traduce como lienzo y como te puedes imaginar canvas precisamente nos permite pintar así que a continuación voy a hacer lo siguiente canvas punto create on line ahora vamos a ver qué se puede hacer y tengo lo siguiente tengo x y x y voy a hacer 15 25 225 vamos a verlo esto lo que hace bueno voy a ejecutarlo y así lo veremos mejor y luego tengo que hacer un canvas punto para comentó un momento un momento no no esto no es esto vale y ahora y enzo punto pack y voy a decir vamos a ver field es igual a vos f5 y vale ahora si tengo una línea vamos a ver lo siguiente una vez que el sistema lo que ha hecho es el canvas realmente está ocupando esto de aquí porque ha hecho alargarme la parte de arriba lo que puedo hacer también te digo es decir shire igual a tope 7 es decir empieza en x es igual a 15 es decir x es igual a 15 y es igual a 25 es que el campo se está empezando más o menos por aquí arriba y se extiende hasta x es igual a 200 o sea desde 15 hasta 200 y la y se mantiene en 25 eso quiere decir que estoy dibujando una línea horizontal ahora voy a dibujar una línea diagonal esto quiere decir que empieza en x 15 y 25 y acaba en x 200 y 250 así que pulso f 5 y compruebo como ahora tengo una línea diagonal que va hacia abajo puedo hacer así y tengo la línea diagonal que va hacia abajo como en prácticamente cualquier voy a hacer una cosa voy a poner aquí 30 como en prácticamente cualquier sistema de dibujo lo siento mucho desgraciadamente la equis empieza a la izquierda y crece hacia la derecha esto es bien pero la y empieza arriba y crece hacia abajo yo provengo del mundo de la ingeniería entonces esto quiere decir que en los sistemas de representación gráfica es decir para la gráfica para entendernos o en dibujo técnico si queréis llamarlo así pues generalmente el punto cero está abajo a la izquierda y por tanto la equis crece hacia la derecha y la y creencia hacia arriba que es algo que parece más lógico pero en prácticamente cualquier sistema informático que yo haya visto en toda mi vida la equis empieza a la izquierda y crece hacia la derecha eso es bien pero la y empieza arriba y crece positivo hacia abajo el descaro eso de que hacia abajo sea positivo nos cae un poco de contrapelo porque parece que positivo y negativo baja pero bueno es lo que hay es lo que hay ya vale sigamos bueno evidentemente lo primero que os preguntaréis voy a ir trabajando sobre diferentes instrucciones pero lo primero que os preguntaréis es bueno existe create line que más existe vamos a verlo existe create line y si yo busco dentro de payton en la documentación payton canvas me fotos entonces canvas widget y seguro que o por ejemplo por aquí seguro que encontraré un montón de páginas que me dicen qué es lo que tengo vale entonces tengo arco tengo bitmap tengo emails esto del xb m es un poco lo peor del mundo y ahora vemos de ello tengo línea tengo óvalo tengo polígono tengo rectángulo tengo texto tengo ventana coordine existentes vale y aquí es lo que aparece es lo que procede es los diferentes métodos que puedo utilizar tengo create arq tengo crédito [Música] y aquí puedo hacer eso más cosas para que parece un resumen de qué es lo que puedo hacer te voy a decir por danny que crear bid maps en canvas es casi más interesante que crearlos en teca e ínter directamente como los podíamos como los podíamos crear el otro día por una razón muy concreta y es que cuando yo creo un bitmap dentro de canvas luego puedo leer ese vilma píxel a píxel o puedo modificar píxel a píxel lo cual es muy interesante para realizar proyectos de en este caso data science de la parte de visión artificial es decir ser capaz de ver lo que hay dentro de un bitmap o incluso escribir píxel a píxel un bit map bueno pues vamos de momento con con creación de líneas mente quiero deciros que existen muchos métodos de crear diferentes tipos de líneas así que a continuación voy a crear otra línea parecida get line quiero desde 55 hasta 2 170 otra línea paralela vamos a verla otra línea paralela pero a continuación yo lo que quiero hacer es lo siguiente esta línea voy a decirle das es igual a 4,2 das me permite crear una línea que como te diría yo que tenga una discontinua f5 el cuidado haber frente a sí perdón este das va con paréntesis ahora sí efe 5 y si nos fijamos tengo una línea que tiene 4 píxeles de negro 2 píxeles de blanco 4 píxeles de negro dos ficciones de blanco voy a cambiar aquí voy a perder 18 voy a pulsar f5 y vemos que tengo 4 píxeles de negro 8 píxeles de blanco 4 píxeles de negro cuando digo blanco realmente es transparente pero bueno para entenderlos vale otra cosa que puedo hacer es crear una multi línea vamos a vamos a abrir esto crea un nuevo archivo lo pego aquí y este archivo se va a llamar multi línea bueno realmente llamar dibujar 2 vale ahora lo que voy a hacer es dibujar lo siguiente en lugar de trabajar con cuatro parámetros voy a trabajar con ocho parámetros cada punto de la línea o con ocho con seis realmente a ver que puedo dibujar que se os ocurre que puedo dibujar algo que sea sencillito una voy a dibujar una a ver para dibujar una voy a buscar una alguien que alguna otra letra ensalada entonces 1 no nos vemos todavía no ahora hablaremos de arcos porque con líneas una redondeada que podría hacer una charla nada por nada redondeada material por morir ahí tirando puntos entonces voy a hacer lo siguiente vamos a ver voy a empezar con x 10 y 100 y voy a subir hasta x 10 y 10 vamos a verlo y vamos a comprobar como tengo una línea vertical ahora a continuación lo que voy a hacer es que voy a crear dos puntos más x 40 y 10 f 5 y ahí tengo como podemos ver la primera línea segunda línea tengo seis parámetros vamos a por los siguientes ya la continuación voy a crear x 40 y 100 con lo cual tengo la siguiente línea que baja y ahora evidentemente voy a parar esto voy a crear un create line que va a ir desde 100 a 50 hasta 40 50 y tengo el palito del medio de la a y acabamos de comprobar cómo puedo dibujar una multi línea y en cualquier momento puedo parar podría haber vuelto sobre mis pasos evidentemente y podría haber dibujado el palo de la esto que acabo de hacer por cierto claro si ahora digo vale ahora con parámetros que escribir vuestro nombre vosotros diréis esto no va a ser tan sencillo como en un primer momento cuando pueda aparecer vale yo lo he hecho más o menos de memoria por eso os decía que me dijera es cualquier otra letra porque si yo digo la podréis claro tú te has preparado antes de clase ya te sabes las coordenadas y realmente no son las coordenadas las ha ido pensando al vuelo pero claro también os digo que pensar las coordenadas al vuelo es algo que pues no te digo que me ha costado años de práctica sino que si habéis visto mis redes sociales veréis que yo durante años me dedicado a la programación de videojuegos y eso hace que tenga facilidad para pensar en dos y en tres dimensiones pero si me decís vaya yo que sé cómo pondría yo mi nombre pues es normal que no se os ocurra también te digo que hay trucos y cuando digo que hay trucos yo suelo usar un programa que se llama interes kate y entonces sin que escapara lo veréis es un programa que me permite dibujar a mano alzada me permite dibujar vectorial mente y luego no me lo saca en formato python sonaría mucho pero no lo hace pero sí que lo saca en html5 canvas que es una forma de crear líneas que se parece un poquito al canvas de payton en un segundo que estoy abriendo en que skype a veces tarda un poquito de arrancar con lo cual darle un segundo y ahora os cuento un truco con el cual podéis dibujar en un programa que es fácil de utilizar y luego ese programa es chivas los números que tenéis que poner aquí dentro al momento bien continuamos y voy a continuar por hablar por hablar esto que deba de arrancar es en que skype entonces bueno simplemente deciros que si yo vengo por aquí y por ejemplo dibujo esto a ver women team y dibujo esto pues yo ahora vengo por aquí me voy a archivo me voy a guardar como el formato nativo de guardado dentro de este programa es el formato svg que es un formato abierto pero si entro aquí dentro veré que cavaban pam pam pam pam un segundo veré que tengo html5 canvas entonces pincho por aquí me lo guardo en prueba el archivo de prueba ahí lo tengo lo abro con brackets o con cualquier editor de texto y aquí tengo por ejemplo las coordenadas entonces si yo vengo por aquí y por ejemplo en inkscape digo el momento inverseguros yo en inkscape digo que voy a hacer un momento no me provoques todavía con los arcos vale ahora lograremos de curvas decir pero de momento con una línea recta voy a dibujar un corazón tengo un corazón como ejemplo de forma que pues no te digo imposible pero muy difícil de hacer a mano alzada el momento que voy a tirar estas líneas para que estén más simétricas para precio ahora quiero dibujar ese corazón en python me lo guardo como los guardo como corazón lo abro con esto y ahora vengo por aquí algo nuevo archivo lo guardo como dibujar 3 pego y ahora aquí en la línea pues voy introduciendo coordenadas entonces digo el move to es esto voy a hacer una cosa 1 2 3 4 5 6 7 8 9 10 y 11 2 3 4 5 6 7 8 9 10 y 11 y ahora voy pegando con cuidadosos voy a quedar sin pantalla y ahora vengo por aquí en canvas de html5 hay que hacer un close un stroke perdón aquí no hace falta ejecutó y si todo va bien si os fijáis ahí tengo el mismo corazón que he dibujado dentro de kim que skype vale pero lo tengo dentro de payton con esto no los quiero decir es que no funciona exactamente igual pero sí que las coordenadas se pueden aprovechar y de hecho incluso probablemente hasta podríamos hacer un programa de características similares al que has hecho tú danny para el tema de pasar excel a ese kulite que te coja un archivo de html5 canvas y lo convierta a un dibujo de teca inter porque al final es un formato esperable es un formato estructurado y es un formato que es para se hable para dibujar os parece difícil que de hecho lo es pues que sepáis que hay truquitos hay truquitos que podéis utilizar y que os pueden venir bastante bien para estas cosas bien pues a continuar con más cosas de dibujo esto lo voy a cerrar porque vamos a guardar esto como vivo quad si el programa que lo he hecho muy rápido el programa se llama inkscape y es un programa que como prácticamente todos lo que es los que suele recomendar para las clases siempre que pueda al menos es un programa que cumple dos características que para mí son muy importantes en primer lugar es un programa de software libre es decir es un programa gratuito y además es un programa que está disponible tanto para windows como para linux como para mac entonces el programa se llama inkscape y lo tenéis en la página inkscape punto o hereje realmente es la versión digamos como de software libre de adobe illustrator adobe illustrator evidentemente es un programa mucho más completo pero claro hay veces que los ilustradores existe es un programa profesional es un programa que tiene de todo pero hay veces que no quiere un programa profesional que tenga de todo y hay veces que quiere un programa que me permita dibujar unos cuantos vectores me permita exportarlos y ya está para que voy a pagar una licencia de illustrator para usar cuatro cosillas o para que peor todavía voy a piratear mi illustrator cuando puedo usar un programa de software libre y estar perfectamente dentro de la legalidad vale entonces por eso yo siempre que puedo hay veces que no se puede pero siempre que puedo intento recomendar software libre para hacer todo ese tipo de operaciones adicionales vale para hacer este tipo de operaciones de soporte bueno pues en este archivo voy a crear de nuevo un canvas pero en este caso voy a hacer lienzo punto y en lugar de create line voy a hacer un create rectángulo entonces el create rectángulo tiene los siguientes parámetros por ejemplo 1010 coma en este caso anchura altura como a 200 200 por ejemplo pulso f 5 y lo que ocurre continuación es que el programa crea un rectángulo de 200 píxeles x 200 píxeles a continuación es cuando quiero hablar un poco de colores os acordáis que el otro día hablamos de colores verdad no me acuerdo para qué pero sí que me acuerdo fue para el tema de ética intel para los colores del texto por ejemplo entonces de la misma forma que os acabo de recomendar inkscape os acordáis el otro día os recomendaba el gimp para seleccionar colores entonces yo por ejemplo vengo aquí y digo out line es igual a #ff 0000 que os acordáis que eso quiere decir el rojo si nos sobra tiempo hacia el final del curso os contaré por qué es efe efe quiere decir rojo y por qué efe efe en hexadecimal se convierte en 255 realmente 2 en 256 en el sistema decimal pero como es un poco rollo prefiero dejarlo para el final si nos sobra tiempo vale ya estar trabajando más en cosas digamos de payton puro entonces f5 y comprobamos como de esta forma me crea un rectángulo que tiene el borde rojo de la misma forma que tengo un out line puedo poner un film y el fill en este caso lo voy a poner de verde verde es 0 0 efe efe 0 0 guardo recargo y podemos comprobar que ahí tengo un rectángulo tiene como podemos ver la línea roja y el fondo de color verde a partir de aquí hay más cosas que podemos empezar a trabajar hemos visto cómo tenemos un rectángulo y nos empezamos a acercar a cosas como lo que comentabas de dibujar formas curvas a partir de los óvalos así que lienzo punto create guión bajo oval y vamos a hacer lo siguiente en este caso voy a indicar que quiero 50/50 como punto de inicio el óvalo si tiene el mismo radio xy radio y se convierte en un círculo y si tiene radios diferentes se convierte en un óvalo por ejemplo 200 100 y digo field es igual a azul que es 0000 efe efe el 5 y tenemos ahí lo podemos ver un nuevo valor que tiene 200 en el eje x 100 en el eje y como decía si pongo lo mismo en el eje x que en el eje y lo que hago es tener un círculo si no le digo nada por defecto le aplica un out line de color negro pero le puedo decir outline es igual a efe efe efe efe efe efe lo cual me hace un out line de color blanco no sé si se ve pero ahí tenemos el out line de color blanco como no se ve a continuación lo que puedo hacer es decir que tengo otro parámetro que es el wifi el wef indica voy a poner 5 la anchura en píxeles del trazo pero si yo creo que ahí se verá mejor que tengo una línea de color blanco que nos permite trabajar con líneas una vez que hemos creado líneas por ejemplo hemos dibujado líneas rectas hemos dibujado formas geométricas insisto estaremos trabajando con otras cosas tales como por ejemplo pues arcos o líneas de fier que será un poco la muerte pero a continuación quiero hacer dos cosas por una parte quiero crear un programa que tenga un bucle y luego por otra parte quiero meter una imagen dentro de teka inter dentro de canvas sobre todo quiero crear una imagen como te puedes imaginar para luego poder o en la clase de hoy o cuando nos dé tiempo para luego poder editar píxel a píxel vamos a ver lo que decías del tema del bucle entonces para ello voy a hacer un ejercicio que suele ser divertido que es el siguiente vamos a ver voy a copiar esto vale esto lo voy a guardar como dibujo animado entonces dijo while true el trump 1 vamos a ver voy a decir print hola pero pero quiero importarme y quiero time puntos live el 5 y vemos que cada segundo las espera la ejecución se espera un segundo entró en un bucle infinito pero es un bucle infinito controlado por cierto que más adelante cuando hablemos de bucles infinitos también estaré hablando de la estructura de control try catch que lo que hace es en un momento dado escuchar una tecla para poder parar el bucle de momento voy a pulsar control c es decir lo paro a la bestia en este caso en este caso vamos a ver voy a cerrar esto voy a buscar f 5 vale vemos que hasta que no acaba el bucle no hace el lienzo punto para esto me puede a fastidiar porque lo que quiero es esto y enfoca ambas esto lo quiero aquí pulso f5 así perdón este intento máquina y hasta que no paro claro no creas que esto lo que ha hecho es crear un montón de elementos uno dentro del otro vale puede ser una cosa voy a pasarlo al tema de la imagen y ahora volvemos a este archivo pero como te puedes imaginar lo que quiero es un archivo que lo que haga es que vaya dibujando poco a poco un elemento no borrar todavía antonia no quiero borrar el canvas pero sí por lo menos que vaya dibujando progresivamente pues un círculo de forma aleatoria en pantalla en este momento a hablar del tema de dibujar imagen entonces voy a crear un nuevo archivo y aquí copio esto lo tengo aquí lo guardo 49 imagen tenía ya una imagen juraría en esa carpeta no en curso de payton jose vicente 3 png y josé vicente 4 que medía pocos píxeles vale pues creo el lienzo y a continuación voy a hacer lo siguiente vamos a ver imagen es igual a image vuelvo a decir una vez más que lo que está en inglés tiene que estar en inglés y lo que está en castellano podéis poner lo que queráis imex punto open vamos a ver y momento y meis punto open porque la librería de emails está adentro de la librería pil entonces importa y a ver si la librería pil viene por defecto dentro de esta instalación 5 y vale ok no tengo el módulo llamado pin si no tengo y el módulo llamado pin me tengo que instalar el módulo llamado peep llamado pin y para instalar el módulo pin lo que tengo que hacer es enseñar a usar el python el para cage manager entonces voy a aprovechar para hacer eso vamos a ver en primer lugar yo lo que tengo que hacer es sacar es decir payton pil sacar el módulo pin el modelo pin aquí es el módulo que me permite trabajar con imágenes a partir de aquí una vez que tenga este módulo yo lo que puedo hacer es utilizar este módulo en mis programas para poder instalar este módulo en mis programas es donde lo que tengo que hacer es llamar a este comando ese comando el pib lo que hace es instalar paquetes de payton que yo no tenga instalados en mi sistema como hacemos esto el pib en principio está instalado con cada instalación de payton que tengáis en vuestro sistema quiere decir que no tenéis que hacer nada más que lo siguiente en mi caso voy a abrir un terminal en vuestro caso en windows el terminal se abre pulsando el botón de windows y escribiendo la palabra cmd o sea el típico terminal negro de windows no sé si lo habéis usado alguna vez supongo que sí vale pulse la tecla de windows escribís cmd pulsáis center y se debe abrir una ventana de consola de color negro a continuación escribir lo siguiente si todo ha ido bien escribir payton y si todo ha ido bien os dice um en mi caso voy a tener problemas en mi caso voy a tener problemas porque el sistema no tengo configurado para python 27 15 vosotros si lo probáis ahora mismo me confirma veis que os aparecerá python 3 punto lo que sea o 3.7 o 3.8 esto es porque en mac viene por defecto instalado el python 27 quiero salir espera terminar de la misma forma que viene instalado python también veréis que viene instalado pib entonces si ponéis pib en una terminal os debe salir un montón de cosas que os salga un montón de cosas es bueno lo malo sería que pusiera command not found sea comando no reconocido comando no he encontrado endesa partir de ahí yo ya os digo que lo que voy a hacer no va a servir para nada porque está compacto en 27 a partir de ahí lo que tenéis que hacer es poner pib install pillow si todo va bien pulso enter bien me dice que payton 27 está en su final de vida y ocurre lo siguiente y es que si os fijáis lo que está haciendo es descargar pib y si os fijáis lo que ha hecho es instalar correctamente pib en este caso perdón instalar correctamente pilot en este caso no me ha servido de nada porque lo acabó de instalar para para python 27 vale lo tengo que cerrar para python 38 para python lo que sea vale entonces ahora a continuación voy a moment in a cambiar la versión de payton para mac si queréis lo que podéis ir haciendo vosotros es hacerlo y confirmarme que os funciona correctamente otra cosa esto ahora mismo no os puedo sacar ya no os puedo hacer captura porque estoy en mac os lo voy a decir si queréis en alguna próxima clase me conecto aunque sea un momentín en pc y os hago la demostración pero básicamente lo que os quiero decir es lo siguiente y así cuando instala la jce python para pc hay un parámetro al final de la instalación que dice instalar python en el path cuando os aparezca ese parámetro tenéis que decir que si queréis estelar peyton en el path eso lo que hace es que cuando llama a payton desde la consola se se reconozca automáticamente y ahora un momentín no está haciendo exactamente yo creo lo que quiero porque fíjate que aunque le digo python me dice que estoy en python tres o tres pero el pib me lo sigue pillando en este caso me dice que ya tengo instalado 27 o sea que ya tengo instalado el pilot y me dice me advierte que payton 27 está al final de su ciclo de vida lo cual quiere decir evidentemente que me lo sigue habiendo instalado para para python 27 y lo cual quiere decir que se intentó abrir el último archivo de dibujar este no era a ver open 49 imagen e importó pil e intentó ejecutar lo más normal es que me diga que no porque ahora mismo tendrá el pil correctamente instalado dentro de payton 27 pero no estará correctamente instalados dentro de payton 3 lo que sea con esto también lo que te puedo decir es que puedo ver si puedo arrancar python 27 vale creo un nuevo archivo importó teca interés importó field vamos al curso de payton 50 pil 27 pulso f 5 vale y en este caso existe pil pero no existe teca inter pero al menos es una demostración de que me he pasado correctamente a trabajar con la versión 27 entonces bueno pues nada lo que digo para el próximo día voy a meter el 37 o el 38 también en el pin de mac vamos a hacer ahora alguna otra cosa y así lo tendremos preparado para meter esa imagen y empezar a trabajar entonces la idea con la generación de gráficos es que yo puedo vamos a hacer esto de aquí yo puedo por ejemplo utilizar este software entonces has utilizado por ejemplo el programa que es desarrollado dani este software para trabajar una hoja de excel y meterla en un archivo de base de datos y a partir de ahí procesarla cada equis minutos o cada equis segundos la idea es la siguiente yo puedo hacer un nuevo archivo no quiero por aquí lo voy a guardar y lo voy a guardar como gráfica 51 gráfica ahora voy a todo esto no quiero ir en este caso y dentro del lienzo voy a decir lienzo punto create line voy a hacer 1010 coma 10,500 coma 500 500 que es lo que va a hacer esto esto lo que va a hacer es dibujar una l que será como una especie de línea de abscisas y ordenadas no me vamos a hacer hola quiero más una cosa que tirarlo a 300 a ver 10 10 10 300 no creo vale pero es un poco pobre haber 200 porque por ejemplo por allá lo haremos el canvas un poquito más grande para continuación yo lo que quiero es lo siguiente quiero dibujar una gráfica y para ello voy a utilizar un bucle for hago un bucle for vigor y un range pero abierto y quiero lienzo punto create line desde 10 200 hasta por 20 y por 20 se hará pulso f5 veremos que lo que hace es crear una serie de líneas que van directamente todas desde el punto inicial hasta una serie de coordenadas para ello ahora lo que quiero es lo siguiente x anterior y anterior es igual a cero si quieres y las inicializa vamos y ahora dijo x anterior mira es igual a 10 y a los tiempos ahora quiero x anterior y anterior y ahora [Música] x actual es igual a x anterior más y por 20 y actual es igual a y anterior más y por 20 esto es que es actual y actual y atención porque antes de abandonar este bucle voy a decir que x anterior es igual a x actual y anterior es igual y actual con lo cual lo que están haciendo es cogerlos para la siguiente ronda si era guardo y recargo vamos a verlo se me deben haber ido sí hacia abajo es que no es la alegría no es más sino menos lo que os decía antes que a veces cuesta de procesar ahora vale ok ahí lo tenemos pero es una gráfica que lo que hace es aumentar siempre hacia arriba porque pues porque el incremento de y es siempre igual pero yo ahora a continuación lo que quiero es decirle al sistema que vamos a abrir un navegador que quiero la librería random de payton entonces quiero python random es una librería hay la vez pseudo aleatoria y hablaremos de esto quiero algo pero lo más sencillito vale caray en este por ejemplo entonces voy a importunando a continuación voy a decirle y no voy a decirle random entre 10 y 200 y cerrando un punto ram branding landing ok se habrá ejecutó comprobaremos como el sistema lo que hace es cuidado ahí porque se va aquí lo que hace es generar una gráfica aleatoria donde además cada vez que ejecute va a salir una gráfica diferente puedo evidentemente hacer una gráfica de barras puedo hacer una gráfica de línea ahora una gráfica de barras debe hacer también en este caso es decirle que quiero 30 y quiero que cada vez sume 5 y de esa forma tendré una gráfica ahí con con pasitos menores y por dos vamos a verlo ahora igual me ha pasado ahí no pues mira ha estado bien de la misma forma que tengo una gráfica de línea puedo también hacer una gráfica de barras vale entonces voy a este código voy a copiarlo vamos a 52 gráficas barras y ahora lo que voy a hacer es lo siguiente el lienzo create será posible que he usado 3 chris lines dibujar 4 aunque rectángulo ok lienzo crea y rectángulo y digo esto es el que es actual la y va a ser 200 siempre esto va a ocupar 10 y esto va a ser la llegar y llegar a actuar con un out line de color rojo y un fill de color verde vamos a probarlo no 10 un mover un momento porque 200 menos y actual vale y la actual es actual más 10 ahora sí vale ahí tenemos hay una cosa que me extraña un poco y es que parece que al principio las barras están muy juntas y luego se van distanciando más y eso tiene su razón de ser no pero no tiene su razón de ser creo que es por el orden de la ejecución no sigue siendo lo que sea x anterior más 10 ahora yo creo que sí ok correcto y ahí tenemos una gráfica donde podemos representar gracias a esta librería la información de barras y por supuesto evidentemente todo esto lo podemos combinar con lo que hicimos el otro día de poner textos de carga a la imagen de poner un campo para que en definitiva en la clase de hoy quede demostrado que no sólo podemos meter textos sino que podemos dibujar no solo podemos meter gráficas hechas previamente en excel sino que podemos meter datos de sql o de excel o de donde vengan y con ellos podemos generar nuestras propias librerías gráficas yo espero dani que esa barbilla que te está rascando sea una barbilla como diciendo con esto yo puedo generar mi propia librería de gráficas o sea en cierta forma esto es algo así por decirlo de una manera muy sui generis como si estuviera trabajando con r con una diferencia evidentemente y es que dentro de r ya hay un montón de librerías gráficas preinstaladas aquí también hay librerías de gráficas también te lo digo pero lo que estamos haciendo ahora es personalizar la gráfica es decir usar python no sólo como un lenguaje de programación para machacar datos sino también un lenguaje de programación para visualizar datos básicamente tú que ya he trabajado con r pues evidentemente puedes hacer la idea de lo que te estoy diciendo claro hacer una gráfica de barras es algo que ha resultado razonablemente sencillo yo sé que ahora mismo te estarás preguntando si para hacer por ejemplo una gráfica de re prestación de países con comarcas y todo eso eso ya es otra cosa muy diferente pues sí o sea no te digo que en python la misma librería que está en ese programa en un momento porque ciertamente no es cierto pero en definitiva para programar y visualizar ciertas cosas pues sí que puede ser interesante vale entonces a eso me refiero verás un procesador normal por ejemplo este procesador en el cual yo estoy trabajando ahora mismo es un procesador que tiene es un intel core i5 a 2.5 es decir tiene 4 núcleos a 2.5 gigahercios si esto digamos que viene a totalizar para que tengas la idea 10 gigahercios para entendernos y un poco rápidamente si yo me voy por ejemplo nvidia gtx 1080 tex tex y voy a ver los núcleos de procesamiento que tienen una una gráfica 1080 tiene 2560 núcleos de procesamiento a mil 700 megahercios 1 7 gigahercios claro yo tengo 2,5 la gráfica tiene 1 con 7 pero es que tiene 2.500 núcleos de procesamiento de las tecnologías open cl okuda también en el caso de nvidia nos permiten no sólo procesar con el procesador sino también con la tarjeta gráfica con lo cual nos permite tener acceso a una potencia de cálculo mucho más grande pero insisto o sea esto no lo deberíais estar tomando ahora mismo como walker guay sino lo debe estar tomando como madre mía cómo va a ser programar en eso porque si el próximo día ya vais a ver que de programar en un núcleo a programar en cuatro núcleos da un mundo es decir el cómo concibe es el cómo planifica es el cómo ejecutas un programa no tiene nada que ver imagínate lo mismo para 2560 núcleos o sea la forma de programar no a nivel sintaxis insisto si no a nivel filosófico la forma de programar cambia bastante a más difícil pero bueno ahora sí os enseñaré para que sepáis que existe eso y para que en un momento dado vosotros podáis elegir con qué filosofía de programación queréis trabajar vale pues bueno varias cosas que tenemos para hoy la primera de ellas voy a cerrar la ventana por profundizar un poco más donde nos quedamos el otro día y a partir de ahí hoy vamos a hacer un ejercicio en el que vamos a resolver varias cosas de forma simultánea por una parte estaremos hablando de los bloques infinitos para dibujar cosas de forma animada y por otra parte a la vez que lo estaremos haciendo de una forma orientada a objetos y así lo que voy a hacer transformas la solución al problema no tiene que ver con orientación a objetos sino que van a ser dos cosas diferentes tiene que ver con un comando de canvas llamado after pero en definitiva vamos a vamos a adjuntar varias cosas en un ejercicio antes que nada ya que el otro día empezamos a trabajar con orientación a objetos el paradigma de orientación a objetos de trabajo con clases realmente lleva una serie de cuestiones asociadas una de ellas es la herencia entonces el otro día a ver espera que le estoy abriendo el valet correcto el otro día empezamos a trabajar con con orientación a objetos de la forma más sencilla posible hoy voy a hacer lo siguiente aplicaciones en curso de payton en 53 y voy a hacer un archivo llamado herencia el otro día por tanto hicimos una clase llamada persona pero hoy para explicar la herencia voy a hacer una clase llamada gato entonces voy a hacer un gato muy sencillo por una parte definimos una función constructor a un método constructor que en este caso se va a llamar a sí mismo y dónde podemos poner por ejemplo pues no sé el color del gato vale entonces en este caso vamos a decir que sea el color es igual a color y poco más para hacer lo más sencillo posible y claro a ver sí dices allá sí sí estoy aquí de exacto verás vamos a ver varias cosas siguiendo el primer día empecé diciendo cuáles son las intenciones de payton de la misma forma te digo que una cosa es lo que quieren en un principio que es el objetivo inicial era hacer un lenguaje de programación que fuera mucho más sencillo de aprender que cualquier otro lenguaje de programación sin embargo la realidad es que no te digo ya solo este proyecto sino cualquier otro proyecto y acaba teniendo acaba creciendo en una serie de direcciones y al final hay veces que acaba no cumpliendo demasiado bien lo que lo que en un principio se pretendía te cuento una cosa que igual no verás que parece que esté relacionada pero realmente sí que lo está ello durante años en prácticamente cualquier lenguaje de programación salvo que esté obligado como por ejemplo en java intentó enseñar primero a trabajar en procedural es bien estructurado para luego trabajar con programación orientada a objetos no solo en python sino en cualquier otro lenguaje que me lo permita entonces hace unos cuantos años tuve un alumno llamado julio que después de hacer la formación dijo mira yo como no estoy muy de acuerdo con lo de empezar con programación estructurada porque yo creo que lo que mola es programar y orientado a objetos y yo creo que el futuro es la programación orientada a objetos todo eso dijo yo voy a hacer un curso yo voy a crear un curso en el cual que los hay de hecho tampoco era un invento de este chico pero con el cual desde el primer momento se trabaje orientado a objetos entonces que yo le dije tuvo inténtalo pero cuando en muchos cursos los docentes empezamos con programación estructurada para luego saltar a programación orientada a objetos es porque tiene un sentido y no es porque luego en tu vida vayas a programar estructurado o vayas a programar orientado a objetos porque luego tú decidirás pero a nivel didáctico para alguien que empieza a programar es más seguro que esa persona consiga entender correctamente los fundamentos de la programación empezando por lo sencillo y no empezando la casa por el tejado con esto lo que te quiero decir es que porque tú dirás lo que me has contado no tiene mucho mucho que ver con lo que he preguntado lo que tiene que ver es que el lenguaje de programación python intenta ser mejor que el resto de lenguajes de programación haciendo las cosas más sencillas o aparentemente más sencillas pero es que al final lo que hay es lo que hay y al final un lenguaje de programación es un lenguaje de programación hay una hay toda una categoría de lenguajes de programación no sé si se ha visto alguna vez que son los lenguajes de programación esotéricos no sé si lo has oído alguna vez entonces el esoterismo suele suele asociarse como a ciencias ocultas o sea es como un lenguaje de promoción astrológico pues no es eso exactamente pero son lenguajes de programación que parten de un paradigma bastante extraño con respecto a lo que consideramos normal entonces por ejemplo pues esto es es un lenguaje asdf que sólo utiliza cuatro instrucciones entonces hola mundo es esto son lenguajes que claro solo cuatro instrucciones con lo cual es mira más sencillo cuatro instrucciones sí pero espera que luego hay que mover el puntero a la memoria entonces claro de repente pues ya no es tan sencillo vale o por ejemplo no sé si has oído hablar porque en corrillos informáticos se suele hablar mucho de este lenguaje pero en plan de broma del lenguaje blind fuck vale que es el lenguaje de que te voy a el cerebro entonces básicamente tener en cuenta que por ejemplo el compilador ocupa 240 bytes pero por ejemplo el hola mundo sería esto de aquí entonces es un poco al final cómo programar en binario que dices vale pues vete a saber ya no pretenderás que yo aprenda a programar de forma funcional o de forma operativa en este lenguaje de programación vale entonces otra pregunta que a lo largo de los años me han hecho muchos alumnos porque los lenguajes de programación salvo alguno concreto que está en alemán pero porque los lenguajes de programación está en inglés porque no puede haber un lenguaje de programación en español pues pues bueno pues por qué no pero el caso es que por lo que sea incluso cuando los creadores de un lenguaje de programación no son angloparlantes pues acaban creando el lenguaje de programación en inglés entonces con respecto a esto que me comentabas de limite yo ahí sí que he echo mucho de menos el que los lenguajes de programación se pongan de acuerdo y todos llamen al método constructor de la misma forma porque por ejemplo en aquí es init en el lenguajes de programación como php que es construcc hay otros lenguajes como java donde para que sea el constructor el nombre del método tiene que ser el mismo nombre de la clase es decir todos tienen o prácticamente todos los lenguajes orientados objetos tienen la el concepto de método constructor pero luego como lo implementan pues cambian luego por ejemplo si que el self es un parámetro muy controvertido que no sólo existe en python existe en un montón de lenguajes de programación entonces siempre que veas el parámetro self el parámetro self sirve para más adelante discriminar cuando estoy hablando de mí mismo o cuando dentro de una clase puedo acoger a un parámetro global que viene de fuera de la clase es claro el parámetro self la palabra el cual dice efectivamente es como el dis en java o como el dis que se usa muchísimo en javascript al final es lo mismo al y es que al principio parece una pérdida de tiempo pero al final tiene su razón de ser y cuando te digo que tiene su razón de ser no estoy defendiendo que sea la mejor solución que se podía haber implementado porque como te digo es como cualquier proyecto que empieza que las intenciones del proyecto al principio son buenísimas y luego a lo largo del proyecto pues la cosa ya va cambiando o se va adaptando oa veces directamente te lo digo se va corrompiendo se va pervirtiendo vale y la cosa acaba no siendo mucho como se pensaba a ser entonces este es un poco en la cuestión de que estoy de acuerdo con lo que comentas y es que incluso dices oye un guión bajo guión haría una forma más sencilla de cada constructor pues mira pues han pensado que tú nunca usaría un guión bajo y por tanto ellos usen su palabra reservada para definir el método constructor y yo que sé que se va a hacer vamos a continuar por aquí y voy a crear un método sencillísimo tengo un gato pues el gato maúlla vale entonces desmaya y digo print el gato está maullando vale entonces a continuación lo que voy a hacer es definir que mi fifa es igual a gato entonces digo que es un gato y digo que es de color naranja realmente da igual porque si te fijas no estoy usando el parámetro para nada en los métodos pero bueno podría podría plancharlo en la pantalla es decir podría decir micifuz punto color y pulso f 5 y me dije naranja o sea que realmente el parámetro existe pero el caso es que si vengo aquí y digo maúlla es cuando pulso f 5 y webó vamos a ver mago llamado william aoyama ya vale así sí sí claro es que no sprint ok ay vale ya nada ok vale espera micifuf llama guayama uia porque self entonces el gato en este caso estaba maullando vale ahora a continuación es cuando voy a hacer lo siguiente para continuación voy a definir una clase que es una superclase qué es la clase mamífero la clase mamífero tiene un método vamos a ver que voy a por ejemplo edad lo voy a decir se el punto edad es igual a edad y ahora digo de mama porque los mamíferos maman entonces es igual self a print punto este animal mamá al nacer a continuación como en cualquier sistema que use algo de herencia lo que quiero es decirle al sistema que este gato es perdón este gato de aquí deriva de mamífero así que a continuación vengo por aquí y digo que la clase de gato a su vez deriva de mamífero vamos a ver a continuación vamos a ver a continuación le doy a efe 5 en este caso básicamente lo que hace es de momento decir nada y a continuación lo que quiero es decirle al sistema quiero ver si existe si el sistema ha heredado automáticamente elementos entonces en primer lugar voy a decir me fifa punto mama pulso f 5 y en este caso lo que me está diciendo es este animal mamá al nacer démonos cuenta que en este caso mi cifu que es un gato gato no tiene la el método mamá pero sin embargo mamífero tiene el método mamá por tanto si gato es un mamífero automáticamente gato está heredando todo aquello que viene en esta clase y de la misma forma yo podría continuar tantas veces como quisiera para decirle al sistema class y animal por ejemplo un mamífero es un tipo de animal de esquina no sé sabes qué propiedad le puedo meter porque haya metido edad altura yo que sé es una altura entonces self punto altura es igual a de altura y ahora vengo por aquí y digo def salta digamos que los animales saltan es algo que desconozco si hay animales que no saltan digo print este animal es capaz de saltar muy bien entonces vengo por aquí y digo mi fifa puntos alta efe 5 y vamos a ver si por qué mamífero tiene que heredar de animal ahora pulso f5 y me dice este animal es animal es capaz de saltar es decir animal está mamífero está heredando de animal gato esté dando de mamífero y por tanto ese animal salta automáticamente se propaga al resto de clases de la misma forma que te digo esto te digo que por ejemplo en python tenemos una implementación no tan extensa o no tan compleja como en otros lenguajes de programación donde por ejemplo ahora mismo animal y mamífero serían clases abstractas en cualquier otro lenguaje de programación una clase abstracta es una clase diseñada únicamente para que otras clases se beben de ella pero no está diseñada para que se cree se derive ese instancia un objeto a partir de esa clase a mí siempre me ha gustado el ejemplo del gato porque si yo imagínate vale si yo te digo creo un gato placa puesto te imaginas un gato delante de ti vale pero si yo te digo creo un mamífero tú dirías a ver qué un mamífero no es al orgullo de repente visualice delante de mí o sea mamíferos un tipo de animal pero dime qué tipo concreto de mamífero más a instancia porque tú me dices que un mamífero y no me hago la idea de lo que estás creando vale o es como si te digo instancia un animal pues tuvieras ve hay miles de tipos de animal dime algo más porque así de repente no me hago la idea pero gato aunque podría haber muchos tipos de gatos por una ninguna idea un poco más concreta de qué es lo que estoy haciendo a la instancia vale en python al igual que hablamos el otro día y continuaremos profundizando pues no hay tanto ese concepto de privado y público pues tampoco hay tanto ese concepto de abstracto en el sentido de que por ejemplo en otros lenguajes como java tú dices que una clase abstracta tú intentas heredar de esa clase y el sistema triste era error porque te lo prohíbe porque te has comprometido a no heredar una instancia de esa clase vale en python no otra cosa muy interesante también otra cosa muy interesante también es que realmente dentro de que evidentemente y por supuesto hay motivos no lo voy a negar especialmente cuando un proyecto es grande y especialmente cuando múltiples personas trabajan dentro de él pero claro yo siempre que no haya en los cursos de payton los cursos dejaba cuento esto de lo de público y privado y las clases abstractas porque no así como en python siempre hay algún alumno que dice y porque esto no está implementado en python en java siempre hay algún alumno que dice esto para qué sirve porque si tú no quieres que alguien instancia perdón que alguien eleve de una clase simplemente diré el equipo de programadores oye no eres de esta clase a esta problema solucionado o sea para qué sirve de abstracto sólo abstracto se soluciona diciéndole a la gente oye no le deis de esta clase de punto sabes entonces claro ya sé que en equipos más más grandes de personas pues no basta sólo con decirle a la gente oye no hagas esto sino que tienen que haber mecanismos de mediante software es decir mediante la propia naturaleza del lenguaje de programación que te permitan no claro correcto la abstracta veces claro pero la abstracta yo no puedo instancia es la idea si yo intento instancia de una clase abstracta en java por ejemplo si yo la declaró como abstracto clase eso es eso es que insisto y te lo vuelvo a decir si le preguntas a alguien de alguien que sea purista de los lenguajes de programación seguro que te dará mil razones concretas y justificadas para las cuales existen las clases abstract es decir te pondrán mil ejemplos en los cuales debe estar prohibido por parte del sistema heredar una clase abstracta por ejemplo esa persona te podría decir que en el típico ejemplo de software bancario que el hecho de heredar de una clase abstracta podría comprometer la seguridad de todo el sistema simplemente creando un objeto que es imposible de existir es decir y esa persona también te podría poner ese ejemplo de un software en el que haya cientos de personas trabajando a la vez en diferentes países con diferentes perfiles es un poco como la clásica discusión de los permisos de archivo y los permisos de carpeta en un sistema operativo cuando por ejemplo dejamos en sistemas linux o en sistemas unix puedes definir puede restringir quién puede leer quién puede escribir y quién puede acceder entonces claro hay veces que a alguien le dejan o en base de datos en base de datos ocurre lo mismo y es que esto era una base de datos a alguien le puedes dar un acceso para solo leer y alguien le puede dar un acceso para leer escribir modificar y eliminar de estos días para que existen estos permisos si no quieres que alguien modifique simplemente tiene o bien no me modifique pero a veces la vida de nuestra sencilla a veces la vida digamos aunque esa persona se lo digas o por porque lo toca igualmente o por accidente lo puede tocar con lo cual necesita es tener un medio mediante el software que te permita restringir eso de las clases abstractas y realmente un montón de cosas en lenguaje de programación son así y es que en este caso python no lleva una implementación tal cual de ese concepto de abstracto y podría haber razones que justificaran que sí que hubiera esa implementación muy bien este es el tema de la herencia de múltiples clases es otra cosa donde python un poco se parece a otros lenguajes de programación como por ejemplo hace más más donde perdona o como java donde por ejemplo hace más más tú puedes elegir in edit from taca taca taca está los separados con comas y luego otros lenguajes por ejemplo como java donde puedes heredar de una pero quizás mediante una implementación implementos poder implementar otra entonces hay lenguajes de programación que no se puede implementar de una sola vez pero sí que se puede implementar en cascada o en árbol quiero decir que se puede heredar de varias a la vez no de un solo golpe sino creando un árbol de jerarquías y creando un árbol de jerarquías al final sí que puedes heredar de varias no sé si sabes lo que digo de hecho lo habrás hecho igual en algunos otros lenguajes de programación que no te permite dar varias al mismo nivel con lo cual haces una jerarquía y lo acabas haciendo bueno bueno pues para no hacer una clase tan dura de objetos lo que tenía previsto es irlo viendo a lo largo de los días y a continuación lo que tengo previsto es el tema de el bucle el ciclo vale lo del canvas animal entonces verás en este ejercicio a continuación te voy a enseñar varias cosas vamos a ver para empezar para empezar en otro día vimos programación orientada a objetos y hoy por ejemplo ya estamos trabajando con clases pero hoy por ejemplo como te digo estamos trabajando con iu pero te lo digo como otro decía el otro día estamos trabajando como a mí me gusta trabajar con python es decir y compartir y con cualquier un lenguaje de programación que es eligiendo cuando quiero trabajar con clases y cuando quiero trabajar en un mismo programa con programación estructurada ahora bien el curso no puede acabar menos que está acabando ya evidentemente queda mucho pero no puede acabar sin al menos haber visto algún ejemplo de algún programa realizado enteramente con programación orientada a objetos entonces el ejercicio que traigo a continuación es un ejercicio específicamente pensado para ello voy a crear un new file y este ejercicio es muy importante por varias cosas voy a llamarlo 54 y voy a llamarnos plantilla loop y la razón por la que lo voy a llamar plantilla loop es porque a partir de este punto bueno de hecho yo probablemente use este ejercicio como plantilla para otros ejercicios durante el curso y sobre todo quiero que te quede como plantilla para cuando quieres hacer algo parecida a lo que voy a hacer ahora entonces en primer lugar voy a crear class te acuerdas del software que os enseño el otro día que simulaba el coronavirus y todo eso pues voy a crear una clase persona entonces a partir de aquí le creó una clase y dentro de esto voy a crear una clase de aplicación y tengo esto de aquí por cierto una pequeña cosita en python que tiene que ver con programación orientada a objetos y es que lo más probable es que si yo intento ejecutar este programa de error vamos a verlo así muy bien vale lo guardo y me dice esperaba un bloque intentado esto no es sólo de programación orientada a objetos sino de hecho también es estructuras de control sí yo creo por ejemplo un foro es como que me comprometo a poner algo aquí a continuación claro yo puedo poner un print pero ahí sí no quiero poner un print o si no quiero poner nada vale pues hay un comando que es paz en el espacio es un comando vacío pulso f 5 y ahora si este código funciona porque en alguna ocasión te puede interesar crear alguna estructura que esté vacía porque porque ya le llenará tú más adelante entonces a continuación dentro de la aplicación voy a empezar a escribir algo de código vamos a ver por una parte y bueno para empezar también aquí arriba import teca inter vale y vamos a hacer lo siguiente en persona les voy a decir que tiene un parámetro llamado object esa palabra es una palabra reservada vale quiere decir que de ahí voy a instancia algo y a continuación lo que voy a hacer fíjate que si yo ahora arrancó esto no ocurre nada voy a decir por aquí print el programa ha arrancado pero evidentemente si pulso de f5 en este caso me dice el programa ha arrancado porque la clase aplicación está arrancando a partir de ese objeto de hecho he hecho yo soy una persona normal lo más deseable en este caso vale yo soy una persona y el programa ha arrancado esto es por el propio proyecto cuidado el propio oriente está forzando sin dar nada el momento un momento que las personas vale también porque evidentemente debería poner todo el método y no estoy creando allí directamente entonces des salva yo soy una persona arranca el programa ha arrancado creó métodos ahora ya no hace nada vale voy a crear ahí voy a indicar que esto es el objeto y ahora lo que voy a hacer a continuación es que programa o aplicación es igual a aplicación uso otra palabra reservada que es roto qué quiere decir root ruth quiere decir raíz y quiere decir que este programa arranca a partir de la raíz porque porque puedo crear otra variable donde arranque un subproceso ahora luego por cierto evidentemente hablaremos también de sus procesos así que hago así aplicación pulso f 5 vale vale y en este caso lo que tengo que hacer es decirle al sistema es igual el root es igual a teca inter.it cab en su f 5 y vamos a ver vamos a ver y ahí lo tenemos en este caso aplicación me saca un error porque me dice que no toman y no ven ningún argumento vale pero no pasa nada porque a continuación empezamos a trabajar lo que tengo por tanto es que es importante que inter como teca le digo que ruth es igual a teca apuntó teca es decir carga me la librería entera y a partir de ahí arranca me la aplicación en root que es lo que estoy haciendo lo que estoy haciendo es que la aplicación le estoy pasando el objeto teca para que para poder utilizar la librería teca dentro de la clase es decir yo puedo crear un programa en el cual trabaje con la librería teca como variable global o bien puedo proteger global dice osa puedo proteger pk inter diciendo que sólo exista dentro de aquí dentro lo que hablábamos el otro día vale es una forma de hacer que algunos elementos tengan algo parecido al estatus de privado vale entonces momento me paso al siguiente vídeo bueno a continuación ahora sí vale ok voy a arrancar voy a ponerlo aquí arriba in it vamos a escribir cel vale [Música] pregunta este es el método constructor vale y yo f5 aparece la ventana vamos a ver requiere los parámetros que voy a decir por ejemplo edad f5 vale y este es el método constructor estoy pasando edad simplemente porque me ha pedido un segundo parámetro pero no lo estoy usando de momento de edad lo que quiero en este caso es dejar claro cuál es la diferencia entre init y arranca y es que init lo que hace es que se ejecuta el sí o sí a la instancia y por tanto dice este es el método constructor y arranca solo se ejecutará cuando yo lo quiera con lo cual con lo cual arranca no sé si llamarlo para que lo entiendas mejor bucle qué es lo que va a hacer bucle lo que va a hacer bucle es ejecutarse una y otra vez es decir déjame que te lo comenté este método se va a ejecutar una sola vez mientras que este método se va a ejecutar de forma continua llámalo arranca llámalo bucle llámalo como quieras vale entonces pulso f 5 este es el método constructor y yo ahora a continuación lo que voy a hacer es decirle al sistema que quiero utilizar vamos a ver lo escribo así y luego igual lo pongo en línea desde el constructor quiero arrancar una vez el bucle es como vale app todo lo que tengas que hacer una vez y una vez que hayas hecho lo que tienes que hacer salta al buque y en el bucle empieza a darle vueltas así que a continuación voy a escribir lo siguiente voy a escribir self punto master punto after vale a ver punto after es un método específico de esto de teca inter y el after lo que hace es como una especie de time out lo que en otros programas se llama un time out es después de un cierto tiempo voy a poner en mil ejecuta algo ese algo que voy a ejecutar es self punto bucle entonces a continuación vamos a verlo el programa ha arrancado y empezará a dar vueltas f5 vale haber momentos tres metros el constructor momento master vale vamos a por él y en este caso voy a meter por aquí dice que master no reconoce porque aquí dentro voy a decir self punto master es igual a master self coma vamos a verlo ok ok vamos a probarlo vale vale ahora me sobre edad muy bien vale ok date cuenta de lo que ha pasado no sé si has visto que ese error ha tardado un segundo en salir voy a volver a ejecutar y esto es porque bucle y un segundo y bum y esto es porque al bucle le falta un parámetro entonces voy a escribir self pulso a f5 este es el método constructor y ahora el programa ha arrancado y empezará a dar vueltas si ahora hago esto mismo es decir si ahora este mismo self lo pongo a continuación lo pongo aquí self punto master after dentro de un segundo o dentro de lo que tú digas arrancará otra vez el bucle el bucle es el mismo con lo cual que estoy haciendo lo que estoy haciendo es una forma parecida a la que hacíamos el otro día voy a hacer un wild true pero en lugar a hacer un well true estoy haciendo una función que se llama a sí misma además una función que se llama a sí misma y en en el mismo parámetro de la función el mismo parámetro after está diciendo el time out cada cada cuánto retardo se tiene que llamar vale entonces vamos a comprobar si no da error ok y ahora y ya tengo un bucle infinito ya tengo un bucle controlado y de hecho ahora verás que ahora en cuanto empecemos a escribir teka ínter aquí dentro te darás cuenta de que lo representa correctamente vale más cosas vamos a ver varias cosas bueno para empezar lo que voy a hacer es verás verás el wild true el problema es que bloquea el hilo de ejecución es decir al bloquear el hilo de ejecución hasta que el wild true no salga de ese hilo no hace otras cosas tales como por ejemplo dibujar en teca inter quiero decir que el wild true es más recomendable en acciones en las que no se requiere una salida visual por pantalla cuando te digo visual ni siquiera me estoy refiriendo a un print o a un teca inter sino algo que te saque algo por pantalla igual tú me dices mira quiero calcular los 10.000 dígitos del número pi y al final quiero que me lo presentes por pantalla al final en ese caso el wild es correcto sin embargo hay veces que el wild aún con el slip nos puede dar problemas como veíamos el otro día en cuanto a que por mucho que le pongamos slip el hilo de ejecución está secuestrado y hasta que no haga un break hasta que no libere el hilo de ejecución no hace otras cosas como por ejemplo pintar en teca inter esto lo que está haciendo no es secuestrar el hilo de ejecución sino aquí el programa o sea hasta este punto mira hasta este punto del programa es libre es decir que hago esto y ahora hace esto y el programa está liberado esto lo único que hace es con el programa liberado y si el programa está liberado a continuación puede pintar en teca inter o puede hacer lo que quiera es decir mira el programa es libre de hacer lo que quiera ahora dentro de un mil milisegundos ejecuta otro comando que te voy a decir esto que estoy haciendo por tanto es como te digo un temporizador que es como un poco un precursor del siguiente ejercicio que tengo para la clase de hoy que son los tres lo que quiero en definitiva es no bloquear el hilo de ejecución sino que el programa lo dé por finalizado al darlo por finalizado que pueda hacer otras cosas y eso sí dentro de un tiempo en que pueda ejecutar un comando esto que te acabo de decir no es tan sencillo por una razón muy concreta el ejercicio de hoy es un ejercicio que no va a revestir mucha dificultad pero es un ejercicio mediante el cual te voy a poner deberes como para que tengas todo el fin de semana para estar ocupado con esto porque porque yo te planteo lo siguiente como te digo el ejercicio es sencillo pero qué ocurre si le digo que dentro de 1000 milisegundos ejecuté otra acción pero lo que voy a poner a continuación le ocupa más de 1000 milisegundos en completar pues que tendría un problema y es que estaré llamando a la siguiente iteración antes de que la anterior pueda haber acabado su función vale entonces a ver para cada problema hay una solución evidentemente y en este caso es no ejecutar el self master hasta que no haya acabado todo lo demás y te digo lo siguiente para que veas que esto es mucho más complejo de lo que parece vamos a ver verás supongo que sabes esto es más una pregunta que otra cosa lo que son los fps vale pues sí sí sí sí es que eres gamer es que el jugador evidentemente el tiempo queda libre porque la gente que no juega a juegos fps y te dice no sé ahora mismo de qué me estás hablando pero la gente que juega juegos es como por favor que me estás contando por supuesto que sea lo que son los fps entonces claro yo ahora mismo con un bucle yo lo que tengo aquí aunque parezca que no haga lo verás pero lo que tengo aquí es un pequeño juego o sea esto que ves aquí es el núcleo de cualquier videojuego que es una función que se ejecuta al principio y una función que se ejecuta en bucle 1000 milisegundos para cada iteración este juego a cuántos fps es va pues va a un gps por segundo fps quería decir vale entonces tú que consideraría que es un fps bien deseable a qué te gustaría llegar 60 qué edad me dijiste que tenías tránsito 38 pues pues entonces tú no eres de 60 es más de 30 como yo o sea esto de 60 es más de veinteañeros por favor o sea la gente que tenemos ya la vista tocada ya no distinguimos entre entre 60 o los más jóvenes 120 claro muy bien la inversión que te has gastado en tu geforce pues evidentemente hay que claro desde este cuento verás si yo quiero obtener 60 fotogramas por segundo evidentemente el cálculo es tan sencillo como 1000 partido 60 y quiere decir que en milisegundos tendréis que poner vamos a poner 16 o 17 vale lo que tú quieras entonces voy a poner aquí 16 por ejemplo se suele poner 16 aunque sea redondea 17 pero se pone 16 entonces pulso efe 5 y ahora este programa y cuidado vamos a ver el programa internamente está yendo a 360 fotogramas por segundo ahora bien simplemente tener en cuenta espera que se ha quedado un poco frito simplemente en cuenta que el print tarda un poquito en arrancar para entonces el print pero esto no sólo en python en cualquier lee en cualquier lenguaje de programación el hecho de meter print en la consola ralentiza la ejecución por cierto que se ha quedado más frito que todas las cosas hay equipos de internet vale muy bien lo voy a devolver a mil pero simplemente para que sepas que ahí ese parámetro es donde pondremos los fps proyecto digo una cosa espera déjame que lo ponga pelear que le pongan a 16 yo hago cosas yo hago cosas yo hago muchas cosas y esas cosas tardan 10 o 100 milisegundos en hacerse entonces esto es real este 16 es real claro no lo es porque este 16 sería real si lo que yo hago aquí en este bucle tardará 0 milisegundos en hacerse pero tengo que calcular cuánto tarda en calcularse estoy aquí para restar lo de este 16 y entonces llamar al nuevo bucle lo que te quiero decir por tanto es que esto que estoy haciendo hoy en la pantalla es como un videojuego en pañales es como el origen el principio de un videojuego pero simplemente lo que quiero que tengas en cuenta es que algo tan sencillo como por ejemplo el el cuánto va a tardar en llamarse la siguiente iteración te puede dar a mí me ha dado durante los años para discusiones en clase pero de horas de este parámetro como habrás visto en mis redes sociales yo provengo mucho del mundo de los videojuegos de programación de videojuegos e3 no te puedes imaginar por ejemplo para un videojuego de chutar un balón o para un videojuego de disparar una bala las discusiones de si el balón o la bala deben estar en el cliente o en el servidor nos hemos tirado horas en clase discutiendo eso porque cada uno tenía un punto de vista de razones a favor y razones en contra de por qué hacer una cosa u otra vale por eso solamente decirte que este parámetro yo pongo ahí 16 o pongo 32 para 30 fotogramas por segundo o 33 que suele poner mejor dicho y y simplemente que sepas que eso puede dar para mucho más pero ahora de momento te lo digo lo que quiero lo que quiero es hacer una copia de seguridad incremental de este ejercicio plantilla loop 2 porque pues por una razón muy sencilla yo te pregunto a que hasta aquí salvo alguna palabrilla como máster y tal pero aquí hasta aquí has entendido bastante bien cómo funciona este ejercicio pues se va a complicar par entonces cómo se va a complicar por eso quiero hacer un incremental para que si luego dudas de dónde salió cada cosa puedas ir viendo cómo ha crecido este ejercicio y pueda separar qué es lo que hace cada parte de este ejercicio a continuación lo que vamos a hacer es que dentro de este init necesito vamos a ver ok esto lo puedo quitar ya porque ya sabemos cómo funciona lo que necesito es decirle al sistema que voy a trabajar con teca inter entonces self punto canvas podría llamarlo lienzo y llamarlo canvas es igual a teca punto canvas vale que evidentemente equivale a llamar a la librería canvas dentro de tecate acá ya sabes que si la línea es que le hemos dado a teca inter al cambiante cada por longaniza lo que quieras pero lo que pongas aquí arriba tiene que ser lo que pongas aquí abajo entonces canvas self punto master lo que quiere decir que yo en un momento dado o sea insisto y lo vuelvo a repetir lo voy a volver a repetir muchas veces más esto lo que quiere decir es que yo estoy preparando este programa para que pudiera tener múltiples canvas vale por tanto perdón aquí lo que le estoy diciendo es que no quiero cualquier canvas quiero un canvas que está en el objeto principal vale ahora como es un canvas le puedo poner pues otras muchas cosas como por ejemplo wish es igual a no sé cuántos píxeles le pongo a 600 por ejemplo yo espera déjame una manía personal el 512 vale porque yo soy muy de números porque son potencias de 2 aunque evidentemente puedes poner lo que quieras pero vale y height es igual a 512 que es otra de las discusiones que a lo largo de los años he tenido con los alumnos es porque los números que son potencias de dos rinden mejor que los números que no son potencias de dos en sistemas informáticos vale entonces por eso aunque a día de hoy está mente lo tengo que decir la diferencia de rendimiento es prácticamente inapreciable pero suelo poner potencias de dos por setas por manía personal entonces self punto canvas punto pack vamos a verlo de momento ok y esto lo que hace evidentemente es que déjame que ves porque se queda un poco frito déjame que quite esto perdón esto es más voy a quitar esto el método se llama a sí mismo no soy tampoco mi amigo de los acentos sobras dado cuenta porque si lleva lleva esto o no bien ahora a continuación lo que quiero hacer es introducir cosas dentro del camas y dentro del canvas en este caso voy a introducir personas así que aquí dentro de la persona voy a hacer también un método init de hecho vamos a ver limit y voy a decir que self coma y canvas porque evidentemente esta persona va a dibujar dentro del canvas y ahora a continuación esto lo puedo quitar ya y de mover esto por cierto daría error porque se esperaba un intento vale entonces es el punto canvas es igual a canvas ok muy bien y de mover print voy a mover efe 5 y ok ahí lo tenemos cerramos y se hace falta así que me está interrumpiendo a ver sí correcto no no no no me está rompiendo vale para continuación yo lo que voy a hacer es lo siguiente voy a decirle al sistema self punto d es un parámetro que de momento no he creado que es canvas punto y te acuerdas el otro día que vimos que había varios métodos de create rectángulo y create oval recuerdas entonces voy a usar canvas create oval vale el problema en este caso está en que necesito una serie de argumentos para crear el óvalo así que para pulsar el f5 vale el óvalo en este caso va a tener una serie de argumentos en este caso de número desconocido y por tanto voy a crear aquí de momento un puntero un momento porque ya hablaremos de punteros en python algo de punteros entiendo que conoces de algún otro lenguaje de programación de cuál efe vale perfecto sufriste con los punteros de c todo el mundo lo hace en python sufriremos también un poquito lo que lo bueno que te voy a decir evidentemente es que si si ya ha sufrido los punteros de fe pero a la vez eso te ha permitido entender el porqué de los punteros pues verás que en python es exactamente lo mismo yo decir que no volverás a sufrir desde cero sino que el por qué es exactamente el mismo entonces argumentos y más argumentos mientras aquí lo que voy a hacer es en create oval decir qué argumentos coma más argumentos igual lo que sea 15 evidentemente vale ahora a continuación voy a crear dos parámetros que son self punto velocidad en x voy a decir que va a empezar siendo igual a 5 y self punto velocidad y que voy a decir que va a empezar siendo igual a 0 o por ejemplo velocidades y luego llegar se igual a 5 es decir un movimiento diagonal en definitiva esto que va a hacer pues que cada vez quiero que cada vez que cree una nueva persona automáticamente salga despedida hacia la derecha cinco unidades con velocidad es igual a cinco vamos a darle ok y ahora a continuación lo que voy a hacer es antes de definir mover mover de momento no hace nada lo que voy a hacer es pintar una momento voy a pasar con una una o varias personas dentro del canvas vale hasta ahora aunque esto es un poco místico vale aunque esto es un poco raro está claro que desde aquí estoy preparando para pintar un óvalo ok preparando solo pues ahora vamos a ver si es cierto que aquí aquí ahora voy a pintar uno o varios óvalos vamos a perder ahora a continuación ahora vamos a pintar varios óvalos self personas date cuenta una cosa personas con minúsculas y lo estoy poniendo en plural quiero que quede claro que no hace referencia a persona sin embargo sin embargo esto va a ser igual a llave llave que era esto de llave llave que no me acuerdo si esto de he puesto personas es igual a llave que se abre llave que se cierra qué es esto una lista y eso quiere decir que personas no va a ser un único óvalo sino que ahora luego voy a meter varios óvalos vamos a ver cuántos entonces a continuación voy a decir persona y dentro de persona vamos a ver dentro de persona vamos a ver voy a decirle self punto canvas vamos a meter los parámetros que va a aceptar el método constructor y los parámetros que va a aceptar el método el constructor son en este caso vamos a decir por ejemplo que esté en 50 y 50 vamos a hacerlo redondo vamos a decir no se fíen como a 100 vamos a decirle que out line sea black y vamos a decirle que fil sea no sé de qué color quieres ok muy bien y ahora a continuación self canvas y yo creo verdad vamos allá f5 algo vale y como podemos ver ahí lo que he hecho es lo siguiente vamos a ver con los argumentos yo lo que le estoy diciendo es te voy a pasar una serie de argumentos pero no te estoy diciendo cuántos para pasar una serie a continuación lo que hago es pasarle tantos argumentos como se necesiten donde eso sí cómo te puedes imaginar ya me preocuparé yo de que este número de parámetros que le pase sean los mismos parámetros que necesita esta instrucción concreta que es el cristóbal porque como le pase un parámetro más o le pasa un parámetro menos evidentemente va a fallar vale entonces yo te diría que esto es algo así como un cheque en blanco es como ya veremos lo que te pasó vale no es como hemos trabajado hasta ahora donde recuerdas como otro día decíamos que te prometo tener este paso 3 te prometo 4 te paso 4 vale aquí no es aquí te voy a pasar una serie de argumentos porque pues porque en este caso si trabajando con un ride y tobal pero podría crear otra cosa diferente a continuación si ya tengo esto permíteme hacer esto para que lo veas con más claridad y a continuación lo que voy a hacer es crear otro elemento una coma perdón y voy a crear otra persona y va a estar en los ciento cincuenta 150 va a tener un radio de treinta y treinta más que nada para hacerlo circular no ovárico y outline de color red y phil de color blue vale por ejemplo ok entonces f5 cuidado cuidado pero más que que me he cargado mover esperamos revivir hablé recibió red y blue terrible 250 150 250 250 y esto de 10 pies voy a hacer los pequeños para asegurar que es que nos están metiendo uno encima del otro ahora vale ok entonces este vamos a ver está en 50-50 no me cuadra mucho el 50-50 también te lo digo porque si tiene 10 diario espero que el 50 estuviera más por allá si esto es 10 parece que 50 es este no me está funcionando muy allá te lo voy a decir pero bueno si está raro porque parece como que el 50-50 sea este de aquí este punto de aquí y el 1010 sea este de aquí de momento contener dos círculos en la pantalla ya me vale algo y dejar la lista abierta vale bueno vamos a trabajar con esto y ahora volveré atrás sobre mis pasos para comprobar que todo está correcto pero en principio si te parece que esté correcto evidentemente visualmente no pero según el código si vale que nos preocupe si vamos a hacer otras cosas y ahora volveremos a esto entonces momento para el siguiente vídeo vale entonces ahora lo que quiero es que al mover quiero que los elementos se muevan aleatoriamente pero si me permites lo que voy a hacer es otra iteración del proyecto para luego que puedas ir siguiendo como creció el proyecto me vengo aquí y por cierto para que luego puedas ir siguiendo como creció el proyecto ni se te ocurra hablar medellín vale te lo digo porque no se usan siete hits hab vale vale bueno pues ya hablaremos de ello pero no hoy vale y es que hitchcock es un repositorio de código entonces bueno de hecho seguro que lo has usado alguna vez para descargarte cosas para código de otros proyectos la idea es que en github tú puedes subir código tu puedes subirte tu propio código entonces github de hecho mira voy a entrar en el mío vale voy a entrar en mi propio github donde de vez en cuando lo que hago es que de hecho si quieres puedes entrar y verás que hay mogollón de proyectos y verás que tengo proyectos en un montón de lenguajes de programación y entonces hay veces que hay alumnos que me invitan me dicen oye por qué no lo pones en github por una razón muy sencilla y es que yo cada vez que hago un cambio en un proyecto puedo hacer una cosa que ya te explicaré más adelante que se llama un comité entonces se crea automática de ventura en una nueva versión del proyecto con lo cual en un momento dado se crea un histórico y en ese histórico se pueden ver todos los pasos que se han dado en ese proyecto sin embargo github es todo el universo vale por tanto no quiero ahora meter varias complicaciones a la vez prefiero que avancemos en python y en un momento dado lo que haré es enseñarte github como sistema de control para que puedas ir realizando un versionado de tus proyectos por cierto que tuvieras sí pero entonces la gente el público verá mi código no es exactamente así porque en github incluso con la cuenta gratuita hay proyectos privados que solo tú y las personas que tú decidas podéis ver entonces como te decía voy a crear una interacción más de este proyecto 56 plantillas loop 3 vale y en mover te voy a decir en este caso que existe existe un comando dentro de canvas dentro de teca inter que es el comando move no mover sino move para ello voy a hacer lo siguiente vamos a ver para ello voy a crear primero lo que se llama un bone ding box el bound in box es una caja digamos de una caja de alcance vale 1 bound in box y entonces digo x1 coma x2 y 1 perdón coma x2 coma y 2 es igual a self punto canvas punto beat box self punto y por cierto que aquí me falta un self tú dirás qué es esto de aquí pues yo me vengo a la documentación oficial de payton payton vivox y verás qué payton teca inter vivox y verás que lo que hace es devolverla a tu plan con las coordenadas x 1 y 1 x 2 y 2 del rectángulo que coja los elementos ya que es un bone de inbox como es como una especie de cursor es como pilla todo lo que haya dentro de esta caja que te voy a decir o sea no es no es el bound inbox como una caja que se dibuja es como si yo hiciera esto mira como si vengo este operativo y hago flag y hago esto y ahora digo pilla me todo lo que esté dentro de este recuadro es lo que quiero decir y luego es mueve me todo lo que pide dentro de estas de cuadro pues en este caso el bound inbox lo que hace es esto para que ponga esto a la derecha y ahora lo que quiero en este caso es ver cuál es la velocidad entonces digo lo siguiente vamos a ver [Música] voy a decir v x es igual te acuerdas el importe en random vale pues v x payton run domínguez 13 cursos porque aquí no ramdín esto es vale esto v x es igual a menos 1 alguno evidentemente v y es igual a menos 1 y 1 y entonces ahora entonces ahora atención voy a decir lo siguiente este momento dejamos el chito ahora lucharé y digo self punto canvas y punto self punto y coma self punto velocidad en x como self punto velocidad en y qué es lo que estoy haciendo lo que estoy haciendo es que cada vez que yo ejecuta el comando mover se va a preguntar si la velocidad de x es menos 1 estira para la izquierda pero quédate quieto o 1 913 a la derecha y si el ub y es menos uno recuerda tira hacia arriba pero quédate quieto y uno tira hacia abajo o sea que es lo que quiero lo que quiero es que las pelotitas se que se muevan aleatoriamente vale ahora vengo por aquí y si ya he definido mínimamente ahora lo complementario pero se haya definido mínimamente lo que hace el comando mover ahora aquí abajo lo voy a utilizar ahora a continuación vamos a ver voy a crear un método un momento este es el método bucle vale y ahora 1 una a una a las personas y las nuevos en las a continuación lo que voy a hacer es recorrer una lista te acuerdas como recorríamos listas hicimos lo hicimos un ejercicio en la agenda y digo lo siguiente por persona self punto personas una cosa que sepas que cuando pongo persona en todos los bucles de recorrer es como si pusiera longaniza osa puedes poner lo que quieras pero una buena costumbre en prácticamente cualquier lenguaje de programación o sea que no te creas que coge esta palabra y le quita la última ese porque evidentemente vale no hace eso pero una práctica una buena práctica en cualquier lenguaje de programación es que si aquí pones personas pues el cada elemento iterativo que coges es el mismo elemento pero en singular vale entonces vengo por aquí y digo persona punto mover ten en cuenta que lo que está haciendo ahí es a cada uno de estos objetos a cada uno de los circuitos persona punto mover vale y ya está vamos a verlo yo creo que no me dejó nada voy a hacer esto más grande yo creo que no me dejó nada como para que se empiece a mover vamos a verlo vale se mueven hacia la derecha bien y te digo se mueven hacia la derecha por la sencilla razón de que el vx de dicho 5 entonces voy a hacer esto y ahora ya no se mueven y ahora dan un segundo vamos a esto vamos a poner uno estamos viendo píxel a píxel es decir vamos a ver se mueven ok este move es el que está haciendo que se muevan porque fíjate que si este muslo comentó ya no se va a ver nadie ya no se mueven pero eso vamos a hacer una cosa déjame no hacer una cosita va a poner aquí 6 ok vale no lo está cogiendo v x no lo está cogiendo y voy a hacer una cosa vamos a utilizar el bone inbox si lo que está haciendo es no está asumiendo que lo tenga que o sea no está asumiendo que esto lo tenga que utilizar los voy a hacer lo siguiente si es cierto que x uno es mayor que cero en este caso ejecutaré esto vamos a verlo y yo creo que sí efe 5 me lo sigue ejecutando pero siguen no ejecutando quiero decir así muy bien no es v x es el v x este sencillo les digo vx es como que existe una variable global llamada x pero si no lo digo sé el fútbol x es esta velocidad y es esta velocidad efe 5 ahora sí ahora si te fijas aunque seguimos con la disyuntiva de porque no está cogiendo bien vale pero ahora si te fijas cada uno de ellos se mueve con una velocidad diferente puedo hacer lo siguiente puedo jugar un poquito con la dirección vamos a hacerlo así que permíteme una cosa como con esto tengo para dejarte deberes para el fin de semana unos cuantos bastantes prefiero antes de que nos coma más el tiempo a hablar de fred ings hablar de hacerte un ejercicio debemos también de tareas y luego ya el resto de que nos quede de clase ir complementando este ejercicio quiero decirte quiero decirte que yo ahora podría hacer lo siguiente mira y ahora vengo y creó otra persona de hecho es la copia no creo otra persona tú vas a estar en 350 vas a tener 20 vas a ser de blue y vas a ser de red con lo cual solo por meter eso solo por meter un elemento más en la lista yo hago así y tengo un elemento más yo creo que esto está incrementándose no sé si ahora veremos porque esto se está yendo como de madre pero por ejemplo en esta última iteración realmente que te acabo de enseñar porque te enseñaron nada más es decir te ha enseñado que metiendo más elementos en la lista el foro es capaz de ir elemento elemento con lo cual ahora mismo este programa una cosa muy buena que tiene es que es escalable escalable en el sentido de que este mismo código que hemos desarrollado que sirve para mover tres pelotitas y te sirve para mover 500 mil pelotitas hemos sufrido un poco para crearlo pero lo bueno que tiene haberlo creado todo orientado a objetos es que ahora es totalmente escalable pero como escalable prefiero para darte también cosas en las que pensar el fin de semana hacer el siguiente ejercicio de frings y de fred por cierto que no es lo mismo y luego ya volvemos a este ejercicio y un poco intento ponerte algún objetivo concreto de app pues como 20 personajes se mueven en un entorno y chocan entre ellas por ejemplo chocar entre ellas reconocerse entre ellas ya es un reto o por ejemplo implementaremos seno y cosenos para que en lugar de moverse como zombies que se muevan con una dirección vale pero quiero hacer antes del otro ejercicio no pero llegas justo a la segunda parte de la clase entonces como decía vamos a ver qué hay dos librerías dentro de payton que vienen por defecto que es la librería fred y la librería cering la librería fred es más antigua pero más fácil de utilizar la librería trading es más moderna pero también es más compleja e implementa más cosas entonces vamos a empezar con la librería fred o con la librería trading realmente da igual cuál cuál se va a importar el trading entonces guardo voy a 57 reding de paso también voy a encender la luz y voy a decir import trading ok efe 5 y de momento nada vale entonces a continuación lo que voy a hacer es lo siguiente veréis en una palabra que me gusta mucho porque es muy común con respecto a muchos lenguajes de programación que es el término worker pero en este caso lo voy a traducir al español porque se puede ver trabajador el término worker trabajador es un término muy simpático porque es como que tú te conviertes en el jefe y tienes varios trabajadores y cada trabajador hace una cosa diferente a diferencia de lo que hemos hecho hasta ahora porque lo que hemos hecho hasta ahora era trabajar con un único trabajador vale entonces yo digo del trabajador voy a decir hola soy un trabajador y ahora a continuación lo que voy a hacer es lo siguiente voy a decir tareas es igual a en este caso ya veis llave es una lista y voy a decir lo siguiente voy a decir por ti en reims el range es de 5 alguien me recuerda porque utilizaba la letra i que no me acuerdo la vocal es un integrador vale con nuestros quiero decir es que en lugar de y podéis poner lo que sea pero digo te de trabajador es igual ahora ya no lo puedo elegir es freddy ngg punto fred o sea de la librería a freddy ngg quiero una instancia de un objeto de tipo fred y le digo target es igual a trabajador una vez más que sepáis que lo que he puesto en inglés tiene que estar en inglés lo que he puesto en español tiene que estar en español y ahora tres tareas perdón tareas en el lapin acordáis que era para meter un nuevo elemento quiero meter la te y por último te punto start vale qué es lo que voy a conseguir con esto lo que voy a conseguir con esto en aparente en apariencia es nada pero realmente es mucho pulso f5 muy bien y oye si yo lo he hecho un print es decir no sé si habéis visto cómo me ha hecho cinco espacios nos resisto quiero decir imagínate que yo hago 15 el pulso f 5 ok y que está allí no lo haya visto vale y ahora lo que ha hecho es print soy un trabajador contra barra n ahora vale menos porque me hace eso y luego me hace de 15 espacios pero vale me vale igualmente bien entonces vamos a ver un segundo según vienen dejadme que compre una cosa comentar ejecutar o qué es lo que quería comprobar ya está les comento la región vale aunque él lo que he conseguido os puede parecer bastante poco bastante poco espectacular pero sin embargo es muy importante porque lo que he conseguido es crear en este caso 15 tareas de procesamiento independientes que el sistema operativo y con esto ahora a continuación os voy a echar un rollo bastante increíble pero es obligatorio que el sistema operativo reparta las tareas entre los hilos de procesamiento que tiene de hardware y ahora es donde ahora veréis que la cosa se va a complicar un poco y los ha ejecutado de forma paralela a continuación vamos a aumentar un poquito esto vamos a trabajador número y en este caso voy a decir lo siguiente trabajador más vamos a ver y hacer lo siguiente trabajador más número yo soy el trabajador número + número más contra barra m vale que ok ok y con esto evidentemente los argumentos el target es trabajador como argumentos es igual a y voy a poner hay una coma ok vale o la voy a poner 5 trabajador argumento debe ser un iter hable no un int vale en este caso a hacer lo siguiente porcentaje string porcentaje número valen un momento trabajador argumento número y ya está ok ahí es donde me estaba dando error porque esto no espera que sea un entero sino que sea un inter hable bueno vamos a dejarlo de momento ahí simplemente lo que quiero es que el sistema me identifique esto de aquí y decirme qué ha pasado no se ha ejecutado el secuencial entonces voy a darle f 5 otra vez y veréis que el orden puede cambiar completamente así ok guardaron ah perdón esto es lo que quiero ejecutar 0 1 2 3 4 en este caso ha habido un poco de suerte pero vuelvo a ejecutar 0 1 2 3 4 y vuelva a ejecutar 0 14 23 entonces mira lo bueno que tiene esto es que no sé si os gustan las carreras de caballos a mi mami no particularmente en oído nunca pero pero creo que más o menos a menos de las pelis os hacéis una idea lo que es de lo que es una carrera de caballos entonces esto es como que cada vez que yo creo esto cada vez que yo creo este print lo pongo en una casilla de una carrera de caballos y cuando le doy a la señal de salida cada caballo va a su rollo en definitiva en teoría deberían ir en orden porque es el orden el que yo los he puesto pero es como que los pongo todos al mismo nivel y le digo venga a arrancar y cada uno va a arrancar como quiera vale entonces con esto a continuación lo que voy a hacer es arrancar cada uno de los hilos y decirle al sistema que lo que quiero es digamos como te diría yo crear una recuerda es lo que hablábamos antes de lo de el time punto script es decir ahora digo un trabajador número importan sí time sleep de uno era uno era mil mil entonces momento 5 vamos a ver ok por eso no tengo claro si era 1000 pero luego uno el 5 vale date cuenta que cada vez cada vez son diferentes pero te digo más ahora a continuación el time punto slip lo quiero en microsegundos entonces a continuación lo que voy a hacer es python time sleep micro seconds wesley s ese es el que quiero sí claro pero claro que yo tampoco bueno si no admite simplemente esto pues ya me vale entonces f5 vale pero hay una cosa muy divertida qué es la siguiente vamos a ver vamos a ver si lo podemos ver ahora quiero que 1 partido número sólo quiero 23 división 0 así perdón por número 1 es que hay uno que es el cero f5 vale damos cuenta lo que está pasando no sé si veis que por cada uno del 0 hay 2 del número 1 lo veis pero si yo ahora pongo un 4 os daréis cuenta que por cada uno que hay del 0 hay un montón más del 3 del 3 hay un montón es decir qué es lo que tengo pues lo que tengo es que ahora mismo cada uno de los tres va de forma independiente vale cada uno de los tres no no están bloqueando son lo que se llaman no en blogging no están bloqueando al resto de hilos y cada uno de los tres puede hacer lo que quiera por ejemplo voy a ver si consigo reventar el ordenador digo en sentido figurado voy a parar esto he dicho que voy a parar esto oye qué mal rollo vale hay algún fresco mira a la y espera que nos haya quedado no sabemos ha declarado el proceso no está mental tengo que acordarme de enseñaros a matar los procesos mediante de payton entonces vamos a ver cpu no nos ha quedado nada corriendo correcto vamos a ver a continuación voy a hacer un programa lo voy a guardar dentro de la carpeta se va a llamar único y voy a hacer lo siguiente importan y vigo despu cla número es igual a 20.000 000 trick este elemento y ahora un número es igual a número por 1.2 vale ahora time punto sleep de 0.01 y bucle qué es lo que he hecho lo que he hecho es que esto se repita cien veces por segundo bucle si quieres ay perdón como si fuera javascript contador es igual a cero contador es igual al contador más 1 y lo que voy a hacer es el clásico truco de programación de si contador porcentaje 100 es igual a cero en ese caso print ok la cosa va bien por qué pues porque sólo quiero que me ejecute a esto una vez cada 100 veces una vez cada 100 contadores una vez cada contador no 100 veces por segundo porque entonces ya sabes qué la consola me hará de cuellos de botella y el rendimiento no será real entonces vengo por aquí ejecutó muy bien error vale qué pasa contador porque me estás diciendo qué contador es igual al contador uno antes de la asignación así que ha sido asignado contador es igual a cero contador es una variable global es hermoso time punto slip de 1 a ver si no se da cuenta y ya está contador antes de porque me estás diciendo esto local variables que no es una local variable es una global variable se llama contador se llama contador voy a [Música] aunque es mala hay otra cosa que se me puede ocurrir claro vamos a ver contador referenciada antes de ser asignada vale más igual a 1 bien vamos a ver contador está referencia antes de la asignación esto me está extrañando mucho porque el contador está asignado tiene que haber un motivo por el cual el programa está dando este error porque si yo cojo esto y lo comento el mismo lo mismo y número tampoco le cuadra porque está dando exactamente el mismo error curioso una cosa que se me ocurre es meter las formas es que ya os digo que esto es el clásico ejercicio que he hecho un millón de veces y no me está cuadrando pero bueno al contador número ok ahora los estoy metiendo por lo cual tiene que existir y bucle contador como número y los pasos como parámetros bucle contador coma número f5 y ya está ya está pero no está porque lo que hemos hecho antes bien lo que está haciendo es que únicamente está diciendo la cosa va bien cada 100 ejecuciones vale muy bien ahora en este caso el máximo un recurso de fe exceder vale vamos a poner vamos a poner milk efe 5 ahora solo va a decir esto en este caso una vez cada 1000 ejecuciones y lo que quiero es sacar esto y quiero ver si es cierto al final y quiero ver si es cierto que payton estaba usando algo de cpu momento voy a comentar esto vale [Música] está arrancando estoy viendo quién usa el procesador no vale vale el máximo número de recursos no me dejas me deja recurrir más bueno lo que estaba intentando evidentemente es ver es intentar que esto se ejecute lo más rápido posible a ver si por lo menos me deja ver aunque sea un momento aunque sea un momento el procesador no me está dejando verlo bien lo que quiero en este caso es de mostraros de mostraros como aunque yo consiga ejecutar esto ahora veremos el tema de esta de la recursión a ver si puedo decirle que quiero que recurra más que aunque yo ejecute esto de manera infinita finalmente este programa de aquí únicamente va a utilizar un solo núcleo de procesamiento que es esto de los núcleos de procesamiento y ahora mismo por ejemplo en este ordenador tengo un procesador de tipo i5 y un procesador de tipo y 5 quiere decir que tiene 4 hilos de procesamiento cuatro núcleos realmente esto quiere decir que si yo ejecuto este programa como mucho no voy a conseguir ejecutar más de un aprovechar más de un 25% del procesador da igual del programa que yo hiciera nunca usaría más de un 25% del procesador yo os pregunto qué procesador tenéis vosotros que usáis que lleváis en vuestra máquina vale dentro de que un intel pero un intel que necesita menos un intel a ver eso míralo en la placa o donde sea fíjate que yo por ejemplo en este caso he visto que es un intel core i5 dani tiene 17 danny dentro de que no me sé de memoria ese número de modelo esos son 8 núcleos 8 tareas son 8 núcleos 16 tareas vale pues el i7 por tanto puede ser ocho núcleos puros y ocho tareas o puede ser en los modelos más elevados ocho núcleos 16 tareas nos frustraría tu creo al final de anime asisto ese choque difícil tareas no no te frustrar y adán y tener un procesador del cual únicamente puedas usar un dieciseisavo es decir es como antes de la tarjeta gráfica nvidia es como entonces para que me hagas todo el dinero sabes o sea 100 partido 16 usaría es un 6 25% del procesador y tuvo fernando en el caso de que tengas 188 estaría usando no más de un 12% del procesador vale entonces por eso ahora lo que voy a hacer es volver al ejercicio de los tres bueno estaban viendo ahí lo de la recursión de los tres servín co vale y ahora lo que voy a hacer con estos de aquí fíjate es lo que voy a hacer es el time punto esl y ponerlo a 0.1 prince lo voy a quitar valen y ahora voy a hacer lo siguiente con un momentín moment in [Música] voy a que se haga un cálculo sabes que sea así muy bestia payton pi pi pi pi vale más de la librería matemática así que importa y más le vale pues voy a decir [Música] sabes mi número es igual a más mi partido número y no voy a hacer nada más con eso va a ser un cálculo que no va a ir a ninguna parte vamos a pulsar el 5 flow división by 0 por qué pues porque es número 1 número 1 porque hay un core que tiene el identificador 0 ok no está haciendo nada aparentemente de hecho ahora es cuando lo paro y creo que no va a hacer nada pero yo lo que voy a hacer aquí es que en el 4 voy a poner 40 la atención 40 tengo cuatro núcleos he pedido 40 tareas efe 5 y voy a ver el monitor de actividad a ver qué me dice payton lo acabo de ver por ahí 1,6 por ciento de la actividad 17 vale voy a hacer una cosa voy a cerrar todo voy a abrir otra vez python allí parecía que se empezaba a ver algo y voy a abrir mira ahora parece que con un poquito de retraso sabes voy a abrir el último y voy a meterle si se si de repente veis que se me cae el zoom reinicio el equipo y vuelvo a entrar vale tengo porque voy a pedir cuatrocientas tareas no sé cómo va a responder el sistema ahora digo que se cuelga es que igual se cuelga así que le doy aquí a efe 5 vale me voy al monitor de actividad y voy a esperar unos pocos segundos a que esta gráfica se rehaga tengo idle por ahí tengo python a atención que ahora ya me ocupa el 15% los acordes que ese momento ocupaba era uno y pico por ciento pues pues voy a parar a ver el monitor y voy a pedir más todavía y payton no ha cerrado bien vale cierro cierro sabes 1400 2400 ahí entonces le doy a efe 5 que es que en plan hasta que se note valen mira veis que ahora python tiene el 153 por ciento no tiene sino que está pidiendo el 153 por ciento y yo creo que veis ahí abajo que ahora sí se produce bueno para empezar el procesador lo tengo prácticamente al 100% lo veis ahí abajo en la gráfica y veis que la carga no ya la ram fíjate que la ram tampoco en este caso va a aumentar prácticamente nada que creo que te voy a tener que bajar mucho para ver que payton me están haciendo 35 megas de ram o sea prácticamente nada pero en cpu yo creo que sí que veis claramente como en este caso estoy consiguiendo utilizar el máximo de recursos vale y ahora a continuación os pregunto ya no tendré que ver más voy a cerrar python para demostraros que payton es lo que está gastando el procesador en el momento hay veis que baja de golpe me pregunta a continuación es cómo puedo pedirle a un sistema que tiene cuatro núcleos de procesamiento que me arranque 2.400 tareas que me decís nos parece eso cisco eso veréis la respuesta es la siguiente realmente la respuesta la sabéis y especialmente dani cuando me has dicho que tienes 38 años yo te digo que la respuesta a las aves por tener 38 años porque pues ahora verás porque una cosa son tareas para hacer y otra cosa son núcleos de procesamiento para hacer las tareas hace una serie de años por ejemplo hace en torno a 20 años no había multiprocesador una de hecho lo había pero eran muy caros pero digamos que el usuario doméstico no tenía multiprocesador pero sin embargo los sistemas operativos de tipo multitarea existen desde muchos años antes que los multi procesadores es decir hace en torno a digamos 20 años teníamos por ejemplo 21 121 221 3 incluso los primeros 21 4 antes de que llevaran hyperthreading que sólo tenían un núcleo de procesamiento pero sin embargo en el sistema operativo de aquel momento podíamos ejecutar varios programas a la vez cierto o no porque era esto pues porque lo que hace el procesador desde hace muchos años desde principios de los 90 más o menos es que soporta el multi threading y el multi tasking esto quiere decir que ese único hilo de procesamiento va cogiendo varias tareas a la vez primero resolver una y luego resolver otra logro sobre otra y luego vuelve a la primera se las va encadenando el mejor ejemplo que os puedo dar es una cremallera una cremallera en la que va enlazando uno con otro o sabéis cuándo hay un atasco que sólo hay un carril libre y hay tres carriles de coches atascados como los coches van van colando se uno tras otro o sea se van alternando primero del carril número uno luego el 2 luego el 3 luego en 1 el 2 y el 3 y al final van pasando correcto pues un procesador es así un portador lo que hace es que si tienes muchas tareas pues va metiendo poco a poco yo en este caso cuando he dicho que quiero usar 2400 tareas no le he dicho que quiero usar 2400 procesadores yo lo que acabó de crear aquí es un pequeño atasco y entonces le he dicho quiero tirar 2400 coches a la vez por cuatro carriles porque mi procesador tiene cuatro carriles que es lo que hace el sistema bueno si los coches van suficientemente rápidos no hay ningún problema pero si los coches van lentos los voy a meter en cola y si los meto en cola quiere decir pues que el sistema irá un poco vendido el sistema irá al 100% vale y todas las peticiones no podrán ser atendidas en tiempo real entonces por eso lo que quiero deciros es que una cosa es las tareas que arrancase a la vez y otra cosa es los núcleos de procesamiento que tengáis dicho lo cual dicho lo cual dentro de que en próximas sesiones porque ahora antes de irnos quiero volver al ejercicio anterior en próximas sesiones os están enseñando pues otra serie de cosas como por ejemplo pues como matar tareas o cómo o como sincronizar tareas es decir hay veces que tú tienes un cálculo muy complejo que quiere dividir en varias tareas entonces lo que quieres es que la tarea número uno acabe la tarea número dos acabe la tarde menos tres acabe letra el número cuatro acabe que recojan el resultado de su trabajo y que lo presenten todo junto o sea sincronización de tareas ahora mismo en este ejemplo no tenemos sincronización de tareas pero lo que quería antes de acabar la clase de hoy era demostraros que es relativamente sencillo lanzar varias tareas a la vez en python por supuesto importando la librería correspondiente y que cada tarea vaya a su rollo y en próximos en próximas clases veremos como sincronizar estas tareas de aquí pero antes de acabar lo que quería como os decía antes de acabar lo que quiero es volver al ejercicio anterior es plantilla luz vamos a recordar lo que hacía plantilla loop y lo que hace es que crea estos tres objetos voy a hacer lo siguiente esto lo voy a bajar a 50 50 [Música] vale vale me sigues encuadrar pero y ahora esto es 30 y 30 bien ahí están estar ahí metidos dentro pero y ahora aquí voy a meter 300 y 200 es como que ha invertido los parámetros porque los dos primeros parámetros son la x la y y los dos segundos son la estola sobre altura nuestras pues no pasa nada calculo que durante el fin de semana resolver el misterio pero vale vamos a ver lo que quiero es que hagáis algo con estas partículas es decir lo que quiero es que hagáis algo con estos objetos que podemos hacer pues por ejemplo una cosa que podéis hacer este fin de semana es no sólo ya crear tres sino crear 300 y al crear 300 quiero que comprobéis como rinde el sistema quiero que comprobéis como rinde python quiero comprobar si va bien o va mal otra cosa que os voy a decir por ejemplo otro reto que os pongo osea este ejercicio os lo digo tiene millones de retos posibles mirad si yo cojo esto y lo copio y lo pego para el lugar hacer 3 hacer 6 ejecutó vale tengo por ahí equis circulitos corriendo no pasa nada y ahora bien lo que voy a hacer voy a hacer así y ejecutó el sistema sigue yendo bien el sistema va fluido pero lo que he hecho os gusta ok no no no no no es la respuesta correcta porque no te gusta nos dejemos correcto el otro día en clase dijimos que cuando el código se repite de una forma muy descarada es que no parece la mejor forma de hacerlo cómo se te ocurre que podría hacerlo pues entre yo con sencillo porque si tú ves si tú ves que por ejemplo personas estás repitiendo algo siempre que algo se repite es un bucle foro es un bucle wilde entonces mira mira ahora yo tengo aquí voy a hacer un 6 personas que tiene una persona a continuación voy a decir four y un range de 5 te digo 5 como un índice era igual digo personas punto apple y le aprendí hizo esto y lo que estoy haciendo es lo mismo que estaba haciendo antes pero de una forma mucho más elegante cuidado esto va a ser fijo pero también te digo que le puedo poner un random por ejemplo y así cada uno será diferente aleatoriamente entonces vamos a probarlo a ver si no me da error un antes de hacer nada más inbar y sintax qué te pasa vamos a ver a penn sí perfecto ahora normas de mia que hago si esto es con persona y todo he quitado lo de personas f5 bien personas y eso es notify momento personas de personas semanas personas section time eso ya no me gusta tanto así perdón perdón self personas y ahí hay ahora mismo 10 elementos pero sabes que yo vengo por aquí y digo no quiero 10 quiero 100 o mil sabes quiero aprender a la tarde mostrarte cómo ese código es mucho más elegante y de cara a poner a prueba el sistema fíjate que he puesto mil bolitas parece que no pero hay mil bolitas y se sigue comportando de una forma bastante buena vamos a seguir tocando este sistema vamos a ver ahora que quiero ha importando vale ya lo tengo y quiero random int entre 0 y era 512 en la x sea para que cada bolita se cree en un sitio diferente vamos a ver si funciona bien o se vuelve a rallar yo que sé ejecutó te digo yo hay algo que no va aparte fíjate no me cuadra nada esto allí vamos a ver quién de los tres encuentran tres en dónde está el problema porque hay algún tipo de problema y yo estoy empezando a sospechar de estos parámetros no sé por qué pero estoy empezando a sospechar de ellos pero bueno el caso voy a decir 51 pero el caso es que si os fijáis estoy creando mil elementos con un bloque de código mucho más elegante de lo que tenía en su momento podemos crear elementos podemos cambiar los colores podemos hacer que en lugar de ir random que tengan una velocidad y que se vayan moviendo en una dirección concreta podéis intentar hacer atención mirar la x de cada elemento y la y de cada elemento para compararlas entre sí y ver quién está cerca y quién está lejos y por ejemplo decir bloques tan cerca que se cambien de color o los que estén lejos que se atraigan o lo que evites saber lo que quiero decir vale 3 este ejercicio como os digo es infinito si queréis un poco de inspiración y si no os lo puedo pasar yo este fin de semana no hay mayor problema si queréis un poco de inspiración si t si entráis el otro día si entráis perdón donde os dije el otro día no de el coronavirus y mira es el código fuente de mi aplicación a ver código fuente código fuente y así pero pero déjame momento vale como opción si veis el código fuente está hecho en javascript pero sin embargo si os fijáis las personas es que las personas y nit es el constructor y veréis que hay cosas por aquí como por ejemplo la velocidad o el ángulo y tenéis por aquí el coseno y el seno ya tenéis por allí las fórmulas trigonométricas para calcular no un movimiento aleatorio que parece que se hayan vuelto locos ahí los personajillos sino que tengan un movimiento un poco más natural lo digo porque aunque de hecho fíjate lo que te decía antes el self de payton es el dis de javascript y de otros muchos lenguajes de programación entonces tenéis un código que es bastante parecido a lo que hemos hecho hasta ahora pero más allá de que el código sea parecido lo que importa es que tenéis veis tenéis el mueve y tenéis el mover en este caso tenéis un código en el cual os podéis inspirar para implementar metodologías y antes de entonces vamos a empezar para la sesión de hoy hoy es una de esas sesiones como te diría yo [Música] la palabra estoy expresó esta tarde ambiciosas una ambiciosa porque hay un montón de cosas quiero ver y bueno pues lo que no de tiempo hoy pues el próximo día vale pero vamos a ver bueno lo primero no voy a empezar todavía ahora por ahí vale pero una de las cosas de las que quiero hablar durante la sesión de hoy este porque es utilizado para este ejercicio la librería en un país con un pib o como lo quieras llamar entonces esta librería lo que hace es que habilita a payton para usar arrays por cierto que como llamas todos los arrays en castellano bueno muy bien muy bien muy bien efectivamente te lo digo porque la gente llama incorrectamente a los arrays en castellano los llama matrices cuando no son técnicamente matriz es técnicamente arreglo es una traducción perfectamente válida aunque no desgraciadamente no se usa mucho otra de las traducciones en castellano aceptables es colección pero la gente pues suele llamar a estos a estos contenedores de datos pues eso a raíz directamente o matrices vale lo digo porque yo probablemente por el shake of clarity es decir por en pro de la claridad igual utilizó el término array o matriz vale pero que sepas que soy consciente de que los términos técnicamente correctos son arreglos o colecciones bien entonces voy a poner por aquí voy a poner por aquí una buscar en internet vale big o complexity box o no be o complexity chart vale venga vamos a ver esto y encuentro una página hay muchas páginas como ésta vale pero encuentro una página que es big is it city y esta página me dice en primer lugar cuál es la traducción en castellano de cuando encontramos una complejidad de 1 log logaritmo n ósea o logaritmo n n o en el logaritmo n es decir lo que hace es traducir nos y con un código de colorín vale el rendimiento general de cada una de estas complejidades espera a continuación a continuación esta página hace un pequeño análisis por una parte en cuanto a el promedio de acceso búsqueda inserción y eliminación y luego tenemos también un peor de los casos vale con diferentes tipos de estructura de datos entonces podemos comprobar en este caso cómo o mejor dicho yo entiendo quiero pensar quiero creer que si has instalado la librería nunca hay es porque has visto que en acceso tiene una complejidad de a uno single link list o en doble link list tiene una complejidad de o a n entonces las listas en en python tienen una serie de ventajas por ejemplo vemos como en insertar y en eliminar tienen mayor rendimiento que en las arrays en las matrices pero sin embargo en el acceso tienen mayor rendimiento las matrices que las listas entonces yo lo primero que quiero preguntarte es que supongo entiendo que este es uno de los motivos por los cuales debes haber elegido utilizar la librería nunca y en lugar de las listas que vienen por defecto en python pregunto entonces otro motivo puede ser perfectamente el utilizar no sólo ya el soporte para arrays sino las funciones que vienen incorporadas con la librería bay vale pues pues bueno veo que te pones componer risa como diciendo pues mira no pero me lo he encontrado de casualidad sabes entonces bueno la verdad es que si lo hubieras elegido por ésta por este criterio hubiera sido una muy buena elección porque en el ejercicio que estás realizando técnicamente es un tipo de ejercicio que no requiere realmente especialmente insertar y eliminar muchos componentes sino que tú tienes unos componentes la pantalla y lo que estás haciendo en todo momento es mediante ese bucle fork acceder a ellos para leerlos y para comprobar la posición y en base a la posición calcular la distancia y en base a distancia elegir si haces una operación o no quiero decirte que más allá de que hayas utilizado funciones específicas de la librería pero desde este punto de vista vale pues también es una buena elección luego también que sepas que tenemos por aquí un pequeño chip si te vale una pequeña comparativa de cuáles son para diferentes tipos de algoritmos de arrays orting el rendimiento vale de cada uno de ellos en términos de en términos de natación o por cierto que por cierto que yo siempre digo que hay un gif animado que gusta por internet que a mí siempre me ha parecido pornografía pura y dura que es que si buscas a ride sorting algorithms live supongo que habrás visto este gif pero me podría pasar horas y horas mirándolo este momento que lo abra en grande esta vez bueno ahora hay un montón parecidos evidentemente pero sobre todo a mí estos estos tipos de esquemas animados me gustan mucho en las clases para dejarlos un rato corriendo en la pantalla e incluso evidentemente pasarles el enlace a los alumnos para que entiendan qué son los algoritmos de ordenación más que nada porque por ejemplo hacer una clase de cómo invertir un algoritmo sin visualizar este esquema puede ser una clase realmente dura a nivel conceptual pero con una animación cita de éstas y digamos que los alumnos se entienden de una forma mucho más fácil qué es lo que queremos hacer por ejemplo con un algoritmo de ordenamiento aleatorio o cuál es la diferencia con respecto a pues vale cada uno de estos digamos meter esa tabla sólo tiene cuatro si buscamos mira por ejemplo por ejemplo por ejemplo mira esto este es otro de los jeeps que puedo tirar horas mirándolo este es el sell short es lo que va haciendo es visualizar de una forma gráfica cuáles son las operaciones que realizamos dentro del programa d y esto entonces es un momento momento porque si entro aquí por ejemplo este de aquí por ejemplo estos de aquí en definitiva mira por ejemplo esté aquí en definitiva la idea es que en el momento en el que trabajamos con estructuras de datos vienen muy bien estos tipos de esquemas un poco para comprender antes de empezar a programar qué es lo que estamos haciendo realmente y cuál es el motivo vamos a ver este y cuál es el motivo por el cual hay unos algoritmos que tardan más o tardan menos dependiendo de cuál sean las características de cada uno de los tipos de datos vale bueno muy bien pues nada esto por aquí esto por aquí lo voy a parar ahora luego para luego hablaremos un poquito más de un par probablemente hablaremos en plan rápido porque he visto que ya estás manejando la librería vale con lo cual tampoco me voy a detener demasiado en ella pero sí que quiero al menos que queden pues dos o tres vídeos con alguna grabación de que es nun bai y qué es lo que tiene y qué es lo que hace y cómo se trabaja y sobre todo cómo se declaran matrices de múltiples dimensiones que se declaran en una forma muy sencilla y luego cómo se acceden y todo eso pero antes de ello

bueno pues vamos a ver a continuación voy a hacer lo siguiente vamos a ver tengo por aquí en la carpeta de curso de payton unas imágenes que deje el otro día momento unas imágenes que dejé el otro día aquí están ahí están verdes tengo estas imágenes el riego puedo cualquier otra realmente me da igual pero voy a una de estas entonces por ejemplo esta primera se llama a josé vicente punto jpg voy a obtener es una imagen que tiene 400 x 400 píxeles en este caso lo primero que voy a hacer hoy es trabajar con una librería que empezamos a utilizar creo que la semana pasada no la anterior una librería llamada pil que me sirve para tratar imágenes y para realizar operaciones con estas imágenes entonces esta librería se nos quedó pendiente de instalar porque tenía que actualizar el python del sistema a payton 3 ya lo tengo actualizado y por tanto he podido instalar la librería y a continuación quiero hacer una demostración de cómo tratar imágenes cómo poder leer píxel a píxel y como ahora luego vamos a poder llegar a luego otros móviles no sé cuándo depende como nos rinda la clase pero cómo podemos utilizar esta librería para realizar trabajos con grandes volúmenes de datos y aplicar técnicas de machine learning y de deep learning para el tratamiento de imágenes por ejemplo para reconocimiento de formas entonces vamos a ver en primer lugar lo que voy a hacer es que de la librería pil quiero importar todo aquello que tenga que ver con imagen hará luego importaremos más cosas de la librería pil para dibujar algún rectángulo o algo así para que veamos que se pueden hacer más cosas vale pero verás a continuación digo lo siguiente digo imagen es igual por cierto voy a guardar esto esto en escritorio en curso de payton en bordet en python 57 pixels y digo imagen es igual a image punto open y voy a cargar la imagen josé vicente punto jpg entonces a partir de ahí lo que voy a hacer es lo siguiente digo píxeles es igual a imagen punto load básicamente lo que quiero hacer es cargar la imagen una vez que tengo esto yo puedo por ejemplo realizar acciones con la imagen por ejemplo imagen voy a imprimir esto vale a ver qué pasa en la pantalla y me dice que la información completa o sea el volcado de toda la información es el siguiente estoy trabajando con una imagen a través de la librería pil la estoy cargando a través del plugin de carga de jpg es es una imagen el modo de la imagen es rgb en el 99% de los casos suele ser rgb hay otro modo que éste niega acá pero no deberías utilizarlo nunca porque es muy incompatible lo que me interesa es que la imagen tiene un tamaño un size de 400 x 400 y está en esta dirección de la memoria si veo que tengo un parámetro size es que puede venir aquí y me puedo decirle dame directamente el parámetro size así que pulso f5 y me dice directamente te devuelvo una dupla de 400 píxeles x 400 píxeles vale lo cual es importante para las operaciones que vamos a hacer ahora a continuación ahora verás antes de continuar voy a abrir un segundo photoshop tú sabes que yo soy muy amigo del game pero una de las limitaciones que tiene el game es que no soporta imágenes en formato cm y acá vale por eso estoy abriendo el photoshop entonces voy a abrir en escritorio en curso de payton imagen imagen jose vicente ok y entonces aquí en imagen en modo de color hay un color que estem y acá del módulo de color del cual probablemente nunca habías oído hablar vale entonces pincho semi y acá lo convertirá a este modelo vale no pasa nada lo guardo como lo guardo como jpg que esto ya de por sí es una aberración pero en fin se me y acá para acordarme con suficientes en y acá ok y ahora me vuelvo a payton cargo la imagen y acá hoy vuelvo a volver y me dice y me dice que esta imagen el modo si te fijas stem y acá entonces lo que quiero que veas es que ha reconocido el espacio de color de la imagen entonces te cuento voy a abrir un text edit y te voy a contar algo muy sencillo y es que rgb es green blow esto estaba claro ahora bien hay un modo de color para impresión rgb es para pantallas para luz para dispositivos lumínicos hay un modo de color que es fian magenta amarillo yellow y yo toda la vida había creído que la cara de black y sin embargo un alumno hace un par de años me dijo y es que no es black ski vale entonces estoy comprobando que efectivamente era cierto porque si te fijas las impresoras de tinta digamos tienen claro exacto como cómo se imprime es con tres colores te salen una especie de gris chungo vale pues tienen un cartucho adicional de clave de color negro vale entonces lo que te quiero decir con esto es que estas imágenes están muy bien para impresión pero nunca se deberían tratar en programas tales como por ejemplo en lenguaje son entornos tales como por ejemplo en python de hecho que sepas que payton como acabas de ver se traga las imágenes jpg en cm y acá pero hay muchos otros programas muchos otros lenguajes de programación otros entornos y librerías que revientan cuando se encuentran un jpg en formato cm y acá porque hay un problema y es que el jpg en formato firme y acá no es oficial es un truco es como un of the road digamos es como algo que no debería existir pero existe te lo digo porque he tenido alumnos que haciendo ejercicios como este que estamos viendo se han bajado alguna imagen de internet la imagen les ha empezado a dar fallo fallo fallo fallo fallo fallo hasta que casi se han roto los cuernos a ver para averiguar por qué puñetas esa imagen de fallo hasta que hemos averiguado que es que la imagen estaba en cm y acá vale por eso es por lo que te ha insistido lo de el tema del espacio de color porque como cojas una imagen y claro no sepas qué siquiera existe este espacio de color pueden ser unas cuantas horas hasta averiguar cuál es el problema en este caso evidentemente pues programas como por ejemplo photoshop te pueden la imagen y de la misma forma que yo he cambiado de rege vea cm y acá también se puede cambiar de genérica krg hay una pérdida de la fidelidad del color de hecho yo nunca me he puesto a calcularla un amigo mío hace años que también se llama jose vicente que es muy conocido o sea mejor suficiente sant no conocido dentro del mundo de la programación atrás y del 3d pues el tío tuvo la paciencia de estar una tarde calculando es porcentualmente cuál era esa pérdida de finalidad que la mínima pero hay una cierta pérdida vale entonces vengo por aquí tengo la imagen original era continuación lo que voy a hacer es decirle al sistema voy a decirle al sistema que quiero averiguar cuál es el pixel de color en un píxel concreto voy a algo sencillito voy a decir print pixel píxeles en el que te digo voy a empezar por algo sencillo en 0 0 entonces en este caso lo que hace voy a decir imagen punto 6 f 5 y me dice mira es 84 76 65 y yo digo pues fantástico me lo tendría que creer entonces para comprobarlo lo que voy a hacer es la imagen ahora sí abrirla con el gimp vamos a ver i abre la imagen con el gimp me voy al primer hola me voy al primer pixel de todos allí arriba en la esquina me cojo el cuentagotas hago clic pincho ese color y compruebo cuidado no en el rango de observación sino en el rango de cero a 255 y compruebo que 84 es 84 que 76 el 76 y que 65 y 65 luego acabamos de comprobar como el programa ha hecho correctamente su tarea que ha consistido en cargar la imagen y en primer lugar leer el color de un píxel y devolvérmelo como una tabla si esto ya está bien y a continuación puedo hacer lo siguiente y es que píxeles de 0 0 ahora cogemos en la imagen punto 6 para vale para un elemento u otro entonces píxeles de 0 0 es igual a voy a hacer algo que sea fácilmente reconocible voy a poner 2 55 255 255 que es el color blanco entonces a continuación evidentemente lo que quiero es guardar la imagen imagen punto save y la voy a guardar en josé vicente guardado punto png jpg me da igual lo que sea así que si todavía bien pulso f5 vale sí todo ha ido bien debe haber aparecido una imágen llamada jose vicente y guardado igual no se ve ahora mismo pero la voy a abrir con el gimp la voy a abrir con el equipo y si todo ha ido bien me acerco ahí y voy a poder comprobar como efectivamente el pixel que se encuentra en 00 tiene el color blanco tiene el color blanco porque evidentemente 255 en el canal rojo 255 en el canal verde y 255 en el canal azul equivale a rojo perdón a blanco quería decir entonces dicho esto ahora a continuación voy a guardar esto como otro archivo 58 recorrer píxeles y ahora a continuación voy a decir lo siguiente yo podría decir altura es igual a 400 y anchura es igual a 400 pero tú me dirás que es más seguro que yo le diga en este caso que anchura es imagen punto size de 0 altura es imagen punto 6 de 1 voy a decir print anchura venga va f5 y me dice que la anchura de los 400 porque pues por una razón muy sencilla porque yo quiero que este ejemplo que yo estoy desarrollando ahora situará luego cuando acabe la clase lo coges y lo aplicas sobre una imagen que tenga diferente tamaño quiero que el programa se adapte automáticamente al tamaño de la imagen si yo pongo 400 400 sólo tratará los primeros 400 x con 32 píxeles te preguntarás por qué no traza toda la imagen vale por eso es por lo que me interesaba a el imagen punto 6 ahora a continuación voy a hacer algo que se salta a todas luces el cen de payton y es que si te acuerdas con el fin de payton había una había una de las reglas que era intentar no en inglés neste ar es decir no anidar estructuras sin embargo sin embargo vamos a ver momento y no vamos a recuperarlo sin embargo me voy a apoyar me voy a apoyar vamos a ver flat is better than esther pero claro si yo tengo claramente a todas luces en este ejercicio una matriz bidimensional de píxeles como sería flat pues flat sería como cada una de las filas y ponerlas todas en una sola fila y eso te lo digo porque por ejemplo el framework canvas en html5 funciona así eso es más eficiente pero te digo yo que es mucho más difícil vale es mucho más fácil en este caso digamos explicitó es mejor que implícito y que la legibilidad cuenta es decir voy a hacer un doble bucle foro que se salta esta regla pero eso también a la vez va a hacer que el código sea mucho más entendible entonces me vengo por aquí y digo por y reims 0 anchura sabes que tú ya sabes que yo suelo poner el ahí como integrador pero en este caso yo creo que va a ser más claro que ponga x para entender la diferencia entre la x la y palabras porque ahora vengo aquí y creó un segundo bucle for 5 for y en reims 0 como altura y ahora lo que voy a hacer de momento voy a hacer una pequeña burrada digamos pero print x + coma más y efe 5 vale está muy bien claro vale venga ok a string y si hago así me dirá quién tampoco porque creerá que es la dupla pues vale pues venga vale si te fijas va x 0 y así cuando y ahora para la ejecución cuando y llegue a 400 a ver si no tarda mucho en llegar a 400 cuando llegue llega llega a 400 lo que va a hacer es que y va a reiniciar y x será igual a 1 con lo cual lo que va a hacer es que va a barrer en este doble bucle todas las xy todas las y sales voy a hacer una cosa voy a pararlo porque si no va a estar ahí la vida hola yo lo que quiero es sí exacto para lo que no es lo que quiero es recorrer la matriz donde voy a hacer lo siguiente vamos a ver voy a decir ahora que rojo es igual a algo verde es igual algo azul es igual a algo y yo ahora digo es rojo es igual a píxeles x y de 0 es la primera de las duplas acuérdate que el color da una dupla de tres ventosas de tres parámetros el rojo verde el azul esto es el número uno y esto es el número 2 con lo cual yo ahora lo que podría hacer es decir píxeles de x de y de 0 es igual a rojo tu fíjate qué tontería acabo de hacer 1 y 2 verde azul y vamos allá entonces ok esto lo quito espero que no tarden mucho no creo que tarde más allá de los tres segundos vale muy bien tu plan no soporta asigna ok vale muy bien entonces no soporta asignación directa lo que voy a hacer es que pay píxeles de xd y es igual en este caso rojo verde azul y ya está no soportadas en acción directa por parámetros por no pasa nada ok y ya está lo que ha hecho es en jos eficiente guardado ha guardado esta imagen que es lo que he hecho realmente nada realmente lo que ha hecho es almacenar los colores reasignarlos y ya está ahora bien qué te parece si yo vengo por aquí y digo rojo es igual a 255 menos rojo verde verde azul azul y ahora te pregunto antes de ejecutar este ejercicio que dirías que hace perfecto hace exactamente eso así que ahora a continuación le doy a efe cinco meses pero fíjate ha tardado pues eso un segundo o dos con lo cual es un doble bucle for pero el rendimiento es relativamente aceptable y fuiste fijas lo que ha hecho es la imagen y a partir de ahí invertir la vale y ahora puedo venir y puedo realizar una serie de ejercicios tampoco me voy a enrollar mucho con esto pero para que puedas ver el potencial de esta herramienta yo vengo por aquí y esto es 59 recorrer píxeles grises y ahora digo pues sabes que el rojo es igual al rojo esta línea me la podría saltar verde es igual a rojo y azul es igual a rojo que dirías que estoy haciendo con este programa curiosamente por cierto yo sé que a veces cuando digo que dirías que este programa para con pocos dorada exploradora vale es como donde vamos a continuación pues verás lo que hace este este código y así que parece que lo pone todo rojo pero lo que hace es que si a los tres canales de color les está asignando el bid áfrica y pone rojo está asignando el mismo valor lo que estaba ocurriendo es que si el canal rojo el canal verde el canal azul tiene el mismo valor quiere decir que la imagen está en escala de grises entonces pulso a efe 5 y verás como lo que hace es poner la imagen en blanco y negro predominando el rojo vale hay otra forma de poner la imagen en escala de grises ahora verás la diferencia voy a guardar como lo voy a guardar como ejercicio 60 y así luego tienes la memoria de cada variación que hemos hecho que es qué color es igual rojo rojo más verde más azul partido 3 y todo ello importa más todo ello le voy a decir que quiero flor que lo quiero redondear hacia abajo entonces vengo aquí y digo color color color ejecuto vamos a ver según flor húmeda de error no debería dar error pulso f5 mira ahora la imagen o la espera cada dolor vale flores notifight más punto flor el 5 mirará la imagen y listo yo tengo ha cambiado la forma de calcular el blanco y negro ha cambiado la forma de antes si te fijas era un poco injusta en el sentido de que lo que estaba haciendo era obviar la información de verde y de azul y quedarse solo con la información de rojo y esta forma computacionalmente es más pesada porque tiene que hacer una suma una división y luego un redondeo pero es más justa en el sentido de que está teniendo en cuenta los tres canales de color vale tu llegado a este punto tienes algo que decirme algo como diosas trabajando demasiado cuéntame hay veces que hay alumnos que cuando explicó esto tienen algún conocimiento previo de pil o se imaginan lo que puede hacer ping o mientras yo estoy dando clase por eso nos empezar un poco a vichear la librería pues hay algún alumno que alguna vez me dice me dice payton pil example por ejemplo porque digamos aquí o aquí a ver pil es una librería genial pero tiene una variedad de cosas y mira entonces para empezar tiene directamente modos de fusión tiene por ejemplo métodos con los cuales podemos get pixel que data podemos escribir podemos hacer lo que queramos en cuanto a channel operations fíjate que pone a dar con módulos blend composite constant archer esto es como cuando vamos a photoshop y creamos una capa nueva y decimos cuál es el método de fusión de la capa quiero decir que son operaciones que están muy chulas por qué pues porque me ahorran a mí tener que calcular todo eso manualmente y además tengo filters para tengo filtros tengo filtros como por ejemplo desenfoque gaussianos y luego por ejemplo lo que quiero decirte es que cosas como las que acabo de hacer que es la imagen e invertir la y la imagen y pasar la escala de grises hay filtros ya predeterminados que lo hacen es decir yo podría usar un filtro que es grace es ‘kale y me hubiera ahorrado todo esto y yo podría utilizar un filtro que es imbert y me hubiera ahorrado todo eso pero no me lo quiero ahorrar porque dirías que no me lo quiero ahorrar pues por qué por por verás verás exacto claro más que más que más didáctico lo que quiero demostrar con esta librería el momento que voy a pegarles la persiana lo que quiero demostrar es control evidentemente el monitor secundario más a ver un segundo que hoy tengo el monitor secundario sensible con un segundo vale entonces verás en primer lugar lo que te quiero decir es que no te quiero ocultar que todo esto que acabamos de hacer se podría haber hecho con una función predeterminada pero mi función recuerda que estamos aprendiendo este ejercicio concreto para luego poder utilizarlo con técnicas de machine learning y con técnicas de deep learning para reconocer objetos dentro de la imagen en res caro si yo por ejemplo quisiera invertir la imagen yo no haría esto yo lo que haría es utilizar directamente la función de la librería pero yo hago esto para demostrarte que yo tengo la capacidad de poder leer y poder escribir cada pixel de una imagen y si puedo hacer eso puedo hacer lo que me dé la gana con la imagen es decir es que el que iba a decir algo claro eso es a lo que me refiero exacto exacto verás uno de los ejercicios que tengo previsto para este curso ya te digo no hoy porque quiero ver unas cuantas cosas más antes pero a lo largo de estos días es un ejercicio específicamente de fischer detection entonces si lo miras él me insta gram en instagram o en mi facebook o donde sea vamos a ver para fastidiar no pero aquí es este tipo de ejercicios donde el programa lo que hace es buscar los píxeles amarillo azul verde lo que sea en base a ficheros horizontales verticales diagonales y tal vale entonces ahí la idea es la siguiente hay la idea vale un segundo compton pam pam pam

pero bueno pues como te decía por una parte un objetivo de la sesión de hoy era este para en próximos días poder utilizar bueno promo tías o a ver cómo rinde la sesión de hoy pueden utilizar esto para realizar ejercicios de búsqueda de patrones en imágenes o demás in learning sobre imágenes donde evidentemente para hacer más in learning primero tenemos que tener el control sobre la imagen de esta forma hace unas cuantas sesiones hablamos un poco acerca de los tensores entonces qué es algo que tenemos también pendiente de ver pero precisamente por estas cosas los tensores y todo ese tipo de cosas no son más que estructuras de alto nivel que me parecen muy bien pero antes de trabajar en alto nivel y no comprender realmente lo que está ocurriendo por bajo lo que quiero es asegurarme que tengo un control al al nivel más bajo posible de la información vale para luego eventualmente pues realizar abstracciones y simplificaciones pero sabiendo que si algún día en algún proyecto necesito bajar voy a poder hacerlo pues de la misma forma que tenemos esto también quiero hablar de otra librería va a venir muy bien y que no sé si la conoce este hecho que es la librería matt plot live no sé si has trabajado alguna vez con ella no vale pues vamos a ver vamos allá vamos allá vamos a ver y bueno la librería mat clot live depende esa persona requiere instalación con lo cual tiene que instalarse por lo cual ejecutamos pit3 un install y instalamos la librería con normalidad y en este caso ya la tengo instalada así que a continuación voy a realizar un ejercicio vamos a ver voy a guardar [Música] a 57 gráfica 1 y vamos allá vamos a ver voy a decir importó matt pelot live punto pipe lotto como para no tener que escribir esto cada vez vale como en este caso pues pellet o lo que sea a partir de aquí voy a un ejercicio de la documentación oficial es decir estoy ahora mismo la página matt pelot lip punto o hereje donde estoy en la galería de gráficas que puedo obtener eso eso ahí vamos precisamente entonces el objetivo del otro día evidentemente era tener control sobre poder dibujar nuestras propias gráficas pero por un tema de productividad evidentemente siempre vamos a intentar utilizar alguna librería que nos dé mayor facilidad en este caso lo que estoy haciendo es trabajar con este ejercicio lo que hago es que copio este código ahora lo comentamos lo pegó sólo ejecutó y aparece esto aparece esto de aquí entonces esta librería lo que hace es que genera estos gráficos escalan vectorial mente de una forma bastante buena si nos fijamos en este caso puedo hacer así puedo mover los gráficos dentro de la escala puedo hacer zoom a los gráficos con una con square puedo echar hacia atrás o puedo volver a casa puedo hacer clic en este en este botón de configurar para configurar por ejemplo los márgenes izquierdo inferior derecho superior y todo eso esto no porque es para cuando meto varias gráficas en un mismo esquema o bueno pudo reiniciar dejarlo todo como estaba al principio y sobre todo lo más importante de esto es que me lo puedo guardar en formato por ejemplo png digamos lo tengo yo así para tocarlo y hoy se lo quiero enviar algún cliente pues lo guardó en pereje y se lo envió en un correo electrónico y ya está entonces esta librería o librerías de este tipo me parecen interesantes desde el punto de vista en el que con una con una sencillez bastante elevada me permiten realizar me permiten dibujar gráficas antes de ello antes de ello no mentir un momentín momento porque porque quiero realizar otro ejercicio más sencillo todavía esto es 58 gráfica 2 y quiero decir lo siguiente importa mat clot punto para el plot pd te explota o has plotear o as dibujar es decir dibujar yo le digo dibujar punto plot 1 537 por ejemplo y digo dibujar punto y label es mi colección de números y por último dibujar punto show guardo ejecutó él pipe lot 5 vale y sale esto quizás la gráfica correspondiente a 1 537 y esta gráfica la puedo mover y esa gráfica la puedo fumar y puedo volver y la puedo guardar y en definitiva todos estos ejercicios de la documentación oficial tienen un montón de líneas que vienen muy bien evidentemente para hacer una serie de cosas y para poner pues los el horizontal y el vertical y todo eso pero la gracia de esta librería de la misma forma que te lo decía el otro día con respecto al lenguaje de programación r es que payton no viene con una librería pre incorporada pero si cogemos python y le metemos esta librería fíjate cómo generar gráficas puede ser lo más sencillo del mundo para permitirnos trabajar con programas que nos permitan visualizar datos de la forma más sencilla posible dicho esto dicho esto evidentemente en la galería hay un montón más de gráficas que podemos utilizar tampoco me voy a parar ahora demasiado sobre ellas porque evidentemente pues es copia de pegar código vale estas estas estas esta por ejemplo para para big data vienen muy bien para un momento dado saber cuál es la densidad en cada uno de los ejes de hecho está para el reconocimiento de imágenes con técnicas más sencillas de los que puede parecer un primer momento a veces viene bastante bien entonces bueno como ya te digo no me voy a parar demasiado ejemplo el ejemplo porque como veis son ejemplos de copiar y pegar o sea que para eso tampoco hace falta que estemos ahí dale que te pego entonces lo que sí que voy a hacer ahora a continuación es conectar estas gráficas con otras cosas que vamos a hacer a continuación simplemente lo que estoy haciendo es copiar y pegar un ejemplo uno de los que me interesan especialmente de qué forma tan sencilla pues podemos visualizar la información y podemos hacer así y podemos en definitiva vale obtener visualizaciones de datos muy buenas hay una también te digo que siempre me ha faltado muchísimo que es la la librería por mapas por mapa geográfico quizá quieras que no sobre todo para operaciones de big data relacionadas con geografía pues vienen muy bien yo para eso suelo utilizar la librería no sé si la conoces de google charts pero la librería de google charts es para javascript no es para python o al menos hasta donde yo sé no tiene no tiene un para esto entonces me voy a galería y fíjate que ahora verás al volver a desaparecer pues hay un montón de tipos de gráfica pero claro tenemos la gráfica geo chart que mola mogollón hay que registrarse en la api de google que es gratuito en la api de google maps pero claro está esta librería dicen lo típico de esa cámara gráfica de los clientes de la empresa de dónde vienen o a cuántas distancias están de la empresa para hacer buzoneo para visitas de comerciales para todo eso o para simplemente analizar por dónde hacer una campaña de marketing pues esta librería de geo chart viene bastante bien y ésta es sobre todo la que he hecho en falta o al menos nunca la he encontrado dentro de dentro de esta librería de mar pero bueno se puede que esa sí que la tiene por ejemplo lenguaje de programación r la de la de geografía vale bien fíjate que incluso tenemos hasta gráficas 3d y te lo digo es la idea de la de la complejidad que lleva por dentro la generación de una gráfica 3d y por tanto en la cantidad de complejidad que nos está ahorrando esta librería al eco lo cual es de 5 y fíjate que ahí tenemos esto bien dicho esto dicho ésto

dicho esto a continuación como te decía yo no quiero hacer gráficas a partir de conjuntos inventados de datos sino que lo que quiero es realizar gráficas a partir de conjuntos definidos y conocidos de datos para ello yo te voy a hacer una pregunta muy genérica y es cuál es el problema principal que existe en los primeros pasos de un proyecto de big data pregunta genérica pues hay muchos problemas que resolver pero hay uno muy común cual cual verás vamos a ver dime algo acerca de las nubes del big data algo de las uvas de mirada las cinco urbes del hígado no lo soy todo una vez no pasa nada mira las cinco webs del big data son una chorrada que lo sepas y de hecho alguna vez cuando he comentado esto de las cinco webs el big data algún alumno que ya está trabajando en el tema de diciembre realmente no son cinco si quieres son muchas más y fiscales es cierto pueden ser muchas más pero la idea es poder resumir un concepto complejo en una serie de claves sencillas entonces las cinco v es del big data y no esto no estos anuncios las cinco ves del big data y verás un momento vamos a ver tenemos la variedad esa es es uno de los problemas tenemos la veracidad tenemos el valor de la información no tenemos el volumen de los datos y tenemos la velocidad de acceso e insisto es simplemente para cuando empezamos un proyecto de big data para saber por dónde podemos empezar evidentemente el volumen es de lo que deriva la palabra big the big data cuando gracias a moss un reto de big data es porque tenemos una cantidad de datos demasiado grande para que un ser humano la pueda procesar de una forma eficiente también hablamos de un problema de velocidad cuando hacemos un proyecto de big data lo primero que tenemos que hacer es analizar cuánto tiempo va a tardar o bien un sistema humano o bien un sistema informático en procesar esa información porque si yo quiero procesar una información en un sistema por ejemplo programado en dayton y el sistema me dice fantástico voy a tardar tres años en procesar esta información pues tú igual me dices a ver tres años no puede ser valiosa hay datos que no te digo que no pero igual tú me dices mira yo siempre suelo poner el mismo ejemplo y es que tú imagínate que tienes que programar un sistema para que calculé la trayectoria de un misil siento ser tan belicista vale pero para que que algún en la trayectoria de un misil e impacte justo donde te interesa en tu enemigo tú imagínate que te pones a calcular la trayectoria dentro de tres años habría calculado la trayectoria pues tú igual dices una dentro de tres años igual acabó la guerra con lo cual no me vale que me lo hagas en tres años quiero decir hay veces en las que la velocidad es un problema cuando la velocidad es un problema muchas veces una forma de resolver el problema es analizar el valor de la información es decir toda la información que hay dentro de ese sistema de vida está vale realmente o hay trozos de información que podemos obviar y por tanto podemos hacer que el sistema vaya más rápido y luego por ejemplo ya esta mañana estaba teniendo una conversación en una empresa que además es un centro de formación de trabajo durante el año por las mañanas que era con respecto a la velocidad a la veracidad de la información y entonces estábamos hablando de una base de datos en este caso de alumnos y estábamos hablando de quién podía cambiar la información de esa base de datos pues yo estaba diciendo esa reunión mira el padre del alumno viene a principio de curso y da su correo electrónico y un alumno a mitad de curso un alumno que es flojete por decirte una palabra suave viene y llega y te dice oye que es que quiero cambiar el correo de mi padre tú qué dirías que está pasando ahí pues que es muy sencillo si el alumno es flojete y quiere cambiar el correo de su padre evidentemente lo que quiere hacer es evitar que el centro se ponga en contacto con su padre para decirle tu hijo está rindiendo mal es decir pones cara de no se me había ocurrido esa treta vale entonces lo que hace el alumno es dar un correo falso para impedir que su padre reciba las notificaciones de a ver qué hacemos con tu hijo porque va mal vale entonces ahí tenemos un problema de veracidad de la información te estoy hablando de un problema mediante el cual creo que tu imagen se ha quedado congelada no sé si tú me oyes a ver igual me quedo yo congelado no es que su imagen se quedó congelada pero bueno mientras tú me veas y me digáis tal entonces la velocidad se puede ver comprometida porque alguien la pervierte la velocidad se puede ver comprometida porque haya personas que por accidente meter la información incorrectamente o sea que no siempre es por mala voluntad pero hay veces que tenemos un problema y es que la información con la que trabajamos no es veraz no es correcta como te decía como te decía uno de los grandes problemas del big data es la variedad hablamos de variedad cuando en web les déjame que borre las demás hablamos de variedad cuando en un caso ideal cuando arrancas un proyecto de big data llegan y te dicen mira todos los datos están en esta base de datos de tipo de sql y tú dirías fantástico sabes porque no tengo un problema de variedad de datos porque desde los datos están estandarizados pero el problema es cuando hay veces que te dicen mira tenemos cosas en sql tenemos cosas en word tenemos cosas en excel tenemos cosas atención un clásico en facturas en papel no digas hostias porque es que ya te digo que es lo más normal del mundo facturas en papel o documentos en papel en definitiva este es un caso muy malo porque requiere hacer uno cr1 cr ya sabes que es cuando escanea es un documento y le pasa es un software para reconocer los caracteres que hay dentro de ese documento pero hay otros casos no tan desfavorables como documento en papel que es documento en pdf porque claro el pdf es un documento electrónico pero no es un documento estructurado como por ejemplo un documento de excel que al convertir un documento de extra de sql pues bueno pues vale pues dentro de lo malo no es tan malo pero convertir un pdf a un archivo sql puede costar bastante más vale entonces no hago por ejemplo hay ml hoy es que mira es que queremos que cojas 10 años de nuestra correspondencia con clientes en formato ml en el formato de intercambio del correo electrónico y que lo metas en una base de datos sql o que lo metas en un excel quiero decir yo lo que estoy haciendo es asumir y a veces esa función es incorrecta pero asumir que el formato nativo de un proyecto sería sql y todo lo demás se tiene que convertir a sql y no tiene por qué ser así igual en un momento dado en un proyecto se decide que el formato maestro es el formato excel y todo lo demás se tiene que convertir a excel y no pasa nada lo que sí que es un problema es que al principio del proyecto hay una variedad y lo que hay que hacer en primer lugar es todos los tipos de documentos y convertirlos a un solo tipo de documento cualquier proyecto de big data empieza con la resolución de esta dificultad y luego a partir de ahí nos vamos enfrentando a otros tipos de dificultad ojo en en las otras webs valor velocidad el volumen y la quinta era no me acuerdo se memoria [Música] mera ciudad mira ciudad es igual yo empiezo a analizar y por velocidad y por volumen igual me interesa más excel o igual me interesa más trabajar directamente todo en pdf vale yo que sé o igualmente es una combinación de pdf y sql quiero decirte que al final da igual cuál sea el formato vale entonces por eso lo que te decía es que cualquier proyecto empieza con esta esta dificultad donde esta dificultad no es poca por ejemplo si yo quiero convertir documentos pdf y los quiero transformar en filas y columnas de excel o en filas y columnas de sql como lo voy a hacer pues lo voy a hacer con python cuando digo que lo voy a hacer con python quiero decir que me vengo aquí y digo python pdf libraré y busco y busco librerías en github o donde sea y busco librerías de tratamiento de archivos pdf o si busco python excel yo creo que tú ya tenías localizada una librería para trabajar con excel valen 3 exacto lo que te quiero decir es que cuando te estoy diciendo el problema te estoy diciendo problema con solución donde evidentemente la solución consiste tal y como tú mismo hiciste con lo de excel en empezar a utilizar librerías para ser capaces o en tiempo real o en modo batch de convertir formatos de uno a otro dicho esto a continuación lo que voy a hacer es trabajar con sql dentro de payton vamos a trabajar hoy con mysql próximo día trabajaremos con un postre sql y verás que lo que hicimos anteriormente con respecto a ese culito es realmente muy parecido en desde aquí a continuación lo que voy a hacer es lo siguiente voy a decir mysql python un conector entonces python mysql no instale de atacama y me voy a dar cuenta de que existen vamos a ver de que existen diferentes conectores vamos a este así que a continuación vamos a ver un momentín según dyn con segundo no este no quiero payton mysql punto conector [Música] creo que sí creo que se cree momento porque hay tres conectores si quiero el correcto vale esto es vale vamos a prestar entonces a continuación voy a hacer copia de este comando voy a abrir un terminal voy a pegar pib en este caso ahora que ya lo tengo correctamente instalado y configurado voy a llamar a peep 3 para python 3 así que hago así me descargo y configuró el conector realmente contengo configuró es que lo configura automáticamente el sistema y a partir de ahí lo que puedo hacer es conectarme a un gestor un perdón un servidor de bases de datos que esté previamente instalado en el sistema yo en este caso lo que he hecho vamos a aclarar este concepto porque trabajar con bases de datos como mysql pondré sql es un pelín más complejo pero también más potente como hablábamos el otro día que trabajar con ese call it y déjame que cierre esto déjame que cierre el terminal vale entonces yo ahora mismo de hecho si cierro python y lo vuelvo a abrir si cierro python y lo vuelvo a abrir del 38 vale y ahora mismo tengo python que tiene la librería de mysql y correctamente importada es más vamos a demostrarlo entonces escritorio curso de payton y esto es mysql 1 es lo que voy a hacer es importa mysql con héctor así que guardo f5 y no me da error porque con la operación de instalación que acabo de hacer ya tengo el conector ahora bien yo vengo aquí vengo a mi base voy a llevarlo mi bebé o mi bebé sea dvd that habéis bebé de base de datos sobre lo que quieras entonces yo lo vengo aquí y digo mysql junto con héctor y sabes qué voy a decir as my y así sabes mal punto conecta y digo host es igual a localhost coma y usher es igual a jose vicente coma y password es igual a bien hola y ahora digo print mi bebé o mi bebé qué dirías qué va a ocurrir a continuación qué dirías que va a ocurrir esto te digo ya no verás ese no es el problema realmente evidentemente faltan más datos de la conexión por supuesto que sí pero este código va a dar un error de conexión o un error de ejecución no un error de payton pero si ejecuta este código lo que me va a decir es esto da un error y el error dice conexión regius ya no es un error de aunque por aquí aparezca de argumentos y toda la pesca pero no es un error de sintaxis de porque fíjate que de hecho vuelvo y no hay un cursor rojo es un error de tu me has dicho que te ibas a conectar a una base de datos a un host a un huésped que es localhost localhost es una palabra reservada para decir yo mismo es decir donde aquí pondría la ip de un ordenador al que me conectaría localhost es decir el servidor de base de datos está en este mismo ordenador pero ahora mismo ese servidor no está arrancado con lo cual lo que hace python es dar un error bastante feo de color rojo vale entonces dicho esto dicho esto permíteme hacer un pequeño inciso y hablarte un poco sobre una estructura de control de la cual no hemos hablado hasta el momento que es la estructura de control lo que en otros lenguajes de programa se llama try cats que aquí en python se llama try excepto voy a hacer un nuevo archivo voy a guardarlo voy a llamar los 62 trae excepto y voy a decir lo siguiente trae y ahora pongo print x ahora aquí voy a decir excepto excepto dos puntos print ha ocurrido algún error si yo era ejecutó este código lo que ocurre es que ha ocurrido algún error fíjate que ha ocurrido algún error pero el código es azul porque si yo intento ejecutar este código el sistema evidentemente me dirá cómo quieres imprimirla x si la equis no está definida date cuenta de la gran diferencia de tener una impresión de color rojo en la pantalla a tener una impresión del color a fondo en la pantalla y te aseguro que la diferencia no es estética cuál dirías que es la diferencia no esa no es la diferencia de hecho esa diferencia iría a favor de realmente cometer errores porque el error aunque también te digo que en el excel se puede forzar para que me diga el tipo de excel pero no la diferencia no es esa la diferencia es que si hay un error da igual el código que haya a continuación porque un mensaje de color rojo suele parar la ejecución del programa mientras que si yo intento hacer algo capturó el error y lo sacó por pantalla evidentemente hay un error pero no es un error de color rojo que para la ejecución sino que el programa puede continuar funcionando vale entonces esto es algo que no sé si has oído alguna vez te lo voy a poner en google simplemente porque cuando le digo a la gente este concepto me mira especialmente en las clases presenciales como si estuviera loco y cosa como si me hubiera inventado el concepto y lo pongo en google para que veas que es un concepto que existe que es la programación defensiva no sé si alguna vez habías oído hablar de este tipo de programación pues no pasa nada porque mucha gente tampoco entonces un momento voy a encender me la luz de la lamparita vale vamos a ver te cuento no sé si conoces el libro de kernighan y richi de programación en fe no se conoce en este libro es este libro de aquí por la portada pues es un libro escrito en 1978 escrito por dennis ritchie que es el creador del lenguaje efe entonces es un libro de referencia para cualquier programador porque claro imagínate el valor que tiene que el creador del lenguaje ce escriba un libro sobre cómo programar el lenguaje efe es como que cualquier persona que programan se tiene que tener este libro porque es lo que dice el autor que por cierto está muerto que tienes que hacer ballet es este libro de vez en cuando es muy criticado porque tiene ejemplos de código que a día de hoy se consideran inseguros entonces claro hay que tener en cuenta que este libro se escribió en 1978 cuando la informática era muy diferente de lo que es hoy es decir en 1938 no habían mil tipos diferentes de ordenadores no habían mil tipos diferentes de procesadores de tarjeta gráfica y 1000 tipos de ram y 1000 tipos de placa base y 1000 tipos de lo que sea tres o cuatro ordenadores tres o cuatro modelos de ordenadores quiero decir y para de contar con lo cual tú podías hacer un código y sabías que si se ejecutaba en unos ejecutaba en todos pero a día de hoy evidentemente eso no es así la programación defensiva es una forma de diseño de programación es una forma de diseño de software que básicamente lo que hace es es mucho más que esto que te voy a decir vale pero te digo porque si te ves el índice verás que hay diferentes técnicas de programación defensiva y este artículo de la wikipedia no tiene todas las técnicas de programación defensiva pero para reducirlo mucho al absurdo te diré que una técnica de programación defensiva es meter try excel o try catch en otros lenguajes de programación por todas partes lo que básicamente quiere decir no asumir que todo funciona sino asumir que todo va a fallar y si funciona bien y si no haber preparado a tu programa para que sepa cómo actuar en el caso de que funcione tanto es así que te voy a decir una cosa para que la compruebe es cuando tengas un rato para que compruebes que es cierto que por ejemplo en java no se puede hacer una conexión a una base de datos mysql si no es dentro de un bloque try catch o sea no se puede quiero decir está prohibido el código está prohibido quiero decir que lo intentas hacer y el compilador de error hasta que no lo metas en un try catch no va a hacer la conexión con la base de datos vale entonces por ejemplo muy bien ya que es pero por qué pues porque la lectura y la escritura en archivos da muchas veces problemas problema de que el archivo no existe problema de que existe pero no tienes permisos de escritura problema de que existe pero hay otro archivo que lo está utilizando nuestro programa y vamos utilizando en este momento entonces efectivamente todo aquello que tiene que ver con acceso a recursos por ejemplo nunca declararía es una matriz en un try cut porque generalmente diferentes no matriz eso tiene que funcionar sido sí pero todo aquello que es conectarse a un servidor remoto a un servidor de base de datos escribir en un archivo todo eso suele ser candidato efectivamente a un try catch oa un try excepto entonces dicho lo cual a continuación yo lo que voy a hacer es este ejercicio y decirme novedad de hacer una copia esto que te voy a decir no es obligatorio pero sí que te lo recomiendo qué es mysql 2 es simplemente lo que voy a decir extra y no sabes que realmente trae lo lanzó todo y excepto print ha ocurrido un error conectándome a la base de datos guardo f5 y ya está y fíjate que limpio vale fíjate que en lugar del pedazo de error este que tenía aquí que casi me caigo encima de ese error o simplemente dice ya está ocurrido un error la base de datos sobre ocupe solucionar el error y allá está y como ya te digo poniendo parámetros en el excel no lo haremos hoy probaremos otro día se puede se puede introducir digamos mensajes más más estables mensajes más personalizados que nos den un poquito más información acerca de qué es lo que está ocurriendo y digo que no me quiero ir al 90 espera tengo por aquí a fernando entonces como te decía danny el error nos lo da porque mediante esta promesa yo lo que he hecho es esperar que en este ordenador haya una base de datos un servidor de bases de datos conectado que responda a localhost que tenga un usuario jose vicente y que tenga un password jose vicente díaz luego elegiremos una base de datos lo que tú quieras por de momento desconectarme un servidor con una serie de credenciales montar un servidor mysql lleva un rato entonces yo lo que suele hacer es recomendar si estás en windows o estás en linux bueno realmente no estás en windows es utilizar el samp que encuentras aquí en apache friends punto o hereje más que nada porque el samp es un entorno que lleva trigo que lleva apache lleva mariadb lleva php y lleva perla entonces es un entorno como ahora verás que está ya pre construido si estás en linux recomiendo instalarlo mediante línea de comando porque con cinco líneas de comando te instalas un servidor de camps o del amp realmente si estás en mar te recomiendo usar un software que tengo aquí que es el mar el mar es como el samp pero para marc vallée entonces me vengo aquí veo que hay un elefantito de color gris es el mar que es básicamente como el samp vale entonces entonces hago doble clic al mar cierro esto arrancó los servidores y fíjate que con un solo botón con un solo botón he arrancado esto como para ahora en tools ir a php my admin y php my admin es el gestor de bases de datos vale entonces vamos a ver como verás tengo hay una serie de bases de datos ahora hablamos de ellas pero lo que quiero que veas es que actualmente yo ya tengo un servidor conectado y en funcionamiento sin embargo me va a seguir dando un error vamos allá voy a ejecutar esto voy a pulsar f5 y me sigue diciendo ha ocurrido un error conectándome a la base de datos déjame quitar el try excepto porque ahora sí me interesa ver ahora sí me interesa ver información del error f5 ahora verás porque me interesa ver la información del error vale y en este caso me dice lo siguiente me dice me he intentado conectar al puerto sqlserver en localhost dos puntos 3 3 0 6 es decir cuando yo en mysql no sólo en python sino en cualquier otro lenguaje de programación no especificó un puerto cualquier conector de base de datos asume que el puerto de mysql es 330 6 porque es el puerto por defecto sin embargo que está ocurriendo pues que si os fijáis aquí arriba el php my admin déjame que lo haga más grande porque igual no lo veis el ph admin me dice que está escuchando en el puerto 8 889 entonces tengo dos alternativas o bien a payton le digo que se conecte por el puerto 8 889 o bien al servidor le digo que se conecte por el puerto 33 06 vale cualquiera de las opciones pero tiene que haber una coincidencia en los puertos así que ahora vengo por aquí y le digo localhost 8 889 localhost 2 puntos esto es una sintaxis que es común a cualquier lenguaje de programación pulso f 5 y si todo ha ido bien ahora verlo vale y si todo ha ido bien a guau vale localhost 8 893 306 no me lo ha pillado un momento port es igual a 8 889 5 vamos a verlo bien y vamos a ver vale muy bien ahora sigamos viendo qué es lo que nos dice el error y lo que nos dice el error es que ok me he conectado ahora a acceso denegado para el usuario jose vicente el local host fijaos que esto es un aunque parezca que no es un mini triunfo porque que me diga acceso denegado quiere decir que me he podido conectar a un servidor he intentado poner un usuario y una contraseña me ha delegado vale entonces a continuación voy a crear una nueva base de datos la voy a llamar curso python le voy a dar a crear me la voy a dejar vacía ahora hablaremos de ella y en privilegios voy a crear un you ser account el you ser name es jose vicente el host es localhost el password es jose vicente el password es jose vicente y le digo que le quiero dar todos los privilegios a la base de datos curso python le digo go está ok ok ok ok vale y ya go vale y ya está [Música] porque el pan vamos a repasar tengo un curso python me voy a privilegios compruebo que hay un usuario llamado jose vicente vuelvo a ejecutar el código si todo va bien ahora me dice que correctamente me he conectado a esa base de datos vale por tanto esto es una de las cosas más puñeteras no ya que tiene python sino que tiene cualquier lenguaje de programación y es que con respecto a la conexión a una base de datos o lo haces como no pide la base de datos o no te vas a poder conectar de la misma forma me graba el siguiente vídeo de la misma forma quiero deciros lo siguiente cuál es una diferencia clave la conexión de mysql con respecto a cómo nos conectamos anteriormente con ese culito pues una diferencia clave es que yo he tenido que poner un usuario y una contraseña podríamos pensar que es una es un estorbo tener que poner un usuario una contraseña porque hasta que no he creado ese usuario y la contraseña no me ha permitido conectarme pero por otra parte coincidiréis conmigo que si la seguridad es un factor clave en una aplicación en ese caso mysql que te pide usuario y contraseña te exige más bien más que te pide es una mejor elección que ese kulite que no te exige usuario y contraseña y luego además mysql tiene un puerto y eso quieras que no también incide en la seguridad una antes os he dicho que el puerto por defecto de una base de datos en mysql es el 33 06 así que cuando instales una base de datos en un entorno de producción que dirías que es lo primero que vas a hacer con el puerto qué diríais y lo vas a cambiar vas a usar cualquier otro puerto menos el 33 06 y tú dirás si el 33 06 es el estándar porque me estás diciendo que use cualquiera menos el 33 06 pues porque cualquier hacker que te quiera atacar tu servidor y te quiera atacar a tu base de datos lo primero que va a hacer es probar el puerto 330 6 entonces yo os digo una cosa os hago este comentario y a la vez os digo que no me preguntéis mucho más de cómo funciona la mente de un hacker porque yo no soy hacker ni quiero serlo tampoco es decir nunca he entendido que que que motiva o que mueve a un hacker y lo que sé de proteger aplicaciones no lo sé porque me gusta y dejar creando aplicaciones sino porque he tenido que ir aprendiendo cosas para que no me jaque en mis aplicaciones para el vivo porque tampoco sabéis que yo no lanzar en ningún curso de experto en seguridad porque no me dedico a ello porque me da mucha rabia y me da mucha rabia lo que quiero decir es que yo quiero dedicar mi tiempo a hacer cosas no a evitar que los demás mejoran las cosas que yo he hecho vale pero mentalmente dijo que evidentemente hay personas que tienen esta especialidad que se dedican a la seguridad informática porque les gusta y se dedican precisamente a enseñar a cómo proteger aplicaciones fantástico pero no es mi perfil bueno una vez que tengo esto a continuación dentro del curso python voy a crear una tabla entonces voy a crear la típica tabla de personas personas con cuatro columnas vengo por aquí y digo el primero esto es igual que lo que os dije en sqlite el primer campo es identificador es un campo que va a ser una clave primaria y auto incremental esto es lo que os dije la otra vez de que cada campo en una base de datos tipos securities de tipo sql ya sea mysql por sql oracle sqlite la que sea debería tener un campo identificador que es una clave primaria auto incremental luego tenemos un nombre un teléfono y tenemos un email el nombre es un campo marchar ves que en mysql hay más tipos de datos que la sécurité evidentemente 25 52 55 255 no sé si sabéis lo pregunto y si no os lo explico yo sabéis que es este valor de 255 pregunto este valor 255 es la longitud del campo en este caso lo que quiere decir es que el campo nombre admite hasta 255 caracteres eso o que el campo identificador admite hasta 255 caracteres que me diréis de la elección que he hecho y me dan cuenta que os parece que haya puestos 255 demasiado efectivamente e identificadores 255 quiere decir yo podría tener hasta 999 999 99 99 y 259 9 255 nueves de registros imagínate el número que es eso imagínate la barbaridad que es eso entonces yo realmente en una aplicación por ejemplo de estas como agenda voy a tener 255 caracteres no si con que tengas 6 atracciones los fíjate lo que he bajado con que tengas 6 puedo tener hasta un 2 3 1 2 3 es decir con seis caracteres puedo tener un millón de elementos en la agenda imagínate con 255 caracteres tengo esa mala manía tengo la mala manía de poner a 255 caracteres en que me puede perjudicar ese mal hábito lo que me puede perjudicar es en que estoy reservando más memoria de la que debo estoy preparando una base de datos para que use más memoria de la que bebe y eso puede hacer insisto a la larga que la aplicación vaya lenta también os digo que eventualmente en un momento dado después de haber diseñado una base de datos si me doy cuenta de que es números demasiado se puede rebajar pero no es deseable no es deseable porque reestructurar una base de datos a mitad de trabajo es peligroso vale puede dar problemas y evidentemente tal y como comentábamos otro día en primer lugar copia de seguridad vale antes de tocar la estructura de una base de datos bien voy a insertar en ciertos registros nombre juan teléfono un teléfono y juan donde yo juan correo puntocom vale inserto jaime el teléfono y jaime a correo puntocom y por último tenemos a javier teléfono y cuidado con este teléfono que no pasa nada y javier a correo puntocom bien tenemos una base de datos que tiene ahora mismo tres personas así que yo lo que quiero hacer evidentemente es en este caso trabajar con una recuperación de los datos vale quiero ser capaz de recuperar datos para ello vamos a para ello voy a guardar una copia de este ejercicio versión 64 mysql 3 y a continuación voy a hacer lo siguiente print mi bebé bueno lo voy a dejar no hace falta de salud y digo mi cursor es igual a y base de datos punto cursor o lo mismo que hicimos anteriormente con ese culito y ahora digo mi cursor punto exigió quiero ejecutar el comando que es select froome era personas personas llegados a este punto personajes no personas os digo lo mismo exactamente que os dije con ese culito y que os diré con postre sql y es que en esta línea de código estamos mezclando dos lenguajes de programación esto de aquí es el lenguaje python mientras que estoy aquí es el lenguaje sql más concretamente en este caso es el lenguaje mysql ahora digo mi resultado es igual a mi cursor punto y fecha y sin punto y coma vale con lo cual ahora de momento digo quiero print mis resultados una de las cosas que más me gustan de payton y es que puede escoger una lista un diccionario una tabla un lo que te dé la gana y puedes volcar la lo que en informática se llaman vomitarla delante de la pantalla por lo menos para ver qué hay dentro pulso f 5 y qué pasa vale selecto no en personas vamos a ver payton 38 no data vice electo un momento un momento porque aquí arriba me dice password jose vicente y tengo que decirle data veis es igual como se llama la base de datos la base de datos del curso python como un sopetón ahora sí efe 5 y me dice me vomita he hecho como veis aquí pues el contenido de esa petición de de la base de datos evidentemente si tengo esa petición de la base de datos vamos a ver a continuación lo que voy a hacer es que en lugar de vomitar la directamente voy a recorrerla y digo for y tirador in mi resultado y voy a decir print y tirador en este caso lo que va a hacer voy a hacer una cosa print tengo un resultado que es para que comprobéis que está yendo línea a línea f 5 déjame que lo mate a ver comment y comen y así vamos directamente al grano pero no quiero borrar nada f5 tengo un resultado que está parís tengo un reto que está patas tengo un reto lo que estaba place y luego por ejemplo digo quiero y de uno o sea quiero ver sólo el nombre pues pulso f5 y veo cómo puedo devolver el nombre el teléfono el correo electrónico en lo que sea en este caso a continuación lo que voy a hacer es realizar un par de ejemplos más para que veáis que si tengo esto lo tengo todo y yo ahora sí que lo que haría es igual meter esto en un try excepto entonces try ha ocurrido algún error en la base de datos ahora que sé que funciona es la vía f 5 y así me lo saca y si por lo que sea cambio un dato jose vicente 2 no existe pulso f 5 y me dice ha ocurrido algún error en la base de datos y la gestión de errores de esta forma queda un poquito más limpia digamos desde el punto de vista de que no para la ejecución bien pues dicho esto a continuación voy a hacer algún ejemplo y tomás donde pues bueno voy a vamos a ver voy a insertar voy a insertar en la base de datos esto lo voy a llamar python 65 mysql 4 y bueno lo que voy a hacer básicamente es atención machacar esto porque nos acordamos que sólo necesitaba una devolución la operación de select las otras tres operaciones del crudo es decir create read update y the lead no requieren una devolución entonces yo digo insert quinto personas values ya sabéis que pongo comas para decir que hay cuatro valores no es el primero no es para decir yo no te digo identificador porque ya tú sabes el que debes poner y ahora digo a ver tengo tengo a juan jaime javier pues josé quiero meter a jose que tiene el número de teléfono 1 2 3 4 5 y que tiene el correo jose a correo puntocom ejecutó este código no tiene por qué dar no tiene por qué dar error al igual que hicimos en ese culito es recomendable que hagamos un comité es decir voy a pulsar f5 me dice que ok me voy a la base de datos y refresco y veo que no está el nuevo nombre con lo cual es bueno en este caso que haga mi bebé punto y coma perdonadme porque siempre pongo punto y coma es que por las mañanas solo están trabajando en php con lo cual vale pues pulso f5 ok ahora recargo browse y ahora si tengo el identificador 5 qué raro que le haya puesto el 5 por que el 5 es como que antes he creado el 4 y me lo dé cargado no sé por qué ha puesto el 5 pero bueno vuelvo a ejecutar el código vuelvo a pulsar sobre browser y el 6 no sé qué ha pasado con el 4 pero en algún momento se ha saltado el 4 el que cuando el 4 generalmente es porque he creado el 4 he eliminado el 4 y mantiene ese registro 4 sin utilizar a menos que lo fuerce pero bueno lo que sea de la misma forma pues para que veáis no voy a hacer el del itd porque ya lo hicimos en su momento pero es exactamente igual de la misma forma voy a hacer python 66 mysql 5 y voy a decir en este caso update personas set teléfono es igual a 98 espera con comillas 9 8 7 6 5 4 y ya está y podría ponerle where si no le pongo where si no le pongo ninguna condición lo que va a hacer es actualizar todos los datos ‘la bestia’ entonces voy a pulsar el g5 y voy a comprobar cómo le voy a bruce y me ha actualizado todos los teléfonos vale muy bien os cuento para la próxima clase danny lo que vamos a hacer aparte de que avanzaremos algo más en la teoría evidentemente pero lo que haremos es empezar a unir las piezas con las que hemos trabajado hoy supongo que conocerás que hay una fantástica página llamada ine qué es la página del instituto nacional de estadística la gran fiesta entonces voy a buscar por ejemplo demografía y población y quiero población por municipios cifras oficiales de población de municipios españoles resumen [Música] no por provincias población por provincias y sexo estoy pinchando por pinchar vale [Música] vale y no se lo quiero todo lo quiero todo me lo descargo me lo descargo en excel con extensión xls descargar insisto he descargado una cosa pero hay millones de cosas que me puedo descargar y ahora creo que ha sido pequeñito vale frente chocas y ahora lo abro en mi caso con libreoffice o excel club e instalado y compruebo y compruebo cómo tengo un archivo de excel con la información que he pedido qué es lo que diría es qué vamos a hacer en la próxima clase lo que vamos a hacer la próxima clase va a ser aplicando lo que hemos visto hoy en primer lugar pasar esta información de excel a una base de datos de tipo sql comprobar que nos podemos conectar desde python a una base de datos de tipo de sql y utilizando la librería gráfica de gráficas que hemos utilizado en la clase de hoy convertir estos datos de la forma más fácil posible a una gráfica que sea fácilmente interpretable por cualquier persona digamos un entrenamiento técnico es decir el próximo día dedicaremos todavía una parte de la clase a trabajar con avanzar en la teoría pero sobre todo estaría poniendo un ejercicio relacionado con procesamiento masivo de datos y también a lanzaremos algo más en lo que os comentaba antes de lo que hemos de tratar píxel a píxel para identificar formas dentro de una imagen para que para el fin de semana tengáis un ejercicio para realizar de procesamiento masivo de datos y otro ejercicio para realizar de procesamiento de imágenes utilizando más in learning vale entonces por eso pues eso me vendría bien que para la próxima clase repase es lo que hemos hecho en la clase de hoy porque será una clase que se apoyará en los conocimientos de hoy iremos bastante a saco cuando digo bastante a saco no quiero decir que iremos inhumanamente a saco pero sí que quiero en la clase del miércoles que viene ir con cierta velocidad para que nos cunda la clase y para poder ponernos estos ejercicios para el fin de semana ok vale pues bueno en la clase de hoy vale pues vamos a empezar como os decía uniendo tecnologías que hemos visto en días anteriores hoy vamos a empezar con la gestión de una aplicación lo más completa posible para unir por ejemplo base de datos con generación de gráficas y estadísticas tengo por aquí una tabla que tiene cuatro columnas está lo más anonimizar posible que tiene nombre fecha del nacimiento donde ha nacido y fecha de nacimiento está repetido igual me cargo alguna columna de hecho estoy viendo bueno veis aquí tenemos un problema y es que en algunos campos la información está en el campo de la izquierda en algunos está en las dos espera momentín que ya tengo key y en otras simplemente pues está en los dos o en ninguno entonces eso a ver momento cuánto ocupa esto 10 megas puede ser válida vemos que hay un montón de campos en blanco no rellenados vemos que hay incluso nombres en blanco vemos que hay nombres en mayúsculas nombres en minúsculas alguien me recuerda la las 5 v es del big data tenemos el otro día una de la velocidad esta no va a ser un problema pero por ejemplo había una el que era veracidad vale entonces yo en este caso en veracidad no tengo un problema de si estos datos son ciertos o no lo son ahora mismo lo desconozco pero tengo un problema de que los datos simplemente tengo problema de veracidad que tengo un problema de variedad los datos no están uniformes luego puede haber otro problema y es que si os dais cuenta hay algunas fechas que están formateadas con barra y otras fechas que están formateadas con guión y luego hay otras fechas que veréis por aquí que están formateadas como año mes día otras que están formadas formateadas como día mes año otras que tienen los cuatro dígitos del año otras que tienen dos dígitos del año bienvenidos a cualquier base de datos vale de hecho tenemos también una de una tabla de poblaciones vamos a ver vamos a ver esto en primer lugar tengo un excel pero como ahora veréis a mí esta información me va a venir bastante bien si la puedo tener dentro de una base de datos así que voy a hacer lo mismo del otro día ahora brice porque voy a hacer lo mismo del otro día voy a aplicaciones voy al mam en cuanto lo encuentre voy al mar abro el man abro los servidores bien arrancó arrancó en tools arranco php my admin para gestionar mysql lo primero que me encuentro es que me lo he descargado en formato o de ese o de ese es open document spreadsheet que es como excel pero en la versión libre digamos entonces me voy a curso python para aprovechar la misma base de datos que utilizamos el otro día me voy a me voy a importar me voy a seleccionar archivo me voy a alumnos me voy first line del falcon times the columbian y le vivo go bien de paso lo que he hecho también es importar el campo de identificación pero el campo de identificación ahora mismo al brace no me sirve de mucho bueno en primer lugar tengo hay alumnos vamos a comprobar qué voy a browse y lo que acabo de hacer es convertir una hoja de cálculo acabo de convertir una hoja de cálculo en una tabla de una base de datos mysql y a continuación bueno el identificador me voy a estructura y necesito cambiarlo para decirle que sea una clave primaria hay una cosa que se suele hacer más rápidamente que es hacer un drop creo un campo nuevo al principio de la tabla le digo que se llama identificador y desde aquí y acabó antes así le digo que es un índice primario y auto incremental y así de esa forma ahora sí me aseguro de que ahora ese campo identificador es realmente un campo correcto vale ahora para qué quiero yo para que me interesaría hablamos el otro día en primer lugar de homogeneizar las bases de datos pues a continuación lo que voy a hacer es que antes de que entremos en python voy a ir a sql y lo que voy a hacer es hacer una petición más compleja que las que hemos hecho estos días select el from alumnos vamos a verlo desde ahora de ago y dice vale ok hasta de los hornos y ahora digo select count nombre como nombre fueron alumnos vale entonces esto ahora mismo no va a funcionar porque me dice o sea si quieres hacer un count tendrás que hacer un group by entonces digo vale pues group buy y el nombre le quiero contar los por el nombre quiere agruparlos por el nombre así que vengo por aquí y me aparecen los alumnos que hay por ejemplo veo que adrián hay 16 adriana y 2 africa hay uno quiero averiguar en este caso ahí [Música] 827 nombres diferentes quiero averiguar en este caso en grupo y nombre order by que vale puso en momento te vamos a ver a un nombre a cuenta entonces order by cuenta descendiente vamos a ver lo momento ok go y me dice pues mira el nombre que más hay es maria luego carlos luego alejandro si os fijáis lo que ha hecho es agrupar lo por nombre y a continuación ordenarlo por el número de forma descendiente para mostrarme primero los que más hay y en último lugar los que menos hay claro al final de todo esto habrá un montón de nombres que tengan muy pocas repeticiones muy pocas iteraciones pues yo puedo completar esta consulta diciendo limite 15 sólo quiero los 15 nombres que más se repitan vale ok entonces sí solo me muestra los primeros 15 valores lo primero que he hecho es construir una petición sql más compleja de lo que el otro día estábamos utilizando para demostraros por qué las bases de datos en proyectos de tratamiento de datos claro quiero decir porque las bases de datos en frentes de tratamientos de datos suelen ser las más elegidas por ejemplo frente a excel pues porque son bases de datos y contienen herramientas específicas para trabajar datos lo cual evidentemente no descarta a otras aplicaciones como excel e con sus tablas dinámicas y sus gráficas y un montón de herramientas que tienen vale pero desde luego en un momento dado poder realizar este tipo de ordenación con una frase con una sentencia pues bien bien claro esto es como el chiste del ingeniero de la fotocopiadora el problema no es formular una frase el problema de saber que tenías que poner en esa frase para que funcionara evidentemente yo de momento lo que voy a hacer es que voy a copiar esta sentencia diego voy a copiar esta sentencia porque si ahora pincho cualquier otro botón la voy a perder que es muy común es un clásico parece estar no perderla voy a ir a text edit veis a quien texto dice lo que va a hacer es que me suelo copiar y pegar como a modo de portapapeles temporal las particiones sql de aquello con lo que esté trabajando de hecho hago control z veréis con lo último que estaba trabajando esa tarde vale entonces lo que hago es que me lo guardo esto aquí los espacios son decorativos simplemente los he puesto para que lo veáis los he puesto para que los podéis apreciar y ahora a continuación vamos a ir ahí de él y vamos a ver esto en python vale vamos a transferir esto a lo que ya sabemos de payton y vais a ver que es más fácil de lo que parece me voy a risk and files me voy a mysql 5 y lo voy a copiar voy a hacer uno nuevo lo voy a pegar lo voy a guardar lo guardo en 60 y lo guardo en 67 un base de datos vale entonces ahora atención a lo que voy a hacer es copiar esta consulta y la voy a pegar aquí cuidado porque evidentemente si bajo de línea salta hay un truco bueno una es eliminar los saltos de línea de hacerlo todo junto otro es hacer esto tivit 15 ahí está esto allí esto allí esto aquí esto aquí aquí me aquí me sobra uno y yo creo que la vale vamos a probarlo ah vale si es el último que hacía era imprimir ok f5 ha ocurrido algún error en la base de datos o qué select vale un cursor curso python 889 jose vicente en principio no debería haber algún error déjame que ponga todo esto en la misma línea no creo pero por ser errores de saltos si ya había donde está el error el error es de espacios selecta o las cuentas nombre freedom [Música] froome a alumnos group by ahí falta un espacio porque si no hay espacio se pegará con s group by vamos a probarlo tiene pinta de ser eso ha ocurrido algún error en la base de datos eso también fuera eso también fuera vamos a poner un espacio al final de cada línea bueno pues tampoco pasa nada y ya está nombre from alumnos groupe baile un hombre para ver un poco de dónde viene el error límite 15 sep efe cinco ha ocurrido una sola base de datos pues mira voy a quitar el try excepto y así veremos en rojo efe 5 que nos dices un rey sol esto fuera el cómic fuera aunque era fantástico porque me dejó esto así ya que lo tenemos tampoco ocupa tanto y ahora a continuación voy a abrir algún ejercicio anterior el 3 creo que era un mes perfecto y ahora resultado mi resultado es igual a mi cursor punto fe sol y quiero imprimir mi resultado ok pues vamos allá efe 5 y el resultado es maría carlos alejandro pablo andrea paula marta sergio y así con cada uno de ellos concretamente yo lo que quiero hacer ahora es imprimir y d 2 porque si nos fijamos en mysql no perdona primero la cuenta es el índice 0 y el nombre es el índice 1 entonces este es el índice 0 cuando recargo bien y lo mismo vale y es que vamos a ver str [Música] intentamos convertirlo en str o sea forzamos la conversión y tengo maria 50 carlos 46 alejandro 45 pablo 40 y así entonces con esto vamos a con esto yo lo primero que quiero demostraros es que para trabajar con la conexión con bases de datos generalmente de un generalmente porque cada maestrillo tiene su librillo y no hay una forma sola de hacer las cosas pero generalmente tú haces la prueba sobre la base de datos la base de datos tiene en este caso concreto por ejemplo ese culito también lo tiene la gran mayoría lo tienen tu pestañita de sql que esta pestaña donde puedes probar cosas y puedes hacer un montón de pruebas hasta que sale a la petición que tú quieres y cuando ya tienes la petición que quieres es cuando la copias y la pasas a tu lenguaje de programación sabiendo que a partir de ese momento si hay algún problema el problema estará en el lenguaje de programación no en la petición a la base de datos ahora ahora a continuación lo que tenemos por aquí es que ya tenemos nuestra petición a la base de datos pero la petición nos da un resultado como te diría yo estéticamente feo porque nos da un resultado en línea de comandos y yo quiero un resultado bonito pero no estoy hablando solo ya de teca ínter estoy hablando de que quiero ver esto en modo gráfica quiero poder presentar esto por ejemplo a un cliente y decirle mira te envío un jpg de de los nombres más comunes de tu base de datos vale entonces en este caso a continuación lo que voy a hacer es me voy a racing files me voy a gráfica 4 por ejemplo y vamos allá vamos a ver no está no esta no pero sabes que una partidista que es así voy a esta gráfica example me voy recordáis el otro día a la galería a la librería de gráficas y me voy a la de gráfica de tarta la típica en cuanto la encuentre voy a buscar pal la tira page art by en polar charts ahí está me encanta no se aplica al ejercicio de que estamos haciendo ahora igual si hubiera cogido nombres y apellidos se hubiera aplicado el ave en dexter pero no sé pero te digo que me mola quiero decir que me mola visualmente vale no no por otra cosa pero queda muy cool queda muy película de ciencia ficción bueno pues voy a la típica el basic page art sobre todo lo que quiero es empezar por el ejemplo más sencillo posible vale entonces vamos a empezar por aquí ahora luego os quiero ver también una cosita de esto pero ahora hablamos de esto quiero esto de aquí ya sabéis que primero arriba del todo no debería todo esto y pegarlo a continuación sino que todas las importaciones deberían ideal principio y ahora sí es donde voy a hacer esto para amigo parte de la base de datos y ahora aquí abajo parte de la gráfica y pego y guardo y ejecutó a ver qué pasa 5 para ver si todo va bien yo tengo ese resultado y luego además tengo este país art entonces bueno yo puedo pinchar por aquí vale puedo del otro día no puedo hacer así puedo hacer zoom puedo mover la gráfica puede hacerla grande puedo volver a casa puedo guardarla y por ejemplo el escritorio vale y luego esto se lo podré enviar o saber eso suficiente se lo podrá enviar a mi cliente en formato png qué es lo que quiero a continuación lo que quiero a continuación como os podéis imaginar es aquí donde pone por ejemplo 6 es ya que donde pone el labels lo que quiero es cambiarlos labels por el este por el nombre aquí el nombre y lo que quiero es cambiarlos saiz es por el número a la y de esa forma lo que quiero es combinar los dos ejercicios en uno solo voy a pasar con lo cual a continuación a continuación lo que voy a hacer vamos a ver es lo siguiente voy a empezar esto fuera ya que ya lo hemos entendido esto fuera y ahora digo yo labels es esto de aquí labels son valores separados por coma por comas tengo labels vamos a ver [Música] y tengo 6s labels es igual a labels entonces aquí en 6 es lo que tengo es y lo que tengo es estoy pensando cómo puedo aumentar esto es decir este explote que hace así sólo explota el segundo slice vale esto me da igual perfecto yo lo que quiero decirle al sistema esto lo voy a dejar como esta esto me da igual sobre dejar como esta ya no digo 6 es punto apn esto no va a funcionar el 6 era este labels punto apple estoy aquí lo voy a ejecutar no va a funcionar porque no va a decir que el método de pen no sé para cuál de estos dos no me lo va a volveremos y todo lo demás de momento se queda igual y luego tendré que vaciar estos parámetros de aquí pero de momento dejadme quedarme con ellos efe 5 balean expected ahora si este sobra aunque es cierto valen error muy bien vale este es el error que quería y me dice las duplas no tienen el atributo apple con lo cual el problema en este caso es que la clave es la tabla es una estructura inmutable eso quiere decir que cuando yo creo la dupla debería estar diciendo cuántos elementos va a contener si os fijáis yo puedo saber los elementos que va a contener porque yo le estoy diciendo aquí limite 15 es decir yo sé que ese elemento esa lista esa tutela va a contener 15 elementos entonces en este caso lo que puedo hacer es decirle el momento el label bueno pues no encuentro el error lo ejecutó a ver lo que quiero en este caso es decirle por ejemplo que la welsch es igual a una dupla que va a tener en este caso 15 elementos de esta forma yo le puedo decir ahora que el a welsch labels es igual hay de 1 es decir lo que hago es crear una dupla vacía pero reservando los 15 espacios en la memoria porque el problema es que todas aquellas estructuras de datos que son inmutables cuando las creo les tengo que decir cuáles son longitud que en este caso no me es un problema en otros casos por cierto sí que muchas veces lo es vale pero en este caso por lo menos la longitud desconocida cuando la longitud es desconocida a veces lo que se hace es crear una dupla más grande de lo que sabes que vas a utilizar para reservarse el espacio entonces ahora creo la dupla vacía le digo que para cada uno de los registros esta es la información que va a tener vamos a aprobar esto ok vale y ok el objeto no soporta dónde estás int object no soporta esto qué raro aquí voy a poner hola int offset y pongo ahí de 0 labels vale pues un momento y vamos a ver a ver una cosa que se me está ocurriendo es la siguiente longaniza es igual a esto ahora longaniza más igual coma y de uno y al final del todo fuera de aquí digo labels es igual a longaniza label solo puedo quitar lo que va a hacer es convertirla abel automáticamente en una tabla vamos a verlo ok no puedo concatenar y no puedo comprar esto no pasa nada concatena esto convierte el string y ahora o muy bien y ahora lo que me dice es que la belle debe ser de longitud x lo que probablemente me está diciendo es que no coinciden vamos a verlo no coinciden las longitudes de uno y de otro porque pues porque la longaniza que son labels debe tener 15 elementos pero saiz es debe tener los 15 más estos 4 entonces vamos a comprobarlo vamos a comprobar y ahora quiero print labels y quiero print 6 efe 5 y vamos a comprobarlo entonces ahí lo tenemos vamos a comprobar y comprobamos que tenemos por aquí el 50 vale saiz es y esto es el número uno que le puesto a los dos el número cero por cierto esto y esto lo puedo comentar ya este 5 vale y tenemos maría carlos alejandro y tal pero fijémonos que tenemos 15 30 45 10 15 30 45 10 y luego todos los demás vale que serán los otros 15 entonces aquí voy a vaciar esto para decir que sea una lista y esté vacía efe 5 vale y él debe ser de la longitud de x hay una cosa que ha fatal que fatal y es lo siguiente y es que como estoy encadenando fijémonos que tengo una coma antes de maría y eso quiere decir que tengo un elemento de más entonces voy a poner aquí un cero efe 5 tengo un cero vamos vamos a contar allí el problema está en esto de aquí 0 1 perdón 1 2 3 4 5 6 7 8 9 10 14 15 y 16 1 2 3 4 5 6 7 8 9 10 12 13 14 15 16 y sospecho esto sospecho esto sospecho esto dónde estás aquí longaniza es igual a hola y ahora vale la belle debe ser de la longitud x la vela vélez ella la vela fíjate que dice el label pero mi valor es labels labels l’avenç vamos a comprobar que esto de aquí lo está cogiendo como una tabla ahora aquí print quiero ver el tipo de datos y entonces digo print tal y labels y a ver qué me dice que es la vela estas 5 class string ese es el problema y es que eso me lo está cogiendo como string entonces me abro un navegador y digo python strings to to play sí vamos a ver vale y esto es bueno entonces copio eso y vivo labels es igual a convierte en tu plan usando map con número entero y el separador es una coma y un espacio el espacio el espacio yo diría que no hay alguna espacio occidental por ahí pero sin el espacio vamos a verlo efe 5 este 7 r esto no es longaniza veamos no invadir literal con base 10 hasta aquí y el string es este vamos a probar este por eso ojalá que sea así de sencillo la eba la longaniza estas 5 hola snoop y pharming si tola y pongo f5 dónde están las luces sin taxis para circular para el ciclo márquez bueno ahí vale vale hay una cosa que puedo hacer pero no la quiero hacer para hacer una prueba qué es la siguiente que es la vela es igual a esto voy a hacerlo un momento no perdón con esto esto no simplemente para que podamos ver la gráfica y ya partir de ahí nos centramos en la conversión de un string a una dupla pero con un poquito más de seguridad de lo que va a salir por lo menos lo que quiero es que veamos una mínima gráfica en la pantalla así que f 5 vale explorer explorer debe ser familia de hecho claro ahora dice que es una dupla vale vale lo que está diciendo es que el explorer debe ser de la longitud de x qué 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 1 2 3 4 5 6 7 10 11 12 13 14 15 y 16 el ejercicio original es este y tiene 12 13 4 2 3 y 4 voy a esto momento voy a hacer lo siguiente cf5 y así sale y fijémonos que en este caso tenemos 1 2 3 y 4 1 2 3 y 4 lo estoy comparando con lo que tengo yo [Música] hacer una cosa límite 4 por ejemplo comentamos efe 5 vale qué pasa qué haces 12 13 4 efe 5 y tengo 1 2 3 4 y 5 1 2 3 4 y 5 estoy comparando y si digo límite 3 y me cargo a pablo interesante interesante pues no parece ser ese el problema lo que parece es que este ejercicio este ejercicio esté como preparado para trabajar con cuatro elementos no parece que tenga por qué vamos a ver creo que está pasando lo siguiente y es que tengo que un parámetro explorer que es el que me saca una porción de la tarta claro este parámetro explorer se está comprometiendo tener 1 2 3 y 4 parámetros pero es que a mí me da igual ahora mismo el explorer entonces yo lo que voy a hacer es que voy a deshacer todo lo que he hecho vale el explorer es un parámetro que se encarga de lo voy a ejecutar de hacer esto de una porción de la tarta estoy aquí y separarla como destacar la pero es un parámetro opcional y yo de hecho ahora mismo realmente no lo necesito para nada entonces qué ocurre el explorer que lo tenemos aquí tiene 1 2 3 y 4 elementos igual que los labels igual que los ice es si llego el adelphi size es de 15 elementos pero el explorer sigue siendo de cuatro elementos el sistema no sabe cómo actuar porque necesita que todos los elementos tengan el mismo número de ítems vale entonces lo que voy a hacer es quitar la opción de exploit porque es que no me vale para nada para este ejercicio lo que hago es esto lo comento ahora debo tener 15 aquí dieciséis realmente y dieciséis aquí vamos a verlo efe 5 y si todo va bien en ese caso tengo esto en este caso lo que tengo es esta gráfica voy a hacer un poco más grande para que sean mejor los porcentajes y yo a partir de aquí a partir de esta gráfica ahora lo que haremos es que los datos que vuelquen sean los que realmente vendrían por aquí os lo puedo guardar esto y me lo guardo en el escritorio como figura uno ya existe me aseguro que en el escritorio tengo un archivo png y ese archivo png yo ya se lo podría enviar por correo electrónico por ejemplo a un cliente este ejercicio está casi completo ahora comentar el código y eliminar en este caso la página lo que está haciendo está presenciando tal cual lo que viene en el ejemplo y es que dice hay ficheros adicionales te dice esto de aquí el ejemplo no te dice nada más que esto entonces en este caso no también te digo que nos hemos saltado directamente la documentación igual en la documentación pone algo más concreto de fíjate que si el número de parámetros no coincide eso te puede explotar o lo que sea vale también te digo que esta es la documentación oficial una de las documentaciones que más me gustan es en php punto net que es la documentación oficial de php php por ejemplo explorer vale lo que sea cualquier cualquier comando entonces esa documentación está muy bien porque es una documentación abierta donde los propios creadores de php te documentan la la instrucción te dicen qué es lo que hace te da una descripción sabes sintáctica a continuación te vienen una serie de ejemplos ejemplo 1 y ejemplo 2 pero lo más divertido es que cuando acaba la documentación oficial aquí tienes la ya ser contribuir te ‘notes que es donde la gente dice 6 mira el ejemplo oficial está muy bien pero pone el mío que mola más y entonces hay veces que es cierto que la gente propone ejemplos que son más claros que los de la documentación oficial quiero decir para eso están las you ser contribuyes ‘notes porque hay veces que los ejemplos que ponen son correctos pero dices mira el ejemplo será correcto pero no entiende un pimiento entonces hay gente que dice no mira a la gente de arriba es correcto pero mira as pim pam pum’ y lo tienes entonces son ejemplos que igual son más incompletos pero son más sencillos de entender a le quiero decir que así como yo siempre digo te acuerdas que creo que lo comentado alguna vez que la documentación dejaba yo creo que está pensada para que la gente no prueba me dejaba porque parece que la documentación tiene miedo a programar la documentación de php está muy bien hay una documentación decirle con esto que al final cada documentación es es una cosa pero hay una que no sé si estará todavía en marcha que es la de font gap hace tiempo que no lo uso por eso no te sé decir pero referencias esta es la mejor documentación que yo he visto en toda mi vida tiene pinta de que no couples vale sí a ver si estaría cuál es la recuerdo entonces la documentación porque lo han pasado allí antes cuando estaba en la página era una documentación muy chula porque decía mira cómo se usa esto esto se usa así y entonces te decían te vale fantástico no te vale espera te pongo un pequeño trozo de código y con el trozo de código de aclarar un poco más y a continuación te decía lo has pillado bien no vale pues te pongo un trozo entero de código o sea era como si te apañas con esto fantástico si no te pongo un trozo intermedio y si no te pongo un trozo gigantesco de código y si no era con uno con el otro lo pillan más valen tres pues bueno es lo que te digo no con cada documentación pues al final vale empresa ahora antes de empezar a comentar este ejemplo yo lo que quiero es repasar el segundo ejemplo yo lo que quiero a ver porque podría pasar al siguiente ejemplo de hacer un sistema de analítica pero bueno vamos a hacer una cosa mía vamos a pasar semana lítica a ver si lo puedo acabar más o menos rápido y antes de que acabe la clase para mandarnos deberes evidentemente tengo que haber conseguido la conversión de string a tu plan más que nada porque a continuación lo que os voy a decir es hacerlo vosotros para el fin de semana y para que lo hagamos otros evidentemente os tengo que dar un ejemplo 100% en funcionamiento una vez que tengo esta tabla de registros voy a guardar la quiero llamarnos la atención en cuanto a qué momento estoy guardando en cuanto a que esta tabla es una tabla que ya empieza a ser gigantesca tiene una columna un poco particular que se llama utc entonces el utc es el lo voy a describir vais a pensar que estoy tomando el pelo pero es la cantidad de segundos que han pasado desde el 1 de enero de 1970 hasta hoy por ejemplo y creéis que estoy tomando el pelo pero sí en internet buscáis hubník sivok la letra y un equipo que el tiempo y unix veréis qué veréis que es la cantidad de segundos que han pasado desde medianoche del 1 de enero 1970 es una forma estandarizada en informática de contar el tiempo y no os preocupéis porque luego mysql y prácticamente cualquier tipo de gestor de base de datos sql tiene funciones para convertir eso en fechas tengo la ip y tengo el navegador ahora veremos que en el navegador pone por ejemplo pues desde que ordenador está entrando están entrando los usuarios bueno pues he guardado esto ahora a continuación me voy no sé cuántos registros tiene fijaos que con el scroll por ahí iba por el 41 mil o sea imaginaos vale y ahora a continuación lo que voy a hacer es que voy a cerrar por aquí me vengo aquí me voy a la base de datos del curso esto me dice cuidado porque lo has guardado pero sí que lo había guardado voy a importar voy a seleccionar archivo máximo 8 megas vale 3 megas menos mal si no se puede ampliar eso es lo de menos y la primera línea contiene los columnas le doy ago has visto lo que a lo que a lo que le costaba excel o libreoffice en este caso evidentemente mover ese archivo que tiene como no sé 125 mil registros creo vale es decir excel es un archivo que es una hoja de calosha es un programa que es una hoja de cálculo y nuestro dije yo ese microsoft tal también la calc no es mejor que excel en ese sentido vale entonces ahora verás que en el momento en el que metemos esa gran cantidad de información en algo que realmente es una base de datos vas a ver cómo realmente el rendimiento mejora el rendimiento de aumenta estamos importando es un archivo grande con lo cual es normal que la importación que la importación le cueste un poco mientras tanto yo por ejemplo lo que voy a hacer es que a partir de los de los peces quiero averiguar algo como esto quiero averiguar por ejemplo quiero averiguar por ejemplo quiero averiguar algo como esto según dyn que estoy desplegando quiero saber para los días que han pasado para los últimos días últimos meses últimos lo que sea quiero obtener una gráfica como esta y quiero volver a mezclar la gestión de base de datos la gestión de información de base de datos con la representación con gráficas entonces vamos a ver cómo va está todavía en ello voy a hacer lo siguiente voy a crear un nuevo archivo python 68 base de datos 2 vale me voy a ir a la galería me voy a ir a una gráfica la más estándar que pueda voy a decir line debe ser mucho más sencillo siempre el plot ah no templo [Música] vale se integra fa igual acabamos antes mientras tanto como veis estoy aquí esperando a que esta importación finalice pipe lo voy a la más sencilla que pueda fantástico esta es la calle f5 y ya está esto es lo que quiero a continuación quiero sacar la información de la propia base de datos así que un segundo vamos a ver cómo ha fallado la importación esto lo voy a guardar en el formato csv y con el formato csv coma y comillas ya qué rapidez 141 megas 41 megas voy a comprimir los registros se queda en 19 mega estados cuenta que estoy intentando importar el correspondiente a 41 megas de datos si hace falta vamos lo que haré es intentar intentar quitar veis que me permite el fit y vamos allá vamos allá y si no lo que haré es importar un conjunto menor de datos de hecho de hecho si queréis voy a hacer eso ahora voy a quitar esto eliminó las filas que sepáis que estoy llorando por dentro vale ya no lo estoy esté realizando pero estoy llorando esperando porque la gracia de estos ejercicios es precisamente que haya muchos datos vale entonces voy a detener para reinicio paro ahora un momento que el sistema pare realmente bien una cosa que puedo hacer es parar los servidores y volverlos a arrancar esto que hacer es muy guarro y volverlos a arrancar me meto dentro de hp admin igual había importado algo curso python registros pues sí me había importado algo ha importado 22.000 registros pues venga vamos a trabajar con eso ya sí por lo menos vamos haciendo cositas entonces ahora yo a continuación lo que quiero preguntarle al sistema es por ejemplo que me diga el número de ips o que me agrupa el utc por año mes y día vale entonces vengo aquí y digo mysql y unix y poco by bill por ejemplo group by day en conversión iunics timestamp aunque es un foro de php realmente me va a valer entonces selecciono esto me voy a sql luego la petición el campo se llama etc as n/d formateado me lo como día mes y año bien count y the vale como post count de registros registros y group by n de viacom vale y estamos viendo que por ejemplo el día 1 de enero de 1971 ha entrado esto evidentemente es incorrecto será un registro 0 pero el 1 de septiembre 280 207 3 de septiembre que es cuando ya empezó a entrar más gente en esta aplicación hubieron estas estas entradas vale veis en tres a continuación lo que voy a hacer es que me vengo aquí seleccionó evidentemente importo base de datos me conecto a la base de datos le hago una petición a la base de datos la petición es esta de aquí hago esto vale quito y esto que es muy bien que fantástico no al revés ok estoy tocando el base de datos 1 lo quería aquí en el base de datos 2 casi me cargo el ejercicio primero brouwer great vale ahora copio esto y dijo prensa print y de uno y de dos vamos a verlo efe 5 tengo ahí los datos y tengo el plot vacío evidentemente con lo cual ahora a continuación vamos a hacer lo mismo que en el otro ejercicio que es lo siguiente vamos a ver plot 1234 parece que va por vías aunque hay días que igual no hay registros pero bueno entonces explotó lista es igual a esto y ahora lista es el string de 1 lista punto apple y quiero aprendiz ar este de aquí ok ahora quiero pilotear la lista un momento que voy a encender la luz y vamos a verlo y la de él son numbers pues voy a poner visitas efe 5 vamos a echarle un vistazo a ver qué dice aquí lo tengo y ahí lo tengo ahí como podéis ver tengo los números que reflejan tendríamos que ver y ahora lo vamos a ver de hecho el tema de poner las fechas aquí por ejemplo vale porque lo que ha hecho es poner números directamente a palo seko pero yo creo que podéis ver en esta gráfica que representa correctamente los valores que tenemos aquí que básicamente quiere decir que el día 1 de septiembre del 2 de septiembre me conecte yo pero el día 3 de septiembre es cuando la gente empieza a entrar en la aplicación hay un pico probablemente esto sería fin de semana de hecho no sé si veis que hay feeling un bajón plum blind un bajón y si seguimos con más registros probablemente veremos el mismo patrón que es el bajón fin de semana vale menos gente entrando en la aplicación con esto este ejemplo fijaos que siendo más complejo de base de datos pero es más sencillo en cuanto a visualización esto es con lo que quiero trabajar y sobre todo quiero que os deis cuenta de una cosa quiero que os deis cuenta de que esta sencilla línea de código ha convertido casi en una gráfica 22.000 registros de una base de datos que se dice poco y que dice pronto y lo mejor es que si ahora hago el ejemplo si ahora voy a decirle ahora voy a decirle que a ver si me deja importar todos los registros quiero hacer lo mismo con todos los registros entonces me voy a registros me voy a mientras tanto mientras hacemos esto vamos a ver lo de la dupla voy a decirle que quiero vaciar la tabla de registros y voy a dejarlo un ratito importando todos los registros entonces es un momento y que le cuesta vaciar la tabla hola trunk eight table registros sí no sé igual me sale más a cuenta a hacer algún otro tipo de operación como por ejemplo a copiar la tabla a registros 2 y copiar solo la estructura y ya está importa selecciona archivo quiero registros csv vamos a decirle go y me dejó esto aquí funcionando mientras nos vamos al otro ejercicio en cerrar cositas por aquí mientras nos vamos a otro ejercicio y vemos el tema de las duplas y así le dejamos tiempo a la importación esto fuera esto fuera estos momentos fuera esto fuera y vamos a este ejercicio de aquí estas 5 nos recuperamos donde lo teníamos bien y ahora os acordáis que hace un momento lo había falseado lo que es realmente convertir esta longaniza en una dupla así que bueno vale hay una cosa hay una cosa si quizás esto es lo que me estaba fallando y es que aquí voy a poner una comilla simple y aquí voy a comer a poner una comida simple para asegurarme que la dupla tenga esas comillas simples ahora algo así no algo así labels es igual a evalúa longaniza 6 es es igual a eso vamos a probarlo f5 no sé si será un error momento vale c name o la is not the fine evans longaniza name hola si nos fijamos olaya está entre comillas hola hola hola hola hola claro claro hola entre comillas también s 5 a esto ya es otra cosa vale y ahora dice que esto de aquí es una dupla entonces lo que he hecho asegurarme que los nombres aparecían forzados entre comillas para que el programa entienda que son strings dentro de una tecla y que no son líneas pero bueno entonces para eso lo que he hecho es esto de decirle al sistema que aquí donde pone hola pues me lo ponga además de las comillas que delimitan la string las comillas sencillas que delimitan la tutela lo mismo he hecho aquí esto voy a empezar a borrar ya sobrantes borro sobrantes esto no lo quiero para no marear os verás verás te cuento voy a escribir por aquí por aquí abajo yo tenía un string de hecho tenía un stream que era pp como jaime como jose tenía este extremo pero qué ocurre que al convertirlo en una dupla lo que hace es que coge estas comillas y las convierte en esto de aquí qué problema y con esa tuk la que dirías ahora lo ves exacto y es que el programa intenta mente de esto como una dupla pero claro si no tiene comillas aquí dentro cree que estos son números enteros y el programa dice esto una de dos o son números enteros o si no me pones comillas son variables pero eso tampoco son variables porque no las ha declarado arriba entonces falla en la validación que es lo que tengo que hacer lo que tengo que hacer es que cada uno de estos nombres vaya entre comillas para que cuando convierta esto en una dupla se quede así y esa dupla sí que es una dupla válida de nombres string ese era el problema y por eso es por lo que aquí estoy poniendo después de la coma una comida encadenado encadenado y otra comilla para forzar a que cuando me da el string me lo dé en este formato para que al convertir se convierta correctamente un poco un fastidio pero es lo que hay entonces ahora vengo por aquí por cierto que ahora le digo por ejemplo que no quiere el límite 15 no quiero limite 25 vamos a probarlo pulso f 5 y me vuelve a sacar claro ahora evidentemente no están no es tan inteligible al menos en este tipo de gráfica porque no puedo verlo correctamente claro que podría este ejercicio y convertirlo en un segundo tipo de ejercicio que es una las barras unas barras horizontales entonces me voy a la documentación esto como vas esto es lo de antes que hay no era eso era eso o no es sano pasar la pasamos a ver localhost php miami cursos python 84 mil registros no mentimos a ver si puedo tocar una cosa aplicaciones configuración y ahora me tras ver cuál es de próximo configuración última versión bhp abrir con brackets el max execution momento esto qué es max payne de 3000 segundos para que no pare después de tal entonces registros 2 operaciones no copio a registros 3 solo la estructura para los servidores vuelvo a arrancar los servidores lo que he hecho es que la importación no tenga un límite de 30 segundos y ahora registros 3 importó selecciono archivo cojo este le doy a continuar y vamos a dejarlo ahí rodando bien mientras tanto me voy a buscar la librería horizontal columna horizontal bar chart bien ésta es la que quiero entonces cojo el ejemplo evidentemente esto lo voy a guardar como y 9 base de datos 3 vale y ahora a continuación digo lo siguiente esto fuera esto fuera esto no lo sé de momento fuera me he cargado todo lo correspondiente al país out ahora cojo esto de aquí mira también usan un pie interesante sólo importan un pie porque lo otro ya lo tengo ok muy bien este ejemplo lo que hace es hacer aleatorios es decir la gente es esta de aquí voy a tener el mismo problema si la gente está de aquí me estoy concentrando para ti el performance es aleatorio vamos a ejecutarlo me devuelve esto sizes dónde estás aquí esto fuera era paz fíjate que si ahora lo vuelvo a ejecutar no sé si veis que me da diferente da un resultado diferente porque es aleatorio porque el ejercicio es aleatorio se la vengo por aquí y lo que quiero en este caso esto cómo va esto va corriendo le va a pasar a otra pantalla esto fuera esto fuera fuera esto aquí y vamos a hablar valen gente es esto con lo cual lo que voy a hacer escoger lo mismo que tenía el otro ejercicio base de datos 1 y digo people es igual hola longaniza es igual a hola lo organiza más igual a str de y de 1 vale labels no era la vez que era cargado people así que print people dará un error evidentemente people es igual a balón al hecho name o la is not different axis claro muy bien lo mismo de antes cata bruce lo mismo de antes vale bien esto evidentemente no está bien porque me está cogiendo valores aleatorios hola evidentemente lo pongo para rellenar pero ahora lo que quiero es que en lugar de poner baldes aleatorios me pongo a horarios correctos porque además esto es correcto debería dar como media pirámide y no lo está dando así que a continuación vamos a ver people por aquí performance por aquí voy a poner performance es igual a 20 estoy aquí [Música] alec todos a 20 y ahora lo que quiero con cada uno de ellos performance si lo eres porque esto no está metido mp random ram lem people esto es la cuestión [Música] de forma más extraña de representarlo pero yo quiero para cada uno de estos print performance hola me está sacando una serie de valores para estos elementos cabal qué forma más rara de representarlo pero esto en todo caso es una lista entonces puedo decir que performance es una lista pero no era válida al fin y al cabo porque cogí a la longitud entonces ahora performance junto a p [Música] claro ahora voy como si como elementos hay analistas y sí pero que tampoco tenía porque era raro momento vale y qué pasa aquí porque ahora fíjate que me lo ha cogido ah [Música] los objetos no pueden ser broadcast washing el ceip hay una cosa que me que me escapa un poco y es que fijate que estos valores quedan los originales estaban separados por nada por un tabulador mientras que estos valores de aquí son con coma y no los cogen aparte un valor original ahora sí vale ok es que le faltaba un valor y por último ahora en lugar de poner 20 voy a poner y de cero y esto qué es lo que va a hacer pues esto lo que va a hacer así el elola el hola tiene 20 si porque vale performance 0 ahora sí hola no tiene ninguno y así puedo ver mejor cada uno de los elementos que tengo en la gráfica y ahora de hecho incluso podría como esto se puede de hecho incluso está maximizar ahora incluso podría decirle que no quiero poner fin a que si le digo que no igual me saca 800m funde el monitor pero por ejemplo allí vale y ahora lo hago esto más grande ahí se montan un poco evidentemente pero por lo menos puedo ver cuál es la distribución de nombres en un momento dado en la tabla de la base de datos vale bien muy bien con esto tengo una variación de ese archivo por cierto que estoy viendo qué tiempo de ejecución del script de agotado bueno reenvíe el mismo archivo y la importación continuará vale a ver cuántos segundos dura pero yo le di a 3000 segundos y creo que no lo ha pillado debo haber editado el archivo que no era para de todas formas a ver si me deja abrir una segunda ventana con la base de datos para ver de cuántos registros dispongo parece que no porque está ocupado con la primera operación de importación pero bueno básicamente como os podéis imaginar lo que quiero es vamos a ver lo que quiero es realizar una importación lo más bestia posible y demostraros que aún así la tabla funcionará bien voy a hacer una cosa voy a cerrar esto voy a cerrar esto vamos directamente al ejercicio 2 este registros 3 tiene 187 mil registros esto ya es algo 170 no tiene 100 mil pero bueno vale venga a 100.000 me puede valer voy a decir que quiero registros 3 quiero registros 3 y ahora f5 recargo y no me lo irás así que me lo va a hacer ahora mato el print ahí lo tenemos y esto bueno va desde el día 1 de septiembre hasta casualmente el día 31 de octubre y si os fijáis de esta forma pues puede obtener una gráfica que de hecho no sé si veis un patrón en los picos que es lo que os decía a lo de los fines de semana vale puede obtener una gráfica acerca de los datos es decir creo que está claro que se ve muchísimo más claro 100.000 registros de esta forma que 100 mil registros de la forma y me atrevería me atrevería a hacer lo siguiente a ver si me da tiempo para daros un poco de inspiración para el ejercicio del fin de semana vamos a ver me voy a ir a la base de datos y en registros 3 voy a agregar y voy a ver que por ejemplo en algunos pone macintosh en otros muchos pone poner windows en algunos pondrá iphone o pondrá a linux no lo creo pero bueno entonces voy a hacer lo siguiente registros 3 research y quiero buscar donde el browser like mcintosh sabes que voy a hacer una sql select all from registros 3 select count from registros 3 fuera browser like comillas comillas macintosh esto qué quiere decir pues quiere decir que me va a sacar los registros que han producido los ordenadores de tipo mac en esa base de datos qué voy a hacer ahora me voy a ir al ejercicio base de datos 3 no voy a duplicar y perdón no voy a duplicar base de datos 4 y voy a decir lo siguiente vamos a ver http pm vale pues mira la organismo hola esto es macintosh esto es performance esto es das cuenta aunque es todo igual pero copio pego quito los saltos de línea de hecho igual lo puedo ejecutar ya no lo sé vamos a verlo y una super gráfica ence para mandos pero ahora yo vengo esto no voy a tirar aquí arriba empiezo a quitar espacios que no sirven para nada ahora copio esto y digo power browser like windows windows lo puedo hacer en varias peticiones a la base de datos y ahora quiero iphone esto es iphone ya sé que me diréis que estoy mezclando churras con merinas pero para hacer un ejercicio ahora quiero android android y no sé vamos a probar a ver qué sale en la vida f5 y sale esto lo cual era de esperar evidentemente vale y es que lo que está haciendo el sistema paralelo las para descartar evidentemente lo que haciendo el sistema es decir menos hay menos gente conectándose con macintosh que somos yo y dos o tres más hay un montón de gente más conectándose con windows era de esperar como esta tabla corresponde a una aplicación que se usa sobre todo en pantallas grandes hay muy poca gente que les tributó que la está utilizando en android en iphone perdón y menos gente todavía que les utilizando en android y los de iphone yo creo que debe ser tableta ipad realmente me da miedo un poco poner linux porque muchas muchas muchas firmas de browser de android pone linux pareces probablemente dará un falso positivo voy a hacerlo de todas formas porque me cuesta poco hacerlo pero pulso f5 vale sí sí sí de hecho creo que os podéis fijar en que la marca de linux es apenas un poquito más grande que la de android entonces yo creo que será las de android más alguna conexión que realmente fuera con linux creo que sería yo mismo probablemente entonces bueno vale pues por ejemplo ya tenemos un ejemplo entonces vamos a ver qué es lo que quiero que hagáis de ejercicio para el fin de semana pues básicamente lo que quiero es que hagáis esto es decir quiero que hagáis un ejercicio mediante el cual cojáis alguna gráfica de las librerías o sea de la galería de gráficas que tiene esta librería quiero que os conectes con una base de datos y quiero que la petición de la base de datos la convirtáis en una gráfica sobre todo con el objetivo de que podáis digamos visualizar datos podéis comprobar cómo podéis visualizar datos de una forma sencilla utilizando la combinación de conexión con base de datos y conversión a gráfica de preguntas lo tenéis claro más o menos lo que haría es lo que no haría eso qué tipo de gráfico utilizaría es que me decís acordaos de lo que os dije otro día a ver yo soy una persona que cuando cuando pongo deberes suelo recomendar a los alumnos ese clásico refrán de matar dos pájaros de un tiro’ esto qué quiere decir a mí me da igual lo que los datos que cojáis para hacer el ejercicio me da como ya os digo completamente igual mi recomendación es si tenéis datos reales si tenéis la base de datos de algún amigo y le vendría bien a ese amigo que le hiciera un análisis datos reales sino yo os puedo recomendar que os vayáis a line al instituto nacional de estadística y ahí tenéis lo que sea por ejemplo nombres más frecuentes vale lo mismo que he hecho antes nombres más frecuentes a veces a veces y nombres más comunes acabas antes buscando en google en el ine que en el propio ine entonces dice todos los nombres con frecuencia igual o mayor a 20 personas me lo bajo me lo descargo es una hoja de cálculo en excel me lo abro con libreoffice y si os fijáis tengo lo mismo que tenía antes pero sobre la población de españa pero sabes que no lo sé esto lo podéis utilizar y borrar es la primera fila si lo podéis meter en la base de datos y podéis hacer el ejercicio igual que lo hemos hecho antes pero para averiguar esto ya esta línea quiero decir para decirme cuál son los nombres más frecuentes ya está el ine pero igual coges la base de datos de un colega y le dices oye sabes de tus clientes cuáles son los nombres que más se repiten igual tu colega te dice me post no pues no lo sé pues me gustaría de saberlo entonces lo que os quiero decir es que si no tenéis una base de datos real sobre la que trabajar podéis trabajar sobre la de línea pero yo creo porque claro haces una gráfica sobre esto y acabas el ejercicio de firma y que por media igual pero si haces el ejercicio sobre datos que te importen un poco esos datos probablemente los resultados que tengas pues te llenen más te digamos te sirvan más para cualquier cosa por eso os digo que mi recomendación es que trabajéis con datos reales pero si por lo que sea no queréis os metéis en el ine y creéis ahí miles de hojas de excel para hacer ejercicios de conectar a base de datos y muestras gráficas bueno hoy hay varias cosas que quiero ver vamos a ver algunas cosas nuevas también vamos estar trabajando con la aplicación de cosas que hemos visto en días anteriores por ejemplo para un ejercicio de maxim learning que tenemos pendiente hace unos cuantos días y que de hecho lo describí pero no hemos llegado a hacerlo porque nos dio tiempo en la clase anterior con lo cual vamos a hacerlo hoy antes de ello retomando la clase por donde la dejamos anteriormente quiero deciros que existe una cosa dentro de la librería de ploteo voy a ir el curso de payton voy a abrir realmente y dell [Música] y el 38 vale voy a abrir últimos archivos avanzar aquí voy a abrir esto el mar para acordaros trabajar con base de datos y a continuación lo que voy a hacer es pulsar f5 para comprobar qué a ver momento para comprobar que salía la gráfica con la información que queremos o la gráfica donde estás perdón esto es que el otro día lo hicimos en clase o lo hice yo después en lo que dice es que en lugar de plot lo que hice es que utilice este comando que es 6 fit que lo que hace es en lugar de mostrarme el ploteo por pantalla lo que hace es guardarlo a un archivo jpg png en el en la misma carpeta donde esté el archivo y ahí básicamente nos encontramos lo mismo que hicimos el otro día pero guardado a un archivo png quiero deciros que está este cambio en lugar de plot a safe y lo hice como anticipo de una cosa que vamos a estar trabajando en las próximas sesiones no todavía porque para hoy ya tenemos trabajo pero qué es el cómo utilizar payton en este caso y la librería sigue sin salir el plot aparecerá para realizar otros tipos de aplicaciones que no sean aplicaciones de escritorio sino por ejemplo aplicaciones web y es que en todo momento hasta hasta el momento hemos estado trabajando en aplicaciones de escritorio es decir aplicaciones que se ejecutan directamente en nuestro escritorio pero quiero que también seáis conscientes de que podemos utilizar el lenguaje de programación python para crear aplicaciones en la web pero antes de ello antes de continuar con esto quiero enseñaros una utilidad que es el múltiple plot múltiple plot es una utilidad que tienen las aplicaciones dentro de esta librería para mostrar varias gráficas en una sola ventana para qué me serviría esto bueno pues el otro día hicimos proyectos en los que cada proyecto tenía una gráfica pero si yo quería tener varias gráficas a la vez tenía que abrir varios proyectos a la vez si yo busco por ejemplo control panel para el control aplicado a lo que sea control panel analytics por ejemplo o big data o data science me da igual yo encontraré que los paneles de control realmente se parecen mucho a esto son paneles del control donde en una sola ventana yo puedo obtener múltiples gráficas a la vez para el big data puedo poner data science vale control panel aquí no está apareciendo exactamente lo que estoy buscando pero lo que veíamos antes con big data vale son paneles de control donde pues en un solo panel obtengo diferentes había abierto esta diferentes gráficas simplemente lo que quería hacer lo que quería hacer era demostraros como esto es razonablemente sencillo de hacer con la librería que estamos utilizando así que a continuación lo que voy a hacer es hacer lo siguiente voy a buscar payton matt pelot lift múltiple lots vale y ahora voy a buscar algún ejemplo concreto porque hay diferentes formas de maquetar diferentes plots en una misma ventana pero voy a buscar una metodología concreta que trabaja con matrices bidimensionales que creo que es la metodología más sencilla de utilizar y de entender luego porque hay una metodología más sencilla por ejemplo que es apilar en vertical y está muy bien y es muy sencilla pero claro cuando quiero algo más complejo cuando quiero algo más que simplemente meter gráficas en vertical me doy cuenta de que eso no me lleva a ninguna parte entonces por eso quiero la de matrices bidimensionales para que podáis ver vale bien vamos a ver esto es un signo del clot y esto por ejemplo es la que no quiero porque si os fijáis aquí lo que está haciendo esto de hecho esto de hecho el momento un parking entonces voy a crear un nuevo archivo voy a cargar esta librería voy a vuestro voy a guardar en curso de payton múltiple 1 pero esta no es la que quiero ejecutó xy por qué me hará falta vale voy a esto ok esta esta es la que quiero vale espera esta es la calle a ver si todo está bien x es notify vale x es igual a esto y segura esto vale y creo que he visto que me hacía falta meter un pico vamos a verlo qué está pasando qué está pasando qué está pasando porque no me está mostrando ninguna gráfica muy bien estos de antes es la ejecución de antes la última es esta de aquí pero pero hay algo por lo que no está saliendo vale voy a cerrar del todo python igual reinicio la máquina un momento no tendría por qué pero quiero decir que no tendría por qué ser eso pero de broward gran punto y punto ok vaya payton múltiples blogs momento sitio por sitio voy a hacer una cosa sup lots el escritorio y éste no bueno voy a abrir es que este son todas las demos a la vez y ya todas las vemos la vez lo que va a hacer es aquí pellet eso eso es lo que decías y ok ok ok ok ok ok ok vale efe 5 vamos a verlo vale ok aquí lo tenemos entonces ahí estáis fijando aparecen cuatro blogs a la vez pero dentro de que aparecen cuatro cursos a la vez momento vale dentro de que aparecen cuatro plots si os fijáis en este caso tengo el set hay tel permitidme cargármelos sep titles voy a dejar solo 1 y me lo voy a poner comentado para poder recuperarlo mas adelante pero si yo por ejemplo aquí quisiera ver el lugar de cuatro quisiera ver nueve mucho me da igual teniendo en cuenta que es una rejilla evidentemente yo lo que podría hacer es lo siguiente estos cuatro los convierto en 8 y luego evidentemente le pongo un noveno y entonces hago lo siguiente 0001 02 esto es como contar en binario pues contar entrenar yo entonces 10 11 12 20 21 22 y de esta forma creo que he hecho si pulso de f5 es crear aquí su blog 33 aquí vino el número y entonces ahora fijaos que de esta forma sencilla yo tengo en este caso 93 por 39 plots dentro de un mismo panel con esto lo que os quiero decir es que si ahora por ejemplo voy a hacer otra demo y ya pasó la ejercicio siguiente porque creo que ya lo pilláis pero si yo quiero hacer por ejemplo 4 x 3 pues yo vengo aquí 4 x 3 voy a agrupar para que sea más fácil de ver uy perdón voy a agrupar 3 no no no realmente no realmente no porque esta es la equis entonces y ahora 3 3 3 0 1 2 3 guardo si no me equivocado dimensión que creo que no pero que tengo pues mira así que me equivocaba dimensión vaya porque entonces ahora esto es 3,4 me cargo este de aquí copio propio y copio esto es 0 1 2 3 0 1 2 3 0 1 2 3 f5 y ahora si tengo los cuatro por tres que quería sobre todo tened en cuenta que estoy hablando de un panel de control cuando habla de un panel de control hablo de en un momento dado poder maximizar la aplicación y poder ver las gráficas que necesite de esta forma vale el tema de paneles de control evidentemente es todo un es todo una ciencia de hecho incluso hay empresas que se dedican específicamente a hacer paneles de control para empresas por ejemplo hay una que se llama zeus vision yo soy un montón de programas de televisión que usan este tipo de pantallas vamos a ver en imágenes para ver un poco lo que hacen y hacen estas cosas de aquí vale hacen instalan pantallas en oficinas cuando te digo pantalla es con una pantalla que te compras en el carrefour pero evidentemente ellos lo que trabajan no es el hardware es el software vale es esta especie de paneles de control donde en un solo panel puedes ver multitud de información que en un momento dado te puede servir para prácticamente lo que quieras entonces desde el punto de vista de datos ayer si el big data hay una parte del trabajo que es machacar los datos pero hay otra parte del trabajo que es visualizar la información es decir transformar esa información a algo visual que en algún momento dado puedas analizar de un solo golpe la librería tiene soporte para múltiples gráficas es algo que no había comentado pero de hecho en la galería esta galería hecho en las primeras las primeras entradas la galería está aquí vale es por ejemplo en este caso lo que está buscando es algo como esto donde no ya compare el lado al lado sino pueda comparar múltiples gráficas en una sola gráfica entonces sí que efectivamente ya tenemos el concepto de el sub plot para la de arriba y la de abajo pero tenemos también la posibilidad de introducir varias gráficas tenemos varias demostraciones un momento que vamos a ver por ejemplo esta sería otra de las demostraciones donde no sólo tenemos por que ver una sola línea en cada una de las gráficas sino que podrás ver que hay un montón de demostraciones donde podemos plantear diferentes series de datos en una misma gráfica evidentemente para su comparación porque en este caso estas gráficas están configuradas según este ejemplo para compartir el eje y lo cual quiere decir que la magnitud es comparable pero claro una cosa es ver una gráfica al avalado que otra cosa es ver directamente las gráficas en el sitio luego también te recuerdo un momento correcto pero en este caso en este caso había por aquí había por aquí una instrucción que ahora mismo no me acuerdo cuál de éstas es que si aquí todo estás viendo 10 y menos 1 y aquí no estás viendo una escala diferente es porque la librería al alinear efectivamente lo que están desea hacer que la escala sea comparable y puede y puede hacerse para desvincular pero no te quiero decir que en cualquier momento siempre es comparable sino que en este ejercicio completo o sea concreto es comparable y ahora me has preguntado esto si te fijas en olvido lo que voy a decir pero no ya lo he recordado muchas veces lo que ocurre cuando trabajamos con múltiples gráficas en una misma es que los resultados tienden a confundirse en ese caso cuando debe confundirse quiero decir que hay veces que ver varias gráficas especialmente cuando se superponen en un mismo gráfico no puedes ver bien el límite entre una y otra en ese caso quiero decirte más ejemplos por aquí quiero decirte quiero recordarte que quiero recordarte que hay una gráfica con una familia de gráficas que son las gráficas 3d las gráficas 3d ya lo supongo no supongo completamente las gráficas 3d por las personas que sobre todo os dedicáis a trabajar con aquí por ejemplo aquí esto es lo que te voy a enseñar os dedicáis a trabajar con mi colección de datos la soléis ver como un capricho visual vale como dejamos ahí candy lo que se llama en inglés hay candy que es golosina visual pero que realmente no aporta valor sobre los datos vale entonces quiero decirte que soy consciente de eso y quiero decirte que estoy plenamente de acuerdo de esto pues con eso y si te digo esto es precisamente porque hay ocasiones en las que usar gráficos 3d usar la tercera dimensión te viene bien para despejar un poco las gráficas y para ponerlas del mejor tenemos gráficas de barras bidimensionales mayores me ha ido el cursor un momento tenemos gráficas de cintas tenemos gráficas de columnas tenemos gráficas de hill schering que es como que te hace una especie de terreno entonces tenemos una serie de realidades gráficas que no te estoy diciendo que uses en si eso sí sí sí correcto y qué pero también te digo y esto de hecho ahora es mejor que yo que sí que hay veces que el trabajo que haces de recopilación de datos y presentación de resultados se hace en un soporte digital interactivo de tal forma que le puedes decir a tu cliente a tu jefe oa quien sea oye mira mete el ratón encima de la gráfica y verás que se destaca la que tú quieres ver pero también te digo que hay otras muchas veces en las que el informe que presentas o lo haces en papel solo tienes que presentar en papel o en pdf y se pierde esa interactividad o la persona a la que es lo presentas es una persona digamos las personas ante las cuales estas informaciones de personas mayores que no tienen tanta pericia para meter un ratón encima de una gráfica o si lo meten se lían con lo cual quiero decirte que soy consciente de lo que tú dices mira yo por ejemplo para que te hagas la idea yo soy muy usuario de la aplicación de google de google trends entonces yo no sé dime algo que te gustaría buscar mira sabes que el típico coronavirus entonces por ejemplo pues yo busco coronavirus busco en todo el mundo y por ejemplo no sé virus o así de repente y aparecen las gráficas entonces yo soy consciente de lo que tú dices de que hay gráficas interactivas que tú vas pasando el ratón y te hacen un highlight y pintas y te dejan un marcador y todo esto o sea y aparte esto que estás viendo aquí realmente que lo sepas para que tengas la información o sea los gráficos que usa google trends para su aplicación son los google hearts que creo que en alguna ocasión los he mostrado en pantalla y yo los google charts por ejemplo en este curso no los puedo enseñar porque es una librería para javascript pero en los cursos que oí de javascript enseño esta librería y fíjate lo que tú dices que te acercas y te saca el dato y todo eso o sea que estoy de acuerdo contigo en el sentido de que existen estas gráficas y son interactivas y todo esto pero claro pero no siempre se pueden aplicar para para cualquier prestación de datos entonces dicho esto

vamos a ver nosotros lo que hemos estado haciendo hasta ahora consiste en trabajar con un enfoque de programación muy determinista es decir yo le tengo que decir a la máquina lo que la máquina tiene que hacer y la máquina tiene que hacer exactamente lo que yo le diga el que tiene que hacer esto ha sido así hasta ahora con lo que hemos hecho en python y con realmente con cómo se programan en prácticamente cualquier lenguaje de programación porque todos los lenguajes al final son prácticamente iguales entonces machine learning no es un lenguaje diferente de programación es más bien un paradigma es más bien una filosofía de programación mediante el maxxi learning yo no le digo al ordenador lo que tiene que hacer mediante el mass in learning yo lo que hago es decirle al ordenador en base a una serie de variables que yo le alimento el ordenador debe buscar cuál es la mejor alternativa el ordenador debe en primer lugar entrenarse o mejor dicho yo lo debo entrenar y una vez que el ordenador ha sido el programa ha sido debidamente entrenado es cuando puede tomar decisiones por sí mismo basil learning no es un milagro las máquinas aprenden de la misma forma que los seres humanos aprenden y tuvo un ser humano recién nacido de repente no le puedes decir hace cuestiones diferenciales porque es humano de iraola perdón acaba de nacer sabe tener un poco de tiempo o sea entrena me y yo sabré hacer lo que tú me pides de la misma forma a un ser humano que no le has enseñado a desarrollar una tarea de repente no le puedes exigir que haga una tarea porque no la va a hacer por arte de magia entonces machine learning que era muy bonito pero muchas veces no nos damos cuenta de que antes de un maxim learning tiene que haber un machine training que es entrenar a la máquina para que sepa reconocer una serie de patrones entonces dicho esto vamos a hacer el ejercicio que el otro día no nos dio tiempo es un ejercicio complejo es un ejercicio duro pero es un ejercicio muy bonito en el que yo no le voy a decir a la máquina las conclusiones las que tiene que llegar yo lo que voy a hacer es dejarle a la máquina que llegue a sus propias conclusiones vamos a hacer un ejercicio de visión artificial que consiste en lo siguiente consiste en una imagen de internet la que queramos consiste en comparar esa imagen contra una serie de marcadores y consiste los marcadores ahora veréis pueden ser muchos pero de hecho esto que voy a hacer que lo sepas es como el primer paso de una serie de redes neuronales de aprendizaje profundo vale voy a hacer el primer paso de esa red y lo voy a comparar contra cuatro marcadores es el ejercicio típico de inteligencia artificial con los marcadores que quieras que es un marcador horizontal vertical diagonal hacia un lado diagonal hacia otro entonces si yo cojo una cara de firme un modelo una modelo una actriz o un actor lo que sea de alguien un día me dijeron una clase de ana obregón valiente que se pensarlo un poco y me contáis a bien venga suele ser una opción bastante frecuente en los cursos pero nunca pensé que diría esto pero así que no se tiene algo natalie portman has dicho pues sí que sé mira sabes que voy a poner actriz ya ver qué sale entonces pongo actriz vale y mira scarlett johansson pues a la scarlett johansson mueve la tabla vale yo lo que voy a hacer como os digo es comparar estos marcadores horizontal vertical diagonal 1 y diagonal 2 contra esta imagen y yo ahora mismo no sé lo que va a salir es decir vosotros que me diréis que esta imagen tendrá muchos horizontales muchos verticales muchos diagonales uno muchos diagonales otros pues no lo sé o sea directamente no lo sé lo que voy a hacer es que la máquina visualice esta cara y luego visualice otras caras y llegue a sus propias conclusiones por tanto el cambio de paradigma es grande porque yo de hecho incluso llegado un momento yo no sé cuál es el número de verticales o diagonales que tiene la imagen lo gestionará el programa automáticamente voy a buscar una cara un poquito más estándar pero sabes qué standard face a estas hay caras de hecho son muy estándares una cara sé vamos a la imagen guardo esta imagen me la guardo el escritorio y lo que voy a hacer también lo que voy a hacer también es editar esta imagen por ejemplo con él para que tenga unos valores conocidos digamos vamos allá voy a recortar esta imagen voy a recortar esta imagen vale y yo que sé y luego voy a poner un fondo pues no sé es de este color este color de este color este color y lo voy a rellenar más o menos y lo voy a colapsar y lo voy a exportar curso de payton voy a crear una carpeta llamada caras porque luego igual creó varias y llamó a esto cada uno jpg a este archivo cuando tiene me voy a tamaño de la imagen escalar la imagen tiene 38 7 por 38 7 voy a hacer 256 por 256 es un tamaño pequeño lo sé pero también os digo que el ejercicio que puede hacer ahora va a ser computacionalmente exigente por eso casi mejor trabajo con una imagen pequeña bien recuperamos algunos de los ejercicios que hemos hecho anteriormente esto es el momento lo puedo cerrar y recordamos que hemos hecho anteriormente ejercicios mediante los cuales gráfica recorrer píxels imagen punto safe las grises bueno hola vale pues con la imagen punto 60 entonces vamos a ver ahora copio archivo nuevo pego cargamos dentro del curso de payton la carpeta caras el archivo cara 1 punto jpg esto lo guardo en python 72 cada uno y vamos a comprobar qué guardo cada uno guardado punto jpg f5 si todo ha ido bien me voy a cada uno y cada uno es esto mientras que cada uno guardado es esto de aquí esto es lo mismo que hicimos la otra vez aplicado a nuestro ejercicio esto ahora lo dejaré evidentemente porque en este caso no quiero hacer una escala de grises pero evidentemente esto me permite para comprobar que tengo un control píxel a píxel ahora a continuación lo que voy a hacer es generar menos voy a generar yo mismo una serie de marcadores para visión artificial podemos buscar que de hecho artificial visión inteligente markers me voy a por ejemplo esto no tanto por ejemplo podéis ver cualquier artículo vale veréis que el uso está súper efe en redes neuronales simple total si veis artículos con que describan metodologías concretas veréis que algunos usando estas cuatro otros usan 16 vale entonces en una red neuronal cada una de las marcas que voy a utilizar es una neurona entonces digamos que voy a tener una neurona en el cerebro que se encarga de detectar líneas horizontales una neurona en el cerebro que se encarga de detectar líneas verticales y otras dos neuronas que se encargan de detectar líneas diagonales vale hasta aquí más o menos me cogéis el concepto vale pues a continuación habéis dicho algo entonces y ahora me voy al gym y voy a crear y básicamente una serie de píxeles voy a crear un archivo de 8 x 8 píxeles que sea pequeñito es importante este archivo lo voy a rellenar de color blanco vale y tengo en este caso vamos a ver lo exportó ing mejor y lo llamo horizontal punto prg ahora lo giro y a esto lo llamo vertical punto png y ahora voy a hacer una capa nueva esto creo un área de selección diagonal y la pinto de blanco difuminar los bordes radio 1 bueno abajo radio 1 déjame que vuelva a seleccionar para asegurarme que tiene los bordes la verdad es que no la verdad es que estoy pensando que no quiero bordes difuminados los quiero duros tiro un difuminado pero bueno y esto con vino es con vino y esto me lo exportó como diagonal 1 y lo volteó en horizontal y ahora esto se llama diagonal 2 hay una cosa muy divertida y es que cuando generalmente en este tipo de ejercicios de visión artificial inteligencia artificial contacto con cualquier otro lenguaje yo digo que usando estos marcadores horizontal vertical diagonal y tal vamos a distinguir por ejemplo una cara la gente dice imposible sea cómo vas a poder con con horizontales verticales diagonales distinguir una cara pero ahora veréis que si de hecho esto nos llevará un poco a entender mejor cómo funciona el cerebro humano y probablemente os llevaréis una sorpresa entonces a continuación vamos a empezar por algo sencillo de hecho probablemente la segunda parte de este ejercicio por tiempo más que nada os la encarga de para que la raíz en casa pero a continuación ahora lo que voy a hacer es extender este ejercicio y decir imagen horizontal vamos a empezar con la sencilla es igual a emails punto open d horizontal png ahora píxeles horizontal es igual a imagen horizontal y en este caso como hemos visto aquí anteriormente yo lo que tengo es en píxeles horizontal cargada una pequeña matriz de 8 x 8 píxeles creo que eran 8 siguieran 81 64 mientras que aquí en imagen en píxeles tengo cargada una matriz con 256 por 256 píxeles qué es lo que voy a hacer a continuación lo que voy a hacer a continuación va a ser la matriz de 1 contra la matriz de otro y voy a comparar es decir vamos a ver esto lo voy a quitar esto y ahora digo fuera que siempre he hecho vale por anchura en rage de 0 a 8 porque es la anchura de esa muestra de horizontal o diagonal o vertical o lo que queráis por altura en range de 0 a 8 creo recordar que antes de empezar este ejercicio se ha preguntado si se encontraba bien la pregunta es cómo os encontráis ahora al ver cuatro foros anidados es decir generalmente cuando llegamos a este punto cuando encontramos una anidación de xe y cualquier mente humana puede decir que segrega voy a agarrar la horizontal y en vertical pero cuando encontramos cuatro foros anidados es cuando el cerebro se empieza a explotar un poco porque empezamos a decir espera exactamente qué es lo que voy a hacer aquí vale entonces lo que voy a hacer aquí lo voy a poner comentado lo voy a comentar algo es lo que haremos para que lo entendáis un poco mejor voy a asumir que cojo el pixel que está en cero es decir para que me entendáis lo voy a hacer sencillo lo que voy a hacer es abrir curso de payton caras voy a abrir horizontal o vertical me da igual el que sea lo voy a poner hola a mover no mover esto mujer capaz no voy a poner la h arriba y voy a jugar con los píxeles vale de momento más adelante ese ese cuádruple bucles for nos sirve para acoger esta esta muestra y empezar a comparar la elemento a elemento pero ahora para empezar para hacer lo más sencillo vale para que el ejercicio empieces en lo más sencillo del mundo voy a imaginarme que solo existe esto solo existe ese cuadrito de color crema de ahí y solo existe este cuadrito blanco y negro de ahí ok entonces y lo que hago es lo siguiente voy a recorrer los primeros 8 píxeles de la imagen x x en rage de 0 a 8 los primeros 8 píxeles fort y en reims de 0 a 8 a continuación lo que voy a hacer es lo siguiente lo que voy a hacer es decirle al sistema que quiero print el resultado es dos puntos más a ver si no me da mucho problema de esta operación vamos a ver pixeles de 0 no verdad píxeles de x y menos píxeles horizontales de x como y insisto es todavía bueno es 07 técnicamente porque se empieza en cero vamos a ver a ver si no verá ningún error de encadenar números con textos y todo esto y si no lo convierte oa estrenar como te decía entonces el argumento debe ser una secuencia de longitud 2 no sé qué estás diciendo pero voy a hacer str vale el argumento debe ser de longitud 2 ah ah ah no espérate es para tres karate vale fuera fuera vale pues mira sabes qué menos píxeles horizontal de longitud 2 vamos a ver sí sí sí perdón perdón perdón vale sí claro es que por ejemplo vale tengo que ver el color rojo porque de cada pixel acordamos que había cuatro piezas de información y al canal rojo el canal verde el canal azul y el canal transparencia vale esto es píxeles y x y de cero y lo que nos da es esto son cuatro valores donde si os fijáis los menos 76 parece que equivalen a un color y los 179 parece que equivalen a otro color acordaos que el horizontal vale ésta está habilitado de esta forma yo qué es lo que quiero a continuación lo que quiero es intentar buscar con este píxel formas verticales de la siguiente forma si yo cojo este marcador de aquí voy a si yo cojo este marcador de aquí y yo lo muevo por ejemplo aquí y yo lo que hago en este caso es decirle al sistema vamos a verlo no quiero funcionar momento que lo quiero fusionar momento sol a pagar diferencia empezará a aparecer esto pero si yo ahí por ejemplo solapar pero si yo por ejemplo lo que hago es previamente esta capa duplicarla y usar un filtro de hallar bordes filtro detectar bordes sabéis a qué filtro me refiero a verlas pero el clásico filtro mira sabes qué voy a abrir un momentín photoshop porque en photoshop lo tengo más localizado caras para uno 6 filtro interpretar no estilizar al árbol de esa y esto vale y tengo esto por ejemplo tengo el clásico filtro de ayer bordes que luego lo puedo trabajar con de saturación y luego lo puedo mirar me va a venir bien y todo y luego lo puedo brillo contraste vamos allá esto me lo guardo para unos bordes y ahora en el limbo aquí mismo realmente cojo vertical cojo vertical se ha quedado frito para efe cojo vertical lo pongo ahí y ahora les damos cuenta qué es lo que va a ocurrir cuando yo por ejemplo cojo ese color negro y lo aclaro o lo aclaro o lo multiplicó vamos a ver para explicarlo ahí está fijaos qué es lo que ocurre cuando cojo esa imagen digamos y la paso por ahí por el color blanco lo que ocurre es que la imagen aparece digamos como diría yo negra pero qué es lo que ocurre cuando la pongo en una línea vertical esa imagen prácticamente desaparece qué es lo que ocurre por ejemplo si lo pongo ahí la imagen desaparece pero qué es lo que ocurre cuando la pongo por ejemplo en una en un borde que es horizontal no desaparece tanto entonces estos marcadores me sirven para irlos comparando contra la imagen y para decirle a la imagen que básicamente lo que quiero es que vaya restando el marcador contra la imagen de tal forma que cuando al restar se quede la imagen original es que me quedo como estaba pero cuando al restar disminuya la intensidad de la imagen es que ahí he encontrado un marcador esa es la filosofía de cómo funciona insisto una estrategia de presión artificial hay muchas varios enseñando hoy una pero tened en cuenta que tenemos cuatro marcas lo que va a hacer es que voy a simular un pequeño cerebro digamos animal donde una neurona únicamente ve líneas horizontales otra neurona o de sólo nueve líneas verticales estamos ahora de momento la primera de las neuronas con esto si os habéis fijado lo que he utilizado es una operación de diferencia entonces con la operación de diferencia lo que estoy haciendo es restar una resta aritmética vale restar el valor de un píxel al valor de otros lo que voy a hacer en este caso lo que voy a hacer a continuación es indicarle al sistema cómo debe proceder ya qué es lo que debe entender cuando encuentre que hay una coincidencia cuando el sistema encuentra una coincidencia lo que veis por ejemplo píntame lo de un color concreto por ejemplo píntame lo de rojo pintado de verde para que yo pueda ver que has encontrado algo ahí pero claro ahora tengo que hacer lo siguiente para que entendáis lo que tengo que hacer yo lo que he hecho yo lo que he hecho es ese marcador y lo he comparado allá arriba lo he comparado allá arriba contra el pixel en 0 ahora tengo que hacer así y luego así y luego así y luego así y luego así y luego así lo veis o sea lo que tengo que hacer es ir moviendo ese cabezal para ir buscando coincidencias es para que lo he quitado de diferencia para ir buscando coincidencias en el momento en el que vale en el momento en el que esté trabajando correctamente vale entonces ahora puedo trabajar de esta forma puedo trabajar con blanco y negro puedo trabajar con transparencia vale puedo trabajar como necesite entonces ahora de momento lo que voy a hacer es no guardar voy a editar mis marcas descartar cambios entonces voy a cargar las cuatro marcas y voy a hacerlas transparentes no se ven pero están allí rompan pam pam pam cappa donde esta transparencia el color alfano está por qué qué a la gorra [Música] ahora sí esto exportó dentro de vertical dame un segundo pero la imagen esto lo exportó a horizontal yo creo que con esto ya tenemos pasado a trabajar vale ahora a continuación voy a realizar esto vamos a ver vamos a intentar entender lo que vamos a hacer antes de hacerlo porque los cálculos van a ser duros a el vertical voy a ese vertical y voy a hacer una diferencia una diferencia sobre estos píxeles es la diferencia e invertir qué es lo que ocurrirá cuando yo por ejemplo ponga esa muestra allá arriba a la izquierda por lo que ocurrirá es que los píxeles serán negros pero qué es lo que ocurrirá cuando yo ponga esta muestra por aquí pues que los píxeles ya no serán negros es lo que quiero en este caso entonces voy a venir aquí alguien voy a esta muestra de colores voy a invertirlo y la sobre escribo 90 de exportar como vertical y voy a ver que me da recordáis que estamos haciendo una resta esto sí es esta es la imagen original esta es la imagen sobre la cual estoy restando voy a vertical vertical pixeles vertical píxeles vertical píxeles vertical si píxeles vertical de x coma de 3 no es igual a cero en ese caso esto de aquí vamos a verlo efe 5 vale que ha pasado si os fijáis tengo la mitad de los números tengo la mitad de resultados porque qué hace esta línea que debemos entender recordamos que antes estaba viendo el canal rojo el canal rojo es el índice 0 pero ahora estoy cogiendo el inicio 3 que es el canal de transparencia 0 es rojo 1 es verde 2 es azul 3 es transparencia así que de esta forma de esta forma ahora a continuación lo que quiero es decir solo válida me si realmente el pixel en el que estás tiene color vale me está dando menos 76 eso quiere decir que bueno no es muy buen rollo evidentemente vamos a ahora hacer lo siguiente de 6 lo cual equivale a [Música] está por debajo de cero evidentemente hacer lo siguiente valoro es igual a cero dif esto de aquí es menor pero en ese caso valor es igual a cero en caso contrario valor es igual a este dato de aquí así que ahora sácame valor esto qué es lo que va a hacer lo que va a hacer es evitar que salgan números negativos yo ahora vengo por aquí pulso f5 y me sale todo 0 vale porque le he dicho que lo quería todo a 0 para continuación lo que voy a hacer es repasar esto mismo con todo el resto de la imagen como si repaso esto mismo por todo el resto de la imagen van a salir 256 por 256 veces más que estos ceros o sea imagínate lo que va a salir lo que voy a hacer es resumir todo esto en un solo número así que zuma es igual a 0 zuma es más igual a valor y al final del todo print la suma es esto fuera y así de esta forma lo que voy a conseguir cuidado lo que voy a conseguir es resumirlo todo a un solo valor la suma es cero ok hasta el momento vale no me digáis que sí porque realmente no porque yo entiendo que estáis mirando como diciendo bien no me estoy entrenando muy bien de lo que estaba ocurriendo porque si ya lo de cambiar el color gris me costó un poco pues esto más todavía vale lo sé pero de momento confía en mí y veréis cómo al final encontraréis sentido este ejercicio ahora lo que voy a hacer es recuperar los dos foros estos de aquí y digo por super equis tim raines 02 56 por super y en range de 0 a 256 lo estoy poniendo como super xy super y para que entendáis que están jerárquicamente por encima y entonces ahora vengo y digo que los píxeles píxeles vertical píxels es super x mas x super y más y super x mas x super y más y más y ahora con este cuádruple bucle for lo que estoy haciendo es lo que os decía antes es decir un bucle ford hay ahora siguiente otro bucle foro siguiente otro bucle foro siguiente otro bucle for los dos teniendo es correrlo en horizontal y luego correrlo en vertical así que con esto ahora me va a seguir dando un montón de números f 5 suma 0 vamos a verlo suma 0 vale ahora voy a tocar el fresón index auro frames perdón es que es de 0 a los 55 porque el 0 cuenta como un número se ve que hay 256 dicho no existe el pixel 256 voy a hacer una cosa voy a cargarme de esto de momento y ya luego lo volveremos a activar vamos allá vale menos mil 596 pero si todo va bien en un momento dado en un momento dado qué pasa vamos a ver pemex index out of friends claro necesito lo siguiente pixel str de super x coma str super y porque así me voy enterando de lo que está ocurriendo quiero decir con esto que se hago así pixel 0 tal veis que así me voy enterando porque pixel va vale a ver dónde está el error para hacer que vaya a dar el error en 256 tal cual parece que efe al 24 9 claro claro claro claro 249 porque no puedo decir al programa no puedo decir al programa que me llevó este pixel aquí al borde y claro le pregunto qué es lo que hay por fuera debe ser 256 menos 8 a 2 558 el calculador hasta para esto de los 55 menos 8 son 24 7 y los 47 ejecutó damos cuenta que estamos todavía por el pixel 1 ciento y pico eso tiene que llegar hasta el final bueno yo lo que quiero es averiguar ver en pantalla cuando en algún momento este valor es menor que mil 596 perdón menor no mayor pero claro es que voy todavía por el pixel 3 de 256 entonces lo que voy a hacer ahora es muy sencillo como ya sabéis que payton no es un lenguaje de programación especialmente rápido pero la terminal lo ralentiza más todavía lo que voy a hacer es que sólo imprime esto el valor es mayor que menos 1.590 o sea ahórrate todos los falsos positivos que ya sé que no van a salir bien y de esa forma no pierdo tanto tiempo sacando de información por pantalla efe 5 sí qué el valor es mayor qué menos por esto sí el valor es mayor el valor es mayor a ver valoro y habrá mayor cajero por ejemplo no está pillando el mayor de un negativo mira ya ha acabado y no se está ahora mayor que ser o no hay ninguno vale – 1590 5 será posible por qué valor es mayor que – 1596 es un valor menor que menos mil quinientos noventa estamos de acuerdo en esto ya voy a ponerme los 150 estamos bueno hay un método que no está mal que consiste en si el absoluto del valor de la fruta no me va a pillar es menor o sea al revés le damos la vuelta que 1.590 el absoluto no me lo va a pillar porque voy a tener que seguir curioso menor y la suma es a bs zuma efe cinco vales si el valor es menor que mil 590 y el valor es mil 596 no sé estoy citando un poco estoy filmando un poco por qué mil 596 no es menor que 1.500 90 por tanto esto debería dar falso o no lo estoy viendo correctamente [Música] mirad en este caso voy a parar ahora voy a volver a ejecutar la atención y fijaos que me está encontrando directamente en 18 en 1920 me estaba encontrando como veis por ahí los píxeles que quedan positivo ok ahora yo quiero un sexo más pequeño yo quiero un sexual de 1500 para que solo me encuentre unos pocos píxeles guardamos y nos fijamos por ahí de que el sistema está encontrando por ahí pero 1100 quiero menos todavía quiero 1100 allí por ejemplo yo creo que ahora cuando acabe esa serie y pico 800 vamos a forzar los 700 a ver hasta dónde llegamos 93 24 100 101 ok ahora ya está estos son los píxeles que el programa ha encontrado que coinciden con la marca vertical pero yo no tengo ni idea es decir que me tengo que fiar del sistema lo que sí que voy a hacer evidentemente es sacar algún tipo de diagnóstico visual para confirmar que realmente los píxeles son los verticales y como os podéis imaginar de esto que he hecho para los horizontales o por otras verticales y luego lo tengo que multiplicar por cuatro para hacerlo para horizontales diagonales y diagonales 2 para esto lo que quiero hacer ahora es decirle a la imagen que quiero sobreescribir es decir quiero pues no sé pintar algo entonces por ejemplo voy a crear por aquí una imagen llamada resultado crea una imagen llamada el resultado que es de 256 por 256 blanco de blanco ésta se va a llamar resultado y ahora en python quiero hacer lo siguiente imagen resultado es igual al resultado punto png pixeles resultado es igual a imagen resultado y ahora lo que quiero es lo siguiente els pixeles resultado de super x + x y super y más y es igual a 0 0 0 en caso contrario píxeles resultado 2 552 55.255 imagen resultado punto safe y lo quiero guardar en caras resultado punto png de tal forma que básicamente esto da con que va a consistir en que en lugar de ver un montón de números que yo no entiendo qué es lo que está ocurriendo en esos números lo que voy a hacer es ver algo en una imagen quito este print queréis cruzar los dedos y hacer un redoble de tambores es un buen momento para hacerlo de hecho voy a un segundo que voy a entender el flexo pero vale pues voy a ejecutar y el programa pues bueno no tardará mucho cálculo y mente ya está ya acabado me voy a un resultado y el resultado veo esto en resultado lo que obtengo es que mediante estos registros el sistema está encontrando que ahí había píxeles verticales y ahora era bien la prueba de fuego vamos a ver si esto es cierto o no lo es para ver si esto es cierto o no me voy por ejemplo a photoshop encima de esta imagen suelto el resultado le bajo la transparencia y empiezo a observar vale y veo bueno esto no sé por qué lo ha cogido la verdad es tampoco pero veo que aquí sí que ha hecho bien en detectar los píxeles verticales de la nariz vamos a volver a verlo ya cuando veis esto probablemente está encontrando los de al lado quiero decir que pero esto no me cuadran si te digo la verdad y estos de aquí y debería haberlos encontrado vale lo que puedo hacer es probar diferentes iteraciones con diferentes valores por ejemplo lo hago con mil y ahora a continuación me voy a esa imagen busco resultado y veo que ahora por ejemplo empieza a encontrar una serie más de cosas por ejemplo veo que la nariz para efe que la están encontrando perfectamente ahora a continuación insisto esto no está acabado pero lo que quiero ver es que el programa está encontrando ya una serie de formas el momento un momento que repasó el programa zuma es igual a 0 su valor y un segundo esto creo que sobra pero por si acaso y este es el resultado horizontal por cierto que no sé si se me va a crear automáticamente esa imagen lo divertido dime lo que voy a hacer a continuación yo de momento lo que he hecho es simplemente marcarlo en negro en la pantalla para ver si está detectando algo también te digo que lo que necesito hacer en definitiva esto fuera fuera cada uno vale lo que necesito hacer en definitiva mejorar esto es número píxeles estos son verticales es igual a cero número píxeles horizontales es igual a 0 número píxeles diagonales 1 es igual a 0 y número de píxeles diagonales 2 es igual a cero con esto lo que hago si esto es cierto en ese caso número de píxeles verticales más igual 1 con lo cual yo al final lo que quiero es print el número de píxeles verticales es str número píxeles verticales yo lo que quiero realmente al final atrás es esto sacar el número de verticales el número de horizontales el número de diagonales y sacar una proporción y que tras enseñarle digamos 10 20 30 100 500 caras el sistema diga mira me dado cuenta de que cuando en una imagen las verticales son el doble que las horizontales y son tres cuartos que las diagonales eso suele ser una cara y yo diré pues si tú lo dices me lo creo salió no yo no le voy a decir al sistema cuál es la proporción de horizontales verticales diagonales sino que es el sistema el que lo tiene que aprender y me lo tiene que decir a mí entonces ahora lo que voy a hacer y complementar este ejercicio goal.com para complementar este ejercicio momento correcto en unas cosas de otras esto que estoy haciendo insisto una vez más y es que es el paso más sencillo y el ejercicio más sencillo para demostrar esto entonces de hecho esto como te decía en algoritmo de deep learning lo que se hace es que la primera capa no distingue caras la primera capa distingue si hay una línea recta sería un círculo sería un cuadrado entonces luego en la tercera capa es cuando dice bueno si hay un círculo y en la línea horizontal suele ser un ojo si hay dos círculos el centro de la cara es una nariz es decir lo extiendo un ejercicio muy bestia en el que pasamos de 0 a 100 en un ejercicio de tipear ning hay un montón de pasos intermedios entonces ahora lo que voy a hacer es dejarlos hecho el cálculo para para el resto de pitchers y nos vamos al siguiente ejercicio con el que quería trabajar hoy que es el tema de tratamiento de strings con la librería vale pero os voy a dejar esto lo suficientemente es rosado entonces imagen vertical imagen horizontal horizontal horizontal horizontal diagonal 1 sobre todo quiero esto porque como estaréis viendo en la pantalla como estaréis viendo la gracia es que es copiar y pegar código y ahora es vertical atracción atención yo ahora voy a hacer hoy yo ahora voy a hacer esto 1 2 3 4 ya sabéis que eso de copiar y pegar código tiene mala pinta vale tiene pinta de que no es lo correcto sin embargo evidentemente lo estoy haciendo por rapidez horizontal horizontal [Música] diagonal 1 diagonal 1 doble ese pecado diagonal 2 pero igual sí venga y ahora esto es vertical esto es horizontal es horizontal esto es diagonal 1 con diagonal 1 diagonal 1 esto es diagonal 2 diagonal 2 y ahora 22 vale la imagen me da igual ahora mismo el 5 verticales 3 4 0 5 verticales horizontales 3405 los píxeles diagonal diagonales diagonales voy a ejecutar me da el 3 405 en vertical y en diagonal entiendo que algo no está bien no me píxeles claro por supuesto horizontales diagonales 1 y diagonal estos vuelvo a ejecutar 34 05 612 19.202 no puede ser es un poco alto pero lo que sea el programa lo ha encontrado entonces yo en este caso lo que tengo es una serie de números y una vez que tengo esta serie de números puedo proporcionar los entre ellos y puedo empezar a alimentar el sistema de tal forma que si seguimos este mismo algoritmo y esta es la parte del ejercicio que os dejo para vosotros con esta parte del ejercicio encontraremos que si alimentamos muchas caras al final el sistema aprenderá que lo más alto son diagonales bien los diagonales 2 luego diagonales 1 luego horizontales y luego verticales en esta proporción y lo más probable es que cuando yo le alimente pues unas 50 caras el sistema llegue a la conclusión de que las alas los balances entre los pesos son estos de tal forma que y que igual de alimento otras 50 imágenes de coches para comprobar que los coches no tienen esta proporción si tienen otra de tal forma que una vez que haya entrenado al sistema cuando yo le ponga una imagen y detecte que la proporción entre horizontales verticales diagonales iniciales 2 cumple esta proporción el sistema de ir a eso tiene pinta de ser una cara entendéis el mecanismo de entonces con esto lo que os dejo es por eso a vuestra vuestra libre albedrío el poder trabajar con un programa de entrenamiento mediante el cual podáis definir podáis dictar cuál es la proporción entre estas estas caras dicho lo cual pasamos al siguiente ejercicio que parece que no pero está relacionado con este ejercicio de aquí no sólo con este ejercicio sino con otras muchas cosas que podéis hacer para bebés bien un algo que no hemos visto hasta hoy que tampoco tiene mucha complejidad por cierto que ahora veréis que en esta parte de la clase la complejidad de la de la intensidad de los conocimientos va va a disminuir por cierto habría sobrevivido a la parte anterior de la clase estáis bien seguir estando bien pues ahora va a ser mucho más sencillo yo he dicho antes y lo vuelvo a repetir y lo mantengo que antes de poner en marcha un sistema de inteligencia artificial mediante machine learning primero tenemos que haberlo entrenado lo que yo acabo de hacer es un entrenamiento es decir le ha presentado el sistema una cara pero evidentemente un sistema no se entrena con un solo elemento necesita unos cuantos para aprender entonces pero yo por ejemplo podría bajarme una colección de caras de internet por cierto que ya existen ya hechas hay colecciones de caras estándar para descargar pero no es que tendría que ejecutar este programa no sé 50 veces yo a mano cada vez cambiando cada uno sacará cada dos de ejecutar cada tres de ejecutar casi cuatro ejecutar podría ser un poco engorroso como os podéis imaginar en python existen instrucciones no solo para escribir y leer archivos como hemos hecho anteriormente sino también para recorrer el sistema de directorios voy a hacer un nuevo archivo voy a guardarlo como 74 recorrer voy a mira por ejemplo lo que ha salido en diagonales vale voy por ejemplo a escritorio a curso de payton y voy a crear aquí carpeta con cosas y dentro de esta carpeta con cosas pues voy a meter cosas no sé qué voy a meter no sé a ver y yo de imágenes no fondo pantalla de muchas cosas música no es este tipo de música

y ahora vengo por aquí y hay varias formas hay varias librerías pero vengo por aquí y pongo python partes folder folder louis files y vamos a por ello entonces vamos a ver porque estoy siendo en este caso es importar por una parte la librería o sd operative system de las librerías que vienen por defecto con python y a partir de aquí lo que va a hacer es indicar me cuáles son los archivos que hay en la carpeta en la que estoy ahora mismo así que pulso f5 cuidado en la que estoy ahora mismo y me está sacando los archivos que hay en mi carpeta actual ok y de hecho acaba de entrar en la carpeta vale ahora a continuación lo que voy a hacer es decirle que quiero entrar en la carpeta como se llama en la carpeta carpeta con cosas y dentro de esa carpeta de carpeta con cosas quiero entrar en retocadas si yo ahora pulso f5 vamos a ver momento pero tocadas un momento porque me debe haber dejado algún punto o algo vemos que me lista únicamente las imágenes con las que he trabajado anteriormente qué puedo hacer con esto bueno yo puedo hacer lo que quiera voy a hacer un ejercicio sencillo para que entendáis qué es lo que puedo hacer de hecho no va a ser tan sencillo porque os habéis fijado antes que cada vez que ejecutará el programa tardará no sé cómo cinco u ocho segundos y en ejecutarse y eso que eran imágenes de de 252 456 estas imágenes son imágenes grandes son imágenes de 3000 por 3000 píxeles entonces lo que voy a hacer a continuación es lo siguiente voy a cargar el ejercicio de escala de grises vale a continuación lo que voy a hacer a ver carpeta con cosas un momento me quiero asegurar una cosa quiero asegurar que cojo correctamente las imágenes vale y ahora para cada uno de esos archivos importó pil e importó más y ahora cojo todo esto de aquí estoy ahora mismo un poco asustado lo voy a decir menos mal que tengo copia de seguridad era cojo esto de aquí este primera este fuera y ahora quiero file name y quiero esto file name y lo que quiero a continuación es esto quiero que me cargue cada una de las imágenes quiero procesar la escala de grises y quiero guardarlas lo más normal es que vea algún error vamos a por ello bien vale que justo justo el de sector no lo quiero justo el de sector qué en el sector es un archivo o cool y contador es igual a cero contador más igual a 1 y digo sí contador es mayor que 0 en ese caso ejecuta me todo esto y así lo que va a hacer es saltarse la primera imagen que no es una imagen como tal vale ok primera imagen ya los digo es que le va a costar un poquito porque es la imagen grande entonces me voy a esa carpeta si algo es una imagen grande son imágenes grandes en definitiva vale ahí nos lo habéis visto pero la primera imagen ahora está en escala de grises la segunda de imágenes está en color pero porque ahora mismo está trabajando sobre la segunda imagen lo veis qué quiere decir esto pues que yo ahora podría dejar este programa funcionando si hace falta toda la noche pero yo sé que al acabar de funcionar acabe cuando acabe me habrá convertido todas las imágenes que yo le diga a escala de grises lo de convertir a escala de grises un momento que haga la segunda imagen ya está lo de convertir al aire tenemos lo de convertir a escala de grises es un poco lo de menos lo que he hecho es un trozo de código que ya conocemos y que sabemos lo que hace lo que importa de este ejercicio es que puedo recorrer por ejemplo para el entrenamiento de inteligencia artificial del ejercicio anterior por ejemplo te acuerdas el caso que tenías tú de que tenías archivos de excel danny que querías trabajar con ellos pues imagínate que te pasan en una carpeta mil archivos de excel pues tú puedes decir pues no hay ningún problema con mil archivos de excel porque yo recorro la carpeta voy pillando uno a uno y realizó la operación que necesite con cada uno de los archivos vale es decir lo potente que tiene este ejercicio es precisamente de mostraros cómo como al igual que cualquier otro lenguaje de programación puedo recorrer una carpeta y puedo en definitiva trabajar con ella vale a continuación el tiempo que nos queda de clase quiero estar trabajando con la librería a verlo por aquí porque el otro día a danny te acuerdas que utilizaste la librería para resolver el ejercicio de este fin de semana anterior y yo te pregunté que si habías ido exacto si había sido por la rotación de complejidad y no me dijiste que no no me dijiste que había sido porque no un pino solo te incluye el soporte para matrices sino que te incluye un montón de operaciones con matrices para trabajar fácilmente con matrices correcto recuerdo una vez más por cierto lo dije el otro día pero bueno que ya sabes que la palabra matriz es incorrecta arreglos o colecciones o arrays pero ya sabes que usa para las matrices porque mira porque la usó mal entonces voy a importar y esperar esto sigue funcionando voy a parar el programa anterior vale import numbi as mf y en primer lugar vamos a hacer un repaso acerca de cómo se declaraban las matrices los arrays dentro de y entonces dijo no voy a poner matriz pues ya sería muy incorrecto sevilla de colección dejadme que no ponga acentos evidentemente para declarar nombres de variables por cierto que las últimas versiones de payton soportan la el uso de acentos y en es en el nombre de variables pero sí podéis no utilizarlo mejor porque no es compatible con todos los compiladores vale y con todos los intérpretes entonces de hecho en la gran mayoría de lenguajes de programación no solo python sino lo hará la gran mayoría hace ya unos cuantos años que están soportando ute f8 para la declaración o sea hacen todos en exceso viller todo eso pero de la misma forma se recomienda que no se use sólo para casos donde sea estrictamente necesario entonces en este caso no puede hacer es n p punto array y voy a declarar una serie de valores metidos entre corchetes los voy a declarar 1 2 3 4 5 6 7 8 9 y 0 con lo cual con esto en primer lugar tengo el clásico print quiero imprimir colección ya sabéis que una de las cosas buenas que tiene python es que vomita cualquier cosa con lo cual me vomita directamente el array y a continuación voy a declarar voy a definir el tipo de la colección para comprobar que esto no es una lista es una dupla sino que es una nube n de raid vale en este caso en este caso a continuación vamos a trabajar con los índices de la misma forma que puedo llamar a colección déjame que llame a juan jorge jose julia y que más nombres que me dicen por j javier jacobo no sé con eso tenemos diréis porque siempre pones nombres que empiezan por j pues porque desde que hace muchos años empecé a dar cursos dejaba me he acostumbrado a que los cursos dejaba ponía siempre nombres que empezaban por j por qué pues porque es jota dejaba que se pondría en fin entonces a continuación dentro de colección ya sabemos que puedo devolver todos los elementos o bien puedo devolver por ejemplo el primer elemento vale ahora lo interesante lo interesante y voy a guardar esto como otro archivo es porque esto ya prácticamente lo sabíamos esto es como una especie de repaso es saber que por ejemplo tenemos la posibilidad de realizar una serie de operaciones con matrices una de ellas es una operación que se llama cortar matrices entonces a continuación lo que voy a hacer es lo siguiente vamos a ver a decir lo siguiente print colección desde 0 hasta 3 y ahora pulso f5 y compruebo como él dame la colección completa si viene arriba el type ya no me hace falta lo tengo un ejercicio anterior si bien arriba me están devolviendo el elemento completo aquí abajo me está devolviendo únicamente un elemento yo en este caso estoy haciendo un [Música] un slice estoy haciendo un corte sobre la marcha ahora bien yo puedo decir que cortado es igual a colección de esto copio y pego y evidentemente lo que estoy haciendo en este caso es volcar de forma permanente una matriz en otra o bien lo que podría hacer no lo quiero hacer ahora es colección es igual a colección cero de tres que estoy haciendo cortar y sobreescribir la propia matriz vale pero no quiero realmente voy a dejarlo en cortado pero qué puedo hacer por tanto es voy a decir en este caso que no solo quiero cortar de 0 a 3 sino que puedo cortar por ejemplo de 2 a 5 pues f5 y compruebo cómo le cortó el josé juliá javier josé julián javier ok hasta ahora bien ahora una cuestión muy divertida otra de las cosas que puedo hacer con madrid es en un beat el siguiente ejercicio consiste en concatenar entonces colección 2 es igual a n p y venga a decirme nombres que empiecen con p vamos a verlo pablo y claro me dirás pedroia que estamos llamas para ccoo sería francisco prevenga además tío no es un nombre muy común pero y paloma y ahora vengo por aquí y lo que puedo decirle al sistema es que adjuntado es igual np punto con que tenéis colección como colección 2 o el número de colecciones que yo tuviera así que ahora print juntado f5 y que pasa sólo integra tu escala de index vale con k trayecto interés que la raíz en principio enteros e integra escalar pero en un índice escalar esto es lo que no me cuadra porque colección 1 es igual a punto a raya 56 colección 2 es igual me da lo mismo y f5 esto es lo que recuerdo porque he cumplido lo que me está diciendo y ahora si sigue sin funcionar la colección colección colección colección 1 el día entero escalar a raíz es matriz escalar que me estoy perdiendo sí vale muy bien fantástico y esto es por qué esto hay que ponerlo en dobles paréntesis vamos a ver ahora y vamos allá colección uno es notifight colección 1 f 5 y ahora si tenemos la unión de estas dos matrices en una sola de la misma forma ahora a continuación lo que quiero es separar vale sí sí sí el porque es muy sencillo porque la instrucción realmente es ésta son los primeros paréntesis verás cuando te cuento el concreto nate lo que hace es que espera un parámetro si yo le pongo colección 1 coma colección 2 el programa cree que alguna función que aceptó un parámetro lo estoy pasando dos parámetros entonces lo que espera en ese parámetro es una lista de elementos pero claro tal y como están no parece una lista de elementos parecen dos parámetros entonces los dobles paréntesis son para decirle que eso de ahí no son dos parámetros es un solo parámetro parece un poco enrevesado exacto para que entiendan que es una lista de elementos eso es correcto en esa es la razón entonces ahora voy a guardar voy a guardar como versión 78 y ahora a continuación lo que quiero en este caso es lo contrario ahora separado es igual a n p punto array split y quiero juntado a partir del índice por ejemplo pues juan jorge josé juliá 0 1 2 3 a partir del índice 3 entonces ahora a continuación print separado y cuidado y cuidado extensión de f5 vale y ahora fijémonos que esta es la juntada y esto de aquí ésta es una matriz y esta es otra matriz lo podemos saber perfectamente porque puedo decir separado un cero voy a decir que sepas que la primera parte del partido es estoy aquí y que sepas que la segunda parte del partido es estoy aquí pulso f 5 que sepas que esto y que sepas que esto otro pablo pedro me falta gente aquí para el primo paloma apuntado a ver juntado 3 pablo pedro y se me acaba de comer a paco pío ya paloma sí vale perdón perdón porque no es el índice 3 sino que lo ha partido en tres partes perdón que la sintaxis no es eso o sea tres no es a partir del índice tres sino que lo parten tres partes diferentes entonces que sepas que la tercera parte de la raíz la primera parte es juan jorge josé juliá javier jacobo pedro pablo y para kobe o paloma ahí está ahí está la cuestión ahora ahora en este caso voy a hacer lo siguiente este este igual es el último ejercicio de hoy pero es uno de los más interesantes por una razón muy sencilla es una razón que salió porque voy a hacer el ejercicio y la explicación va a durar más que el ejercicio entonces voy a concatenar y ahora quiero búsqueda tiene una operación de búsqueda es igual a en el punto web y digo donde juntado es igual a juan y ahora quiero print búsqueda ejecutó f5 y me dice el que pasamos pero aquí vale es doble igual es una comparación ok porque me dije a raíz de cero así perdono jueves que justo buscado el primero voy a buscar a javier efe 5 y me dice que javier ocupa el índice 4 es decir 0 1 2 3 4 una vez que he demostrado que existe una una instrucción llamada web por qué diríais que esta instrucción es específicamente interesante para mí qué diríais una pista la pista que os doy es aplicaciones empresariales qué me decís que me contáis os voy a hacer una cosa y esto daría a ti especialmente te va a interesar en días anteriores hemos visto qué podemos trabajar con bases de datos y podemos realizar búsquedas en bases de datos podemos realizar búsquedas con la instrucción select y con el condicional wear de hecho ese web se parece mucho a este web la idea es que veáis que gracias a otras librerías también podemos realizar podemos obtener la facilidad que nos dan las bases de datos para que en lugar de buscar en base de datos busquemos en matrices con lo cual la pregunta con la que os dejo en la clase de hoy es la siguiente pero quiero la respuesta antes de irnos en qué casos diría es que me interesa más buscar dentro de una madrid en lugar de buscar dentro de una base de datos es una pregunta bastante avanzada os lo advierto ahora bien la respuesta por ejemplo a ti iraní porque fernando está más interesado en el tema de domótica que por cierto fernando este de esta semana haremos la tutoría para hablar específicamente de tu proyecto de domótica pero dentro de que esto que acabo de preguntar tiene poca aplicación en domótica pero tiene mucha aplicación en data science la respuesta es la siguiente como como la respuesta es difícil te la voy a dar yo dani pero para que lo investigue estuvo a partir de ese momento por comparación en cuanto a qué va a ver a ver sí tirando del hilo a ver mirar es mucho más sencillo que parece ahora verás la gran mayoría de bases de datos trabajan con archivos en el disco duro específicamente en motores de base de datos como mysql hay una excepción qué consiste en trabajar con un motor de base de datos que se llama memory que lo que hace es cargar las tablas en memoria ram y descargar las del disco duro es un motor peligroso porque al ser memoria al ser ram cuando reiniciamos el ordenador o sea cuando apagamos el proceso pierde la memoria mientras que las tablas que están en disco duro evidentemente aunque apague el servidor o apague el mismo ordenador siguen existiendo siguen persistiendo las tablas de las tablas que están almacenadas en disco duro tienen la ventaja de que son persistentes pero tiene la desventaja de que son los rápidas que es un disco duro en cambio las matrices se guardan en memoria ram y eso quiere decir que tiene la desventaja de ser tan volátiles como la memoria ram pero ser tan rápidas como la memoria ram entonces hay veces en las que cuando empiezas a trabajar con matrices o empieza a trabajar con información más que matrices lo que te interesa es velocidad lo que te interesa es trabajar a la mayor velocidad posible cuando lo que quiere hacer velocidad probablemente una base de datos no te interesa tanto te interesa más una matriz de interés a más igual cargar datos de una base de datos convertirlos a una matriz y entonces realizar la búsqueda pero claro cargar todo eso en ram a veces puede ser engorroso además de que requiere que tengas mucha ram cuando no se requiera eso probablemente trabajar con una base de datos estándar es más cómodo vale entonces lo que te quiero decir es que igual observáis que estoy muy emocionado por enseñaros que existe este wear cuando wear tampoco para tirar cohetes así que es practicar cohetes porque en ciertos escenarios especialmente cuando necesitéis buscar información rápidamente entre grandes cantidades de información que exista este wear quiere decir que puede ser una alternativa perfectamente válida cargar datos meteros una madrid y buscar y obtener datos para buscar de forma mucho más rápida que con una base de datos vale sólo quiero que os quedéis con este concepto y si un buen día tenéis que buscar en nuevo léon de información y veis que una base de datos es lenta acordaos de lo que os dije en esta clase que es posible cargar esa información una matriz en rama trabajando mucho más rápido por mucho que a día de hoy trabajemos con discos de los eeuu no te digo que no pero velocidad ram contra estado sólido y podéis encontrar y podéis encontrar podéis encontrar un montón de páginas con comparativas digo puedes encontrar con páginas con comparativas donde te dicen la velocidad que tiene pero sí pero no buscando vosotros lo veréis aquí por ejemplo la ram no no esperado 3000 megas por segundo pero la ram puede alcanzar picos de 25,6 gigabytes por segundo y ahí estamos hablando bueno 3 mil megas estamos hablando realmente de 3 gigas por segundo mientras que estamos hablando de 25 gigas por segundo después te digo que la diferencia entre la ram y el disco duro en un momento dado puede ser realmente sustancial vale ok lo tenéis claro ok pues nada continuamos entonces hoy vamos a hablar de de varias cosas con respecto a payton que realmente son comunes a muchos otros lenguajes de programación el otro día estuvimos hablando de al final del todo de la filosofía de cuando nos convenía más trabajar con una base de datos y cuando nos conviene más trabajar buscando arrays en en memoria con la librería o con lo que sea y hoy quiero empezar hablando de una cosa horrible de una cosa monstruosa y hace un montón de años un montón de años igual sería sobre 2012 o por ahí pero un compañero me dijo mira vengo de asistir a la charla más horrible a la que asistido toda mi vida y dije de que ibas a echarla y me dice depresiones regulares y le dije pero es súper guay entonces claro es súper guay cuando sabes para lo que sirve y cuando sabes los problemas que te soluciona pero no es tan súper guay cuando te representan por primera vez entonces y el otro día os introduje el concepto de como te diría yo el concepto del trabajo con del trabajo con búsqueda del web os acordáis del web utilizamos otro día en nube lo último que veo que estoy hablando las expresiones regulares es algo que va más allá del cuero por ejemplo por ejem un tipo de expresión regular no todavía el lenguaje de programación momento voy a arrancar servidores voy a ir por aquí aquí a localhost vale tools de hp my admin me voy a lo que sea mira me voy a curso python me voy a alumnos de alumnos por aquí y veo qué alumnos hay una serie de nombres entonces yo por ejemplo busco adrián o busco por ejemplo yo quiero todos aquellos alumnos que tengan an en su nombre entonces yo para buscar sé que existen unas almohadillas bueno pero pongo like like almohadilla almohadilla la almohadilla en sql es el porcentaje y pongo andy lebow ago y me dije pues mira tiene sanaciones andrea tienes tienes qué curioso adrián tienes alejandro 3 anna 3 andrea tenés adriana alejandro ana ana belén ana maría amador y ángela también ángeles y jessica harán azul también vale veis lo que quiero decir o sea hay veces especialmente a la vuelta del siglo 21 esto que os acabo de decir parece que lo he hecho para pegarme el moco proceso creo que no hay casi donde la clave no es la información la clave es la búsqueda de la información os lo digo cuál es la empresa más poderosa a día de hoy cuál es valdría y a qué se dedica google no el ordenador sino el principal por lo que google ha ganado en la mayor parte de su dinero es por anticipar un problema y verlo mucho antes que otras compañías y es que en la sociedad de la información el exceso de información es un problema y buscar eficientemente en en ese exceso de información es una solución que vale dinero de esa misma forma eran y también te digo que el data science es el siguiente paso es decir el exceso de información en prácticamente cualquier organización moderna es un problema gracias a aliens como disciplina lo que hace es poner soluciones a esos excesos de información o sea tratar correctamente grandes volúmenes de información vale entonces lo que vamos a hablar ahora les voy a contar ahora es precisamente una serie de cuestiones que son duras de aprender pero nos permiten trabajar con eso bien pues voy a crear un archivo nuevo voy a guardarlo en la carpeta del curso como escritorio curso de payton como listado modificado 80 y red xxi regular expresiones vale para empezar el módulo de expresiones regulares hay que importarlo entonces lo primero voy a hacer es import regular expressions no hace falta que ponga as porque r ya es un nombre bastante corto entonces claro r porque lo puedo poner sabes pero yo que sé es cómo simplificar más la cuenta entonces que sepáis que no pongo el as por eso simplemente entonces ahora yo digo mi texto es igual a por ejemplo diciendo un nombre de persona vale 6 mundo pues oye como decía el grupo kiss música sabes tú querías lo mejor pues toma lo mejor pues segismundo entonces a continuación lo que voy a decir es búsqueda y aquí vale búsqueda es igual a mi texto punto search ya sabéis que siempre os digo que si algo lo pongo en castellano es porque podéis poner lo que queráis y si algo lo pongo en inglés es que tenéis que poner tal cual y digo lo siguiente perdón perdón mi texto no r punto search y ahora pongo lo que quiero buscar y donde lo quiero buscar uno de los dos parámetros que hablábamos el otro día os acordáis entonces esto es mi texto y ahora lo difícil viene a continuación y entonces ahora a continuación digo comillas y voy a escribir lo siguiente comillas el signo de potencia que es este de aquí dólar al final qué es esto de aquí yo la pongo his lo que quiero es comprobar en este caso si tengo o no tengo todo esto de aquí y ballets y vengo his dentro de lo que será vale pues vamos a ver pulso f5 que no se vale no me ha dicho nada y ahora digo print búsqueda si le digo print búsqueda en este caso me dice no me dice claro vale si os cuento porque vamos a ver por qué no empieza ni acaba con momento vamos a verlo creo que voy a recuperar un par de barras es momento vale aquí y si no pongo esto si no pongo nada me dice que en este caso he encontrado una coincidencia que se extiende desde el carácter número 2 hasta el carácter número 5 y que ha coincidido con hits yo en este caso lo que puedo hacer es y búsqueda print he encontrado un resultado tels print he encontrado ningún resultado guardo recargo y he encontrado un resultado esto que os voy a decir al momento vale esto que os voy a decir os va a parecer un poco extraño lo siento pero es así pero si yo hago un print de la búsqueda que imprime el tipo de búsqueda pero a la vez ese tipo de búsqueda está actuando como true o falls entonces si pongo y búsqueda es una sintaxis a veces demasiado simplificada pero es válida es igual a poner if true vale es una forma simplificada de hecho fijaos que f 5 y me dice ah no he encontrado [Música] hola bueno pues ahora para fastidiar no me lo estaba poniendo pero si pongo y búsqueda quiere decir si esto válida como true me ejecutas esto y si no no si no válida como true me ejecuta es eso otro vale y pulse f 5 y comprobamos como válida como otro entonces por cierto que ahora luego aprovechó también la clase de hoy para explicaros algo de lo que no hemos hablado que es el doble igual y el triple igual pero ahora lo hablamos de ello a continuación lo que voy a hacer en este caso es evidentemente buscar juan o agua por ejemplo pulso f5 y compruebo como no aún no se ha encontrado ningún resultado dicho lo cual dicho lo cual yo a continuación lo que puedo hacer es lo siguiente voy a hacer lo siguiente voy a buscar red exp payton y lo que busco es una pequeña tablita vamos a documentos de payton lo que busco es una pequeña tablita aquí que es esta tableta de aquí y es si pongo este carácter el carácter de elevado a potencia quiere decir que cuadre con el principio de la cadena no voy a explicar todos porque es pecar todo estaría que unas cuantas horas hablando de expresiones regulares de hecho podría hacer un curso específico de personas regulares pero no es el objetivo entonces si yo por ejemplo busco vamos a ver he buscado his ya sabéis que me ha dado otro pero si yo pongo ^ que es mayúscula si este carácter y espacio estoy buscando si es cierto que la palabra empieza por gis en cuyo caso me dicen own y me dice no he encontrado ningún resultado pero si yo pongo c o sea elevado a base efe 5 y me dirá he encontrado un resultado vale entonces cuando ponemos este carácter de aquí lo que estamos haciendo es indicar que lo que yo he puesto es el principio de la cadena si pongo un dólar quiere decir que lo que he puesto es el final de la cadena si pongo un asterisco quiere decir que lo que he puesto coincide con 0 o más repeticiones con todo esto con todo esto con todo esto veréis que hay un montón de fórmulas que podemos poner o sea ya no digo que aprender esto puede llevar tiempo pero ya os digo fíjate el documento lo largo que es esto ya son las estrellas son métodos vale pero ya continuación para intentar un poco motivados y enganchados os voy a voy a poner un ejemplo práctico que me voy a sacar de internet ahora veréis porque me lo voy a sacar de internet pues está listo para qué me sirve pues voy a poner el típico ejemplo que yo creo que usaré jce en más de un proyecto que es el validador de correos electrónicos entonces validar email cuando tu en una aplicación y tu esto por ejemplo dan y si estás trabajando en proyectos de big data y de data science sabrás que la calidad de la información lo que se llama la calidad del dato es un problema muy importante que es que cuando tú metes un campo de correo electrónico la gente te mete de todo menos un correo electrónico entonces luego eso te lleva a problemas porque cuando te das a usar esa información te das cuenta de que no vale esa información con lo cual acabas programando un validador de datos para que cuando alguien meta datos no los pueda meter si no tienen el formato correcto entonces pongo import regular expressions y digo email es igual ahora daremos un input vale ahora lo transformó os acordáis de los inputs del principio del curso y luego si hace falta los reformados de una aplicación de interfaz de usuario digo email es igual a info jose vicente carranza la puntocom claro os he puesto el ejemplo del email porque el email es por ejemplo complejo porque es una cosa que tiene que tener una arroba y tiene que tener un punto y en la extensión tiene que tener un número de letras que no pueden ser menor que una ni mayor que cinco creo que son ya la regla de expresión regular para validar correos electrónicos os podéis pasaros lo digo en serio días enteros para trabajar para encontrar la regla pero yo puedo ir a internet y puedo decirle python regular expresión email y grace que en internet hay expresiones regulares para lo que tú quieras entonces por ejemplo entro ahí entro ahí vamos a ver vamos a comprobar y por ejemplo me dicen mira la expresión regular bueno aparte del email reg ex vale ok ahora ahora hablamos de esto pero [Música] no para se abre es que no quiero esto vale porque en email en útiles hay una utilidad para parchear correos electrónicos pero no quiero hacer manualmente a ver y dale o sea es que la gente dice sí vale instalar en la librería de validar emails vamos a ver bueno pues hala [Música] fuera fuera ok vale eso de ahí es entonces y ahora digo regla es igual a esa de ahí qué quiere decir esa regla bueno esa regla quiere decir que primero empiezo voy a sacar la tablita para que lo podáis ver vale empiezo esto empiezo con un bloque que puede ir con minúsculas desde la a hasta la z el guión es desde uno hasta otro puede tener números desde cero hasta nueve pero si estoy diciendo que puede tener letras desde la a hasta la z y números de sección hasta el 9 quiere decir que no puede tener ni dólar ni barra ni ampersand ni nada de eso vale a continuación lo que digo es que puede tener una contra barra esto yo no encontraba si contra barras todas contra barra no lo sabía puede tener un punto o puede tener un guión bajo y el interrogante quiere decir que esto se puede repetir tantas veces como haga falta interrogante interrogante quiere decir que esto se para o no no no según esto solo puede repetir 0 o unas repeticiones vale ok a continuación puedo tener desde la a hasta la z más una arroba el carácter de arroba no puede ser otro que arroba y a continuación puede tener una terminación que vaya entre dos a tres caracteres la longitud de la terminación terminación sólo puede ser entre dos y tres caracteres si busco las llaves por ejemplo aquí dice que solo puede tener de m&a n repeticiones ahí hay un problema qué problema estáis viendo desde usa 3 el problema que deberíais estar viendo es que hay terminaciones de dominio que tienen más de tres caracteres por ejemplo si yo busco el ansiado main veréis que hay un dominio que se llama asia se apuntó a asia pero claro punto así son cuatro caracteres vale entonces por eso digo que no vale con copiar y pegar de internet sino que luego hay que revisarlo y hay que retocarlo si hiciera falta vale o igual un día de estos dicen mira permitimos a nivel mundial que las cuentas de correo tengan desde la a la z el 0 y el 9 y el dólar pues habría que actualizar esta expresión regular para que también admitirá el dólar o cualquier otro carácter bien ahora lo que voy a hacer voy a pasar al siguiente vídeo bien ahora lo que voy a hacer es que validación es igual a r punto y en este caso search y digo con la regla y con la regla quiero la nivel entonces vengo aquí y vigo print validación vengo por aquí ejecuto y me dice much en este caso demasiado desde 0 hasta 29 básicamente lo que me quiere decir es que si esto es un correo electrónico claro cuidado señora pongo punto asia sería un correo electrónico válido pulso f5 y me dice que no es un falso negativo evidentemente pero si yo pongo info jose vicente catalá eso no es un correo válido pulso f5 y me dice no vale con lo cual las expresiones regulares nos sirven para hacer validadores avanzados vale y nos sirven para poder buscar no digo que os tengáis que buscarlos tengáis que aprender de memoria toda la tabla está de modificadores de presiones regulares pero sí que me gustaría al menos que en la clase de hoy habéis aprendido los básicos aunque sea el de ^ y aunque sea el de el dólar y aunque sea el de conjunto de caracteres pero que sepáis que en algún momento dado si queréis averiguar más si un cliente te pide un buscador avanzado que sepas que existe esto de las expresiones regulares vamos a hacer esto y ahora hacemos otro ejercicio de expresiones regulares entonces f5 vale y ahora lo que quiero es el input entonces vengo por aquí abro me voy a buscar el escritorio en curso de payton todo todo todo todo todo dónde está el en punto en multi línea entradas vale y ahora yo vengo por aquí y digo gmail es input print dime un correo electrónico y déjame que ponga mucho espacio y yo creo que ya pulsamos f5 dime un correo electrónico pongo tiqui tiqui tiqui tiqui y me dice none vale yo a partir de aquí evidentemente podría poner es validación y déjame el porcentaje el paréntesis no validación print lo que has introducido es un correo electrónico y lo voy a meter en la base de datos no lo voy a hacer pero evidentemente sería el siguiente paso dentro de un programa él print lo que has introducido no es un correo electrónico ok entonces pulso hace 5 dime un correo electrónico pongo cualquier cosa lo que has introducido no es un correo electrónico pero pulso f5 pongo info josé vicente puntocom y me dice lo que has introducido es un correo electrónico y lo voy a meter en la base de datos a partir de este ejemplo vamos a ver un par de ejemplos más sencillos pero yo pienso que son útiles veréis no sé si habéis visto alguna vez el meme de how a programar 6 x 6 m este por ejemplo está este de aquí vale que es como los usuarios ven al programador que lo ven como un extraterrestre y como el programador ve a los usuarios que los ve como trogloditas vale y luego también está este otro meme que lo acababa de ver por aquí esto que de hecho es un gif eso lo habéis visto es que tú como programador diseña es un vaso y así es como lo usan los usuarios que dices que vamos a hacer ese es un vaso de agua como podéis utilizarlo mal vale este este gif la habéis visto alguna vez proporciona visitó mis recomendaciones que os lo guardéis a oslo bajéis porque os va a acompañar en vuestra vida y sobre todo es que cuando hagas un programa y veas que los usuarios lo usan de cualquier forma menos como tú lo has diseñado este decir un poco para saber que no estás solo en este mundo sabes que hay unos programadores que te comprenden entonces con esto por ejemplo lo que voy a hacer como os decía es crear un ejercicio voy a copiar este código y voy a hacer un validador de un sencillo validador y validar campo entonces claro yo vengo por aquí y digo e introduce un número entonces claro la gente me introduce letras querido bravo se ha visto que pone a introduce un número para que meten letras y yo vengo por aquí modifico esto y me quedo con esto y me quedo me quedo con algo tan sencillo como esto y digo me teme eso de ahí lo que me puedes meter sólo pueden ser números del 0 al 9 vale entonces y por cierto y esto lo voy a repetir bueno ahora veremos vale entonces válido eso qué bueno qué y no ok para simplificarlo recargo a la introducción número pues número con una letra por el pri por el medio vale metido una jota y meto y dice es no ok vale pero efe cinco métodos números o no ok vale porque eso tengo que repetirlo x veces [Música] vale interrogante estudio interrogante un momento porque me falta el qué sí sí veras para buscar el gif y si no era para esa agua programa seis hits y users mm y luego como hay varios meses de estos con glass water al entonces básicamente es como un programador ve a sus usuarios y sobre todo es que si trabajas en una empresa probablemente pues en un momento dado cuando hay algún momento de tensión ver ese gif el último momento de tensión de que es que los usuarios no saben por mucho que te esfuerces no saben usar la aplicación es seguir te hace entender que no estás solo qué claro suelo contar siempre cuento anécdotas un poco de todo pero hace poco hace unos pocos meses uno de los clientes para los que trabajo me envió a un ciclo de conferencias y me envió para escuchar como oyente en plan de mira ves apunta lo que digan y luego nos lo cuentas era unas conferencias que se hacían aquí en valencia acerca de tratamiento de datos y no te puedes imaginar que se me saltaban las lágrimas de oír a los ponentes y al resto de personas que participaron en el coloquio decir que tenía los mismos problemas que tengo yo especialmente con la aplicación que estoy haciendo para ese cliente en descaro yo luego volvía a ese cliente le dije mira tendrías que haber venido tú a escuchar la charla porque claro si yo oigo a otros informáticos decir que tienen problemas para que la gente me está la información correctamente pues claro es como como los informáticos dando unos palmadas en la espalda los nosotros pero claro yo se quería que el cliente hubiera estado en esa charla para decir mira ya está te cuenta que los problemas que tienes en tu aplicación es que no los tienes tú esto lo tiene todo el mundo y no tener esos problemas o sea conseguir que la gente introduzca correctamente la información una aplicación es un reto que tiene todo el mundo baleares y luego ahí hay otra a ver si la encuentro esta es la del vaso hay otra que es aliens vamos a ver un momento que había encontrado es una muy divertida el momento está listo y muy bien encerrado cerrado cerrado voy a hacer lo siguiente en el validador en estas validador voy a hacer lo siguiente efe 5 claro esto es ok ahora sí entonces ejecutó de nuevo y es un número pero pongo una letra desperdició ok fantástico pues momento porque no puede ser vale tengo que ver mira sabes que me da igual pero como puedo estar toda la tarde para averiguar qué es lo que ha pasado dijo payton reg ext only numbers e insisto que tenéis reg export only numbers vale y tenéis vale que interesante nunca había dicho al centro match con r regla está de aquí vamos a verlo efe 5 número ok y ahora efe 5 número con una letra y no ok vale pues mira pues lo que ha hecho en este caso es haber python reggae ext es buscar únicamente espera que te voy a decir contra barra sí pero claro contra barra contra barra de eso debe ser dígitos eso debe ser dígitos contra barra d y esto es equivalente a usar el set de 0 a 9 vale y por curiosidad que es ese s y y también hace más en cualquier carácter en blanco casillas y caracteres en blanco en el en el reggae también los pillan con lo cual pues bueno como ya os digo o sea si necesitáis validar y por eso digo que en tu caso dani probablemente esto se aplique mogollón pues en plan de copia de pegar ya ni siquiera te digo aprende de los de memoria por qué por qué exacto porque otra cosa que te digo es la siguiente y es que las expresiones regulares aunque sean importantes para tu trabajo pero dudo mucho que van a estar todos los días trabajando con expresiones regulares por eso no vale la pena aprenderte memoria algo que igual utilizas una vez cada dos meses vale ahora bien danía antes de pasar a la siguiente parte también quiero decir que una cosa y es que el otro día me enseñaste que estabas leyendo un libro de blair ning entonces a ver esto hay una hay una rama de la inteligencia artificial que se llama procesamiento del lenguaje natural digamos por ejemplo dentro de inteligencia artificial visión 3d o visión artificial es una rama de la inteligencia artificial pues hay una rama que se llama procesamiento del lenguaje natural cuando se dice natural se quiere decir digamos humano vale entonces he hecho te dejo únicamente el artículo de la wikipedia para que para que puedas verlo entonces el proceso del lenguaje natural es francés de estrategias para que los ordenadores mediante inteligencia artificial no serie de técnicas entiendan en la medida de lo posible a un humano expresándose en su lenguaje humano y un sistema de inteligencia artificial sea capaz de formular textos o sea comunicarse con un ser humano en un lenguaje que entienda el ser humano entonces claro con esto lo que te quiero decir es que cuando empieces a trabajar con te ln con procesamiento de lenguaje natural te darás cuenta de que inevitablemente llegas una parte que tiene que ver con reconocimiento de patrones o sea con un texto y dentro de ese texto reconocer patrones que son las expresiones regulares las expresiones regulares son patrones es decir cuando yo por ejemplo he hecho un validar campo he hecho un validar correo electrónico lo que estoy haciendo realmente es validar sea como tú como ser humano cuando ves un correo electrónico cuando ves un correo electrónico info ataca está y le falta el puntocom sabes que eso no es un correo electrónico porque tú como ser humano no conoces todos los correos electrónicos del mundo pero sabes patrones y sabes que un correo electrónico es algo algo punto algo y tú ves que según ese patrón esto no coincide con ese patrón parece lo digo porque como el otro día me enseñaba que estaba interesado en deep learning y estás leyendo documentación y todo esto pues te sigo sin recomendar que te aprendas las empresas regulares de memoria pero sí que te digo que si profundizas por ese camino probablemente en un momento dado verás que en este campo específico de procesamiento de lenguaje natural las expresiones regulares te van a ser de utilidad vale es insisto yo lo vuelvo a decir otra vez son un poco rollo porque ya os digo que son un poco rollo pero en ocasiones nos vendrán bien en este curso hasta el momento hemos visto cosas como por ejemplo guardar datos en bases de datos y leerlos evidentemente hemos visto que existe no lo hemos visto en clase pero por ejemplo dan y pusiste el ejemplo de que se pueden leer archivos de otros formatos como por ejemplo el excel y aquí en clase hemos puesto el ejemplo concreto de leer y escribir archivos entonces no puede acabar este curso y no digo que esté acabando queda cuantas casas que dan clases está pues sí pues entonces con toda la propiedad vivo no puede acabar este curso sin haber hablado de una cosa que se llama json cuando hablamos de j son hablamos de una forma de comunicar python has puesto cara de dolor vale el momento un momento vamos allá vamos a ello pues venga vamos a hacerlo al revés vamos a ver

verás en primer lugar j son vamos a ir a un nivel purista vamos a la teoría y lo vamos a la práctica j son quiere decir java script object notation o sea empezamos mal vale empezamos teóricamente mal por dos cosas por dos cosas j son wikipedia vamos a comprobar que lo que te acabo de decir es cierto vale j son viene de javascript object notation entonces empezamos mal diciendo javascript porque claro si yo estoy con python para qué quiero javascript y luego por otra parte dice object que es que yo igual no quiero igual no necesito pasar objetos yo lo que quiero es pasar datos entonces el jota song es un formato creado por javascript se suele decir no sé si es cierto o no pero se suele decir que está creado para ajax que es una de las tecnologías de javascript es un formato de texto sencillo y muy entendible para el intercambio de datos y por tanto y por tanto atención y esto es lo que os iba a decir ahora pero casi prefiero que os lo diga la propia wikipedia y dice debido a su amplia adopción es que esta frase es perfecta porque me ahorra todo lo que iba a explicar a continuación debido a su amplia de opción como alternativa a xml se considera a en el momento del año 19 y en el 20 también un formato independiente del lenguaje por eso la teoría dice que esto de javascript y objetos parece que no nos convenga pero la práctica dice que olvídate de javascript porque el jota son de hecho fíjate que pone javascript y tú dan y has dicho que lo utilizaste en una práctica en java la práctica en la realidad es que se utiliza para pasar información se considera un formato independiente del lenguaje y puedes pasar información de un sistema a otro sin javascript por el medio olvídate de havas que si quieres vale se utiliza en definitiva como un estándar un problema cuando quieres comunicar varias aplicaciones entre sí es como comunicar las aplicaciones json te propone un estándar para comunicar las aplicaciones de tal forma que si el desarrollador del programa se comunica con el servicio del programa y pactan que van a trabajar con jota son ya tienen la mitad del problema resuelto cuál es la segunda mitad cuál dirías que es la segunda mitad pues evidentemente la estructura del jota son es decir j son es un formato abierto pero jota son no saber si tú vas a pasar personas vas a pasar máquinas vas a pasar ciudades vas a pasar fechas vas a pasar dinero vas a pasar que vas a pasar la jota suárez un formato abierto ahora tú sabrás lo que pones en ese formato cuando pasas información entre un programa y otro tienes que estar de acuerdo con el programa y el programa ve sobre la información que va a contener sj son bien lo primero que quiero decir os voy a crear un nuevo archivo es que el formato json está nativamente soportado por payton 82 j son tengo que importar la librería j son una vez más no le pongo ninguna alias porque bueno son cuatro letras que se va a hacer y ahora a continuación voy a hacer lo siguiente voy a crear un j son me voy a sacar yo un jota son de la manga no lo quiero vale lo que voy a hacer es aj son example trabajar un ejemplo de internet jotas con example y ya está mira y es más me da el ejemplo en json y el ejemplo en xml no es como verás bueno json parece que sea más entendible bien o el ejemplo no esto a ver una hueva no vamos a bajar lo sencillo que es esto ok j son o sabes que mi cadena es igual a esto de aquí vale uno más sencillo j song example one life aj son life [Música] a los tres el nextel si no lo creo hasta ahora y entonces voy a crear un json que tiene esta estructura es decir empieza con una llave y a partir de una llave va creando parejas de elementos es decir pareja como sea clave como valor perdón clave dos puntos valor como clave dos puntos valor coma y puedo hacer esto tantas veces como quiera por ejemplo juan juan a correo punto como una pequeña agenda jorge jorge a correo puntocom tengo javier javier a correo puntocom tengo julia julia a correo puntocom y por último sacó más obra por último tengo a jacobo qué es jacobo a correo puntocom eso que estáis viendo ahí es una cadena formateada en jota son de momento estoy cargando una carrera internamente al programa y ahora luego lo que voy a hacer es descargar un archivo json externo que es lo que realmente habíamos evidentemente vale y ahora lo que voy a hacer es lo siguiente carga es igual a jota son punto o sea estoy cargando esta librería de aquí y quiere utilizar un método un método llamado load la carga carga mi cadena de momento momento lo que quiero hacer sprint carga efe 5 y me dice esto de aquí no parece que haya hecho mucho que no de hecho se le digo print mi camino veréis que tengo lo mismo aparentemente tengo lo mismo dos veces sin embargo sin embargo si yo ahora pongo type off mi cadena y pongo type of carga me dirá type of quizás la mayor no anfel paz digo type me dirá que lo primero es un string pero lo segundo es un diccionario hablaremos del diccionario como estructura de datos con sus ventajas y sus desventajas pero yo ahora por ejemplo dijo print quiero carga y siendo un diccionario quiero a juan quiero que me des el valor correspondiente a juan pulso f 5 y me dice que el valor es juan y correo es decir yo le doy una clave y me devuelve su resultado vale lo que estoy haciendo es si queréis vamos a llamarlo así si queréis no es correcto lo que voy a decir pero lo que estoy haciendo es meter o recargar un json y convertirlo a un array digo array porque la sintaxis parece la de un array pero técnicamente no es un array si no es un diccionario vamos a hablar un poco de esto en los lenguajes de programación hay una estructura de datos datos truckers diccionario aquí vale qué se puede llamar una raya asociativo qué tiene esto de aquí vale y vamos a ver atención me importa esto diferencias con otras estructuras de datos similares por ejemplo barras conjuntos no hemos visto todavía entonces los arrays los rays y los diccionarios los dos colegios antes son colecciones de datos pero difieren en cómo son accedidos los ítems en un array se acceden mediante una posición es decir generalmente un número y por tanto tienen un orden mientras que los ítems en un diccionario se acceden mediante una clave y por tanto están desordenados manny que dirías que voy a decir a continuación a continuación lo que voy a hacer es big o complexity para analizar y jason no mira el chip ahí está a ver si aquí meten diccionarios en esta tabla y si no seguro que en alguna tratado los meten o complexity disc linares y tendría que tener una tabla ahora no no no no no vamos a ver a ver table table o con varios viajes vale sí pero no esto no es hablamos de unas diccionario y esto es lo mismo de antes vale pues en alguna en alguna de estas gráficas aparecerá a diccionario y veremos qué diccionario por ejemplo tiene una velocidad de lectura muy inferior a la de los arrays porque está desordenado y el array como está ordenado cuando empezás a pasear es pam pam pam pam pam pero sin embargo tiene la ventaja de que los índices pueden ser asociativos no numéricos lo cual tiene ventajas de cara al introducir por ejemplo en inserción tiene claras ventajas con esto por cierto en muchos lenguajes tales como por ejemplo php ocurre que cuando tú creas un array y el array lo convierte es de numérico asociativo automáticamente por dentro el lenguaje está cambiando de array al diccionario pero tú como usuarios de das cuenta con esto lo que quiere decir es que cada lenguaje usa de una determinada forma estos los árabes ahora qué diríais qué voy a hacer a continuación en el siguiente ejercicio bueno pues el siguiente ejercicio evidentemente yo lo que quiero es cargar un archivo a continuación el siguiente ejercicio lo que voy a hacer es lo siguiente me voy a ir a brackets el texto ok voy a crear un nuevo archivo de texto dentro de este nuevo archivo de texto voy a poner este cuidado desde aquí este código voy a pegar esto es un archivo lo meto en el curso de payton es un archivo llamado agenda j son y a continuación y a continuación lo que voy a hacer es que voy a crear un nuevo proyecto lo voy a guardar como python 83 json externo vale pegó el código y ahora a continuación lo que voy a hacer es recuperar el código recuperar el código ah [Música] el momento donde está leer leer leer leer leer archivo hay vale y vengo y digo esto es estos son externos vale archivo es igual a agenda punto j son fort y en reims realmente sabes qué mi cadena es igual como solo tiene una línea archivo punto red line górriz realmente probada igual de este caso y ya está vamos a verlo y yo creo que ya así que si está bien pulso f 5 y me dice estoy aquí es decir dados cuenta que ahora el jota son están entrando externamente al programa con esto lo que os quiero decir es que yo ahora por ejemplo me vengo a brackets donde está brackets a ver qué cerrado las etts no sé por qué yo aquí vengo y digo coma jacobo pues josé dos puntos y pongo josé a correo puntocom y yo ahora vengo por aquí y ahora quiero que me des el índice de jose ejecutó y me dice jose a correo punto coma es decir comprobamos que efectivamente funciona vamos a hacer una demostración un poquito más real todavía de este ejercicio verás si yo me voy por ejemplo si me voy por ejemplo a localhost y me meto en la base de datos y saco por ejemplo en el curso python saco alumnos y en alumnos quiero exportar esta tabla y veo que no me dejes mal ph admin veo que uno de los formatos es j son por como ya os he dicho es un formato muy típico y característico para compartir información entre programas con ojotas son haber custom que me das ago vale lo quería sacar a un archivo bach custom y lo quiero safe to fire vale ok vale me voy a guardar en curso de payton en alumnos punto j son lo voy a abrir un momento no voy a abrir un momento es un archivo que ocupa 300 casas no es mucho pero si lo abro con brackets si lo abro con brackets se supone que estaba yendo con brackets muy bien seguirá esta raqueta no sé por qué qué raro vale pues tengo esto tengo esto tengo esto tengo esto quiero decir qué con el archivo antes de jota son pues bueno parecía un capricho haberlo metido en un archivo externo pero la realidad es que los archivos json tienen este aspecto con lo cual yo era por venir y decir vamos a ver [Música] identificado pues yo cojo este archivo pero pego lo guardo como python 84 84 jotas son alumnos cargo alumnos j son ok redline no read vamos a ver un segundo que me asegure payton ríe file string trabajando todos estos datos estos frutos no file river vale reed replace igual me vale por esto mi cadena es bueno y voy a voy a lanzar lo primero ok y ahora voy a hacer un print me voy a arrepentir pero mis cadenas bien si os fijáis por squeeze texto sea texto comprimido y hay tres mil 734 líneas que de hecho coincide con las tres no te raro 2600 se mira vamos allá vamos a ver ahora quiero print carga y carga y lo quiero en todo momento dónde estás esmero smile bracket vale vamos a ver claro identificador estos son hay que ver esto nada ah ah vale es que esto es un elemento data es otro elemento ostia esto es gato carga data por qué pues de identificador vamos a ver efe 5 vamos a ver vale identificador lift índices integré horas las 6 pero estoy trabajando con un jota song carga carga es un jota son de mi cadena vale eso quiere decir que no ha cogido correctamente mira voy a hacer una cosa me voy a cargar un montón de ellos y así tengo un jota son más sencillo y para luego cogemos el grande vamos a ver print print carga lanza velo vale esto es correcto ahora la lista les place text ex list pero lo ha cargado correctamente y eso quiere decir que no ha interpretado este archivo correctamente probablemente por estas primeras esa primera llave esta llave fuera y esa llave fuera f5 vale extra data esta data quiere decir que eso limpio y eso limpio estrada está al final a este donde cierra aunque éste cierra y se cierra aquí el momento noble xstrata por qué me dices extra data si no hay extra data vamos a ver voy a hacer una cosa voy a otro jota son de los que teníamos los ejemplos aj son siempre example no quería el d se han centrado en jotas son punto o hereje example punto html vale desde aquí hasta allí vale ahora vamos a ejecutarlo ok ahora si me dice que es un diccionario pero eso se ve que el otro se os fijáis en una lista eso quiere decir que la exportación de pedro media min igual no es perfecta entonces ahora lo que voy a hacer es lo siguiente lo que voy a hacer es print carga del title y title falta la descarga de title no glosario no aunque ahora dentro de glosar y quiero title [Música] vale es escandalosa o bien dentro de cloud y si yo saco que los dip me saca ese objeto sí que quiero guardar y ahora dentro de los dif quiero que me digas cuál es el título y el título es s es decir si este archivo si os fijáis tiene el glosario que a su vez dentro tiene el gloss div que a su vez dentro tiene el title la forma de ir entrando dentro de estos elementos es ir creando como una especie de lo que parece un array multidimensional o lo que realmente es un diccionario multidimensional vale un poco para que veáis que podéis escribir mj son podéis guardar en j son definitiva podéis hacer un poco vale lo que queráis siguiente cuestión siguiente cuestión vamos a ver primero en primer lugar es fuentes de consulta y en segundo lugar o sea dentro de que no dé tiempo o al contrario o sea el próximo día este es ese es el típico ejercicio que por ejemplo ahora mismo no podría improvisar pero el típico ejercicio que para atrás muy bien podemos resolver un trozo de la clase para hacer demostraciones acerca de eso entonces para empezar para empezar una fuente de información que te puedo recomendar aparte de que ahora luego te puedo pasar los apuntes que los tengo por ahí los tengo un poco desubicados pero en los pozos localizados te los puedo pasar el linkedin learning y estructuras de datos fundamentos de la programación estructuras de datos este es un curso fenomenal que te puedo recomendar y porque te lo puedo recomendar porque lo hecho yo no es broma ellos en este curso no lo he hecho yo vale lo hizo un autor norteamericano que es este de aquí el que parece en la bolita por detrás que simon halar dais y yo lo que hice es traducir ese curso al español entonces por esto digo que es un curso fenomenal porque tal cual estaba yo traduciendo el curso al castellano estaba diciendo de este curso está fantástico ballet entonces en este curso por ejemplo pregunto una pregunta insisto de que aparte de que te pase los apuntes del curso vale son los vídeos no puedo por los apuntes y que te va a decir quién es linkedin premium en la mar bueno igual también te lo digo te puedes registrar para una prueba gratuita de 30 días de linkedin premium y en y en esa prueba gratuita tienes tiempo de sobra para hacer este curso te lo digo porque el curso viene incluido gratuitamente con linkedin premium entonces pero tienes por ejemplo o sea un bloque del curso acerca de estructuras de datos de colecciones arreglos pegamos arrays tienes el comportamiento avanzado en correcciones na likes tienes un capítulo para comparar las listas con respecto a las a los arrays tienes un capítulo específico para pilas y colas tienes un capítulo para las parejas es que en su momento traducimos como picadillos y tienes otro capítulo para árboles y grafos entonces lo digo porque aparte del curso luego te puedo pasar claro supongo y por eso te digo que este curso y ahora mismo porque este curso si te fijas es de 2015 no no tengo ahora mismo de memoria en la mente pero de cara a prepararte unos ejercicios para próximo día lo que voy a hacer es los apuntes de este curso y preparar ejercicios quiero decir que ya que lo tengo fácil lo tengo cerca aparte de que te pase los apuntes para porque en estos montes habían una introducción habían de vez en cuando una serie de tablas comparativas esto es lo que te explicaba lo que es un árbol están los montones y los grafos y de vez en cuando de vez en cuando en el curso habían unas tablas comparativas de complejidad comparando la complejidad de de diferentes es que no mentir y a ver si lo pilló por aquí por ejemplo mira tenía un resumen con las ventajas y desventajas de colecciones con las ventajas y desventajas de listas vinculadas esto es lo que te digo que tengo en apuntes que te puedo pasar de las ventajas y desventajas de colas y pilas de las ventajas desventajas de las fragmentadas las que no son informes de los conjuntos de los árboles de búsqueda vale y todo eso entonces sin ningún problema podemos dedicar la próxima clase un trozo de la clase a estar hablando tranquilamente sí sí sí sí aquí está bueno una introducción vale pero ya no muy extenso pero se hace falta en los en los ejercicios de la semana que viene hablo de grafos más explícitamente ya está y sobre todo me interesa hacer no digamos explicar cómo son sino hacer algún ejercicio de carga dura es decir de por ejemplo leer un millón de registros de cada estructura datos escribir un millón de registros eso es tener un millón de registros para que veas cuántos segundos tarda en hacer cada operación poder no solo darte una lista sino demostrar en la práctica que estructuras de datos son más eficaces para hacer qué tipo de operaciones y cuáles son menos vale así que es más cosas más cuestiones tenemos que no tenéis por qué responder ahora mismo quiero decir que si era algo que podríais expresar en la clase de hoy pues mejor y si no me lo podéis decir durante el fin de semana ostras tras fe y payton hasta donde yo sé no estoy intentando recordar algún ejemplo donde se aplique eso es que lo único que se me ocurre así de repente es un archivo de efe que al ejecutarlo escriba un archivos a formato y escriba un archivo de payton para luego llamar mediante un exit a la ejecución de ese archivo de payton construido pero por ejemplo cortar es que me estoy acordando de una cosa me estoy acordando de una cosa de lo que me estoy acordando pero que tendría que buscar es de que el compilador de payton está escrito en fe entonces por eso había alguna operación que se podría hacer de payton llamando a fe pero tendría que buscar lo que quería buscar es la documentación la pregunta que me has hecho me recuerda un poco parece que te voy a hacer una foto pic pero verás que está relacionado me recuerda un poco a que en desarrollo de aplicaciones de android cuando creas una aplicación nueva de android tú le puedes crear con tres lenguajes de programación diferentes los tres lenguajes de programación diferentes son java que debería empezar a dejar de utilizarse göttling que es el lenguaje que debería utilizarse ife más más entonces la regla es que programar aplicaciones para android en temas más es más duro pero es más eficiente reservas a programar un programita sencillo para un teléfono móvil lo haces en java o en code link pero si se va a programar algo en teléfono móvil que tenga que ser muy eficiente los programas en temas más pero una vez más no estamos mezclando dos lenguajes en el mismo archivo entonces déjame buscarlo pero así de repente me suena que otra cosa que me suena es la ejecución de face pero la ejecución de ese hayes mira en la ejecución de ese 6 son aquí es como un gateway interface entonces para servidores web si yo vengo aquí aplicaciones aman ht docs no hace y bean yo puedo meter archivos hechos programados en fe o puedo meter archivos programados en python es decir y de hecho técnicamente puede meter archivos programados en visual basic y puedo meter archivos de lo que me dé la gana es decir la parte del face de un servidor web sirve para que el servidor no solo pueda ejecutar archivos interpretados tales como archivos php sino que pueda ejecutar archivos compilados tales como python o tales como archivos de hecho es una forma de poder programar lo que te voy a decir para una burrada pero no lo es poder programar páginas web en el lenguaje efe que en principio podríamos decir que el lenguaje efe no es nada apropiado no está diseñado para programar páginas web pero sin embargo estoy diciendo eso cierto evidentemente pero sin embargo el lenguaje efe para procesar el procesamiento de datos muy fuertes es más eficiente que lenguajes como por ejemplo php resines esta es que una web procese de una forma muy rápida un huevo de datos pues igual te vale la pena hacer un programa en cee compilarlo y meterlo dentro de un cg vale son usos un poco extraños de los lenguajes de programación pero bueno si en un momento dado están justificados pues están justificados evidentemente pero eso que me preguntas lo preguntas por algún motivo en particular porque quieres hacer algo en particular o cuéntame

Deja una respuesta

Tu dirección de correo electrónico no será publicada.