Documentos de Académico
Documentos de Profesional
Documentos de Cultura
Hola bienvenidos al mooc de introducción a Python, soy Leonardo Salom y voy a ser
vuestro profesor durante este curso. Los objetivos del curso es que aprendamos a
programar en el lenguaje de programación Python independientemente de los
conocimientos previos, si tenéis un background de, de informático pues te será más
fácil seguirlo, pero podrás seguirlo independientemente de esto, además
independientemente de la formación previa, da igual el nivel de formación que tengas e
independientemente de vuestra edad.
Para entender cómo funciona un ordenador tendremos que pensar que al fin de
cuentas un ordenador es como una calculadora muy compleja, esta calculadora tan
compleja es, lo único que hace son acciones que hemos ido preparando otras
personas, entonces la idea es que pasemos de ser usuarios de unas herramientas que
2
ya están hechas a desarrolladores, imaginaros que es como si, en un mueble ikea,
pues puedes diseñar
tu mueble como veis en las fotos y preparar vuestro, vuestro propio estante o coger
uno que ya está diseñado y ponerlo en vuestra casa.
El módulo incluye dos prácticas (una que cuenta para el progreso del curso y otra que
no), un examen de prueba y un examen de módulo. Si no has solicitado el certificado
no podrás acceder al contenido evaluable, con lo que no tendrás acceso a las
prácticas evaluables ni al examen de módulo, aunque puedes descargarte el fichero
máster con todas las prácticas de la sección de recursos de la página inicial del curso y
realizarlas sin que sean evaluadas.
El tiempo estimado para completar este módulo son 4 horas y el tiempo de visionado
de los vídeos alrededor de 40 minutos.
En el módulo reflexionaremos sobre las razones para aprender a programar y definiremos qué es un programa
informático, comentando las razones por las que hemos elegido Python para aprender a programar. Luego
comentaremos una serie de cuestiones prácticas sobre las herramientas a utilizar en el curso, como la navegación
por el sistema de directorios, la instalación del entorno Anaconda, el uso del intérprete de Python, qué son los
Júpiter notebooks y cómo descargar el material del curso para trabajar en local y cómo usar la interfaz de desarrollo
Spyder, para acabar hablando de la estructura de Python y de los tipos de errores que aparecen al programar.
Hola bienvenidos al modo de programación en Python, en este vídeo vamos a ver por
qué programar. Hay dos motivos principales para programar, uno es desarrollar
aplicaciones para que los usen otros ya sean aplicaciones web de móvil o simplemente
aplicaciones de PC, estas aplicaciones normalmente requieren una preparación más
específica y una serie de objetivos y suelen ser aplicaciones genéricas para un cliente
o, o un usuario final. O podemos modificar una serie de aplicaciones existentes para
que se adecue a nuestras necesidades igual hay una herramienta que hace casi lo que
queremos, pero si sabemos programar podremos modificarla para crear exactamente
lo que queremos o en tareas cotidianas que no sean muy complejas podremos hacer
nuestras propias aplicaciones desde cero que resuelvan estas tareas y las
automaticen.
Tenemos que hacer un cambio de paradigma de usuario a desarrollador, como
usuarios nosotros somos consumidores de una serie de herramientas como puede ser
3
un martillo y podemos hacer lo que hace la herramienta, clavar clavos, en cómo
desarrolladores haremos nuestras propias herramientas y si por ejemplo no queremos
un martillo, pero necesitamos unas tijeras no las tenemos haremos nuestras propias
Tijeras.
Un programa a fin de cuentas es una serie de instrucciones que vamos a seguir paso
a paso, hasta realizar una tarea. Un ejemplo de un programa para humanos es una
receta de cocinar, por ejemplo, si tenemos un enlace a una receta y en la que vemos
los ingredientes que se, del plato que queremos hacer, el tiempo, un resumen y luego
una elaboración. Una de los problemas que tiene es que si nosotros le damos esto a
un ordenador en él no es capaz de abstraer estos pasos que están escritos y hacerlos
el por sí mismo, en cambio nosotros vemos esto y lo abstraemos y seríamos capaz de
acabar teniendo nuestra paella más o menos, es una receta por un ordenador, es una
receta para un ordenador igual que para nosotros es una lista de tareas que el
ordenador
tienen que hacer una detrás de la otra.
Lo que vamos a hacer en este curso es pues precisamente eso hacer recetas para que
nuestro ordenador las haga y al final tengamos nuestra paella.
Una de las principales razones es porque es opensource, esto quiere decir, como veis en
el cartel, entre otras cosas que es gratis, no necesitáis pagar para utilizarlo.
Otra es que es multiplataforma, y lo podéis usar tanto en Mac, como en Windows, como
en Linux, esto nos hace muy cómodo el desarrollar para las distintas plataformas y en
nuestra aplicación o nuestro script, funcionen todas ellas.
Luego es muy parecido a leer y escribir en inglés, su creador que era un holandés,
Guido van Rossum, se encargó de que una de las cosas que tuviera es que fuera un
lenguaje muy similar a la escritura en inglés y esto hace que sea muy fácil leerlo y muy
fácil de entenderlo. Además, es fácil de instalar como veremos en un vídeo a
continuación simplemente es seguir uno, unos botones de siguiente y lo tendremos
instalado en nuestras máquinas. Luego además tiene muchas librerías para afrontar
prácticamente cualquier problema, a día de hoy pues puedes resolver problemas
inteligencia artificial, de Big data, data science, testing, web, Scrapping o simplemente
realizar tareas más sencillas como mover archivos o copiar archivos o mandar correos.
4
Para navegar por sistema de directorios tenemos dos opciones, podemos usar el
explorador de archivos de nuestro sistema operativo, o bien podemos usar el terminal.
Vamos a ver un ejemplo de cada uno, para usar el explorador de archivos, que es el
primero ejemplo que, dicho, podemos darle a aquí a esta carpeta de aquí que nos
abrirá en el explorador de archivos o abrirla con Windows como vimos en el medio
anterior.
Aquí vemos el entorno de carpetas y de archivos que tenemos en nuestro equipo y
aquí tenemos la ruta de del archivo, de la, de dónde estamos, por ejemplo, si venimos
aquí, a disco local ce, entramos a una carpeta cualquiera, "oneDriveTemp", esto que
pulsamos aquí que sale, es la ruta del sitio donde estamos, si entramos aquí dentro
vemos que va cambiando la ruta y va y cada vez que entramos una carpeta va
añadiendo barras y el nombre de la carpeta en la que hemos entrado y como vemos,
podemos ver y está, al estar en Windows el disco empieza por una unidad, un nombre
unidad, ce dos puntos y una primera contra barra porque estamos en el disco ce, en el
caso de Windows los discos vienen nombrados así, con letras la c, la zeta depende de
vuestro equipo tendrá, pero normalmente tendréis una unidad ce que es, será la raíz y
donde tendréis vuestros archivo.
Cuando queremos navegar por esta por estas rutas de archivos y por ejemplo
queremos acceder a esta carpeta, de "Adobe" y queremos acceder a hacer a ce
program fails adobe, pero no podemos acceder directamente porque estamos
trabajando con el terminal, para esto abriremos un terminal abriendo terminal, luego
escribiendo comand y nos sale símbolo del sistema, como podemos ver, aquí nos sale
la ruta en la que estamos ce dos puntos barra, users barra polimedia y en este, le
decimos dir, nos sale los nombres de los, de las carpetas y de los archivos que están
en esta ruta como pueden, es muy importante tener en cuenta estas dos primeras que
salen aquí punto y punto punto. Punto hace referencia a la carpeta en la que nos
encontramos actualmente, es decir, a c users polimedia y punto punto hace referencia
a la carpeta superior, en este caso ce dos puntos barra y users, sin polimedia.
Luego podemos ver que hay algunas carpetas y archivos que empiezan por punto
estos son archivos ocultos que nos, que normalmente el explorador de archivos no nos
va a mostrar a no ser que lo hagamos intencionadamente, luego tenemos una serie de
carpetas y de archivos, la diferencia entre una carpeta y archivo es que cuando
hacemos hecho dir, los directorios nos los marca como dir aquí y los archivos nos los
marca como dir. Bien, si nosotros ahora por ejemplo queremos entrar a carpeta music
ponemos cd espacio y el nombre de la carpeta que hemos dicho, music y veremos que
hemos cambiado nuestra ruta a users polimedia music podemos una vez más hacer dir
y ver que en este caso en concreto nuestra carpeta de música está vacía y tenemos
como hemos dicho punto y punto punto, si queremos volver a la carpeta en la que
estábamos que es la carpeta superior, haremos ce si es directory, punto punto y esto
lo que hace es volvernos a la carpeta anterior, no a la carpeta anterior sino a la carpeta
superior, es importante que esto no vuelva hacia atrás, sino que va subiendo niveles
en las carpetas.
Bueno, y esto es todo respecto a la exploración de archivos, muchas gracias.
jupyter notebooks es una aplicación web de código abierto que nos permitirá ejecutar
código en Python dentro de nuestro navegador, anteriormente se llamaba IPython,
pero le cambiaron el nombre recientemente a jupyter notebooks y nosotros lo
llamaremos jupyter directamente, si es posible que veáis en internet alguna referencia
IPython que sepáis que es exactamente lo mismo. Los archivos de jupyter notebooks
permiten combinar código de programación, texto, imágenes y ecuaciones
matemáticas, todo esto combinado en un solo documento permite presentarlo y es y se
8
usa mucho para congresos y para documentos científicos. En la tecnología, en la data
science se usa en los jupyter notebooks en distintas etapas data science tanto para
preparar los datos como para luego mostrarlos y entonces es importante que sepáis
cómo funciona, además es muy adaptable como es una aplicación web tenemos la
opción de instalar en nuestra propia máquina y ejecutarlos de nuestra máquina en
nuestro navegador o podemos acceder a un servicio remoto que nos provea este tipo
de notebooks.
Hay algunos servicios remoto gratuitos como azure notebooks, Google colab, Watson,
Kyso, ModeAnalytics, Quantopian y hay muchos más, durante el curso usaremos uno
de ellos donde alojaremos los problemas y los ejercicios para que podáis acceder a
ellos si no tenéis posibilidad de instalaros Python en vuestros equipos.
Si queréis tanto para seguir los vídeos como parecer los problemas, en cada una de
las unidades tenéis el enlace para descargar el Notebook de Jupyter y trabajarlo en
local o para acceder a Binder en la nube y trabajar en la nube, pero en ambos casos,
id descargando esto video por video, o problema problema es bastante más incómodo
que descargarse todo el paquete y trabajar en local desde el paquete completo. Para
eso tendréis debajo de este vídeo los enlaces que tengo aquí, entonces estos enlaces
haciendo clic sobre ellos se descargan directamente y sino con el botón derecho del
ratón sobre el enlace, cuando estéis en el navegador, por ejemplo, aquí botón derecho
del ratón le podéis dar a guardar enlace como y guardar el fichero.
Lo que se os guardará en descargas serán estos ficheros Zip fijaos que tenemos el pic
Python Mooc Problems Master y Python Mooc Companion Máster este es para los
ejercicios y es para los vídeos. Bien haciendo doble clic sobre el zip veréis que tiene
una carpeta dentro y esta carpeta lo que tenéis que hacer es arrastrarla, a donde
queréis trabajar, yo normalmente la arrastró a documentos, pues cojo esta carpeta y la
arrastras
a documentos que yo ya lo he hecho, y lo mismo se hace volviendo para atrás con la
otra. Si tenéis Mac como sistema operativo pues tenéis que abrir el fichero zip y
arrastrar
la carpeta donde queréis trabajar. Bien yo ahora sí me voy a documentos, si os fijáis
aquí en documentos yo tengo estas dos carpetas.
Bien ¿cómo accedo a trabajar con esas carpetas? Bueno hay bastantes maneras, si
tenéis el Anaconda ya instalado podemos venir aquí, ir aquí al Anaconda, a ver el
navegador de Anaconda pero una vez que está instalado el Jupyter Notebooks es
mucho más cómodo ir directamente a Jupyter Notebooks vamos aquí, vamos a lo
mismo Anaconda, pero en vez de seleccionar el navigator nos vamos aquí, un poco
para abajo que mi portátil no se ve, pero ahora os lo enseño aquí tenemos veis Jupyter
Notebooks Anaconda 3, abro esto fijaos que realmente lo que hace Jupyter
Notebooks es lanzar un script de Python, con lo cual se queda abierta una ventana,
9
con la consola por detrás y esta ventana lo que hace es en el navegador que
tengamos abierto, nos va a lanzar un acceso a nuestro disco duro local, en el cual
podemos trabajar
con el Notebook, que pasa que nos abre la carpeta general, por defecto entonces
tenemos que irnos a documentos y aquí ya elegiríamos Python Mooc Companion o
Python Mooc Problems, si fuéramos aparece un Mooc Problems, está muy claro
porque tenemos aquí pues para cada semana, los ejercicios y dentro de los ejercicios
los ficheros que hacen falta para trabajar, aquí podemos navegar hacia atrás, por
ejemplo, en la semana siete que trabajamos con un fichero de texto que tiene el quijote
y otro en ansi, pues los tenemos aquí. Para acceder al Jupyter Labs simplemente le
damos aquí, a ejercicio ipynb y fijaos que tenemos ya aquí nuestro Jupyter Lab para
trabajar en local, mucho más fácil. A partir de aquí el próximo día que queremos
trabajar, pues lo mismo, abrimos de la misma manera y tenemos todos los ejercicios
aquí no tenemos que estar descargando los 1 1, descargando ficheros, lo que haga
falta, está todo ya aquí bien, igual que habéis visto es el de Mooc Problems Master,
tenemos el de Mooc Companion máster, este es un pelín más lioso porque los Jupyter
Labs están nombrados de acuerdo con el número de vídeo cuando se hizo, entonces
tenemos que el ocho es el primero, ocho nueve y luego ya tenemos diez, once, doce,
con respecto a los videos es fácil
El script de python que lanza los Jupyter Notebooks crea un servidor local de web al que
accedemos luego desde el navegador, por eso debe permanecer abierta la ventana de la consola
mientras los usamos.
Para localizar qué Jupyter Notebook tenéis que abrir para cada vídeo, en la parte superior de
la pantalla de trabajo que aparece en el vídeo está el nombre del Notebook.
https://github.com/leosamu/pythonMoocCompanion/archive/master.zip
https://github.com/leosamu/pythonMoocProblems/archive/master.zip
10
el izquierdo, perdón, que era antes el izquierdo, y en más vamos
a decirle abrir ubicación de archivo. Vale, cuando veamos esa
ubicación de archivo, esta es la carpeta donde tengamos
todo el Anaconda instalado, aquí veremos que tenemos Jupyter
Notebook Anaconda, esto es un acceso directo al Jupyter Notebook
que hemos usado antes, y que nos lleva a la ruta general. Entonces
este Jupyter Notebook, podemos darle con control+C control+V podemos
copiarlo, como estamos en una carpeta de sistema nos pedirá
permiso de administración, vale lo vamos a hacer dos veces,
vamos a copiarlo dos veces, con control+V dos veces.
Porque aquí lo que vamos a hacer es en la copia uno le voy
a dar a F2, y voy a decirle que que esto serán los vídeos
y esto me pide permisos, porque estamos como en una carpeta
del sistema, le voy a dar F2 otra vez y aquí voy a ponerle los problemas.
Entonces lo que puedo hacer aquí es cambiar la ruta, vale, voy
a irme a la carpeta cualquiera vamos a ir por ejemplo la de
los problemas, doble clic, voy a pinchar aquí arriba voy a coger
la ruta completa con control+C la copio, ahora me voy con alt-tab
de nuevo a esta carpeta y la que cogido es la de los problemas
pues me vengo al de problemas, botón derecho del ratón y le
digo qué propiedades, y en propiedades fijaos que aquí tengo
destino, aquí este es el comando que se ejecuta que es la ruta
con el Jupyter Notebook script y aquí donde pone usser profile
esto lo voy a copiar, lo que hay entre comillas, lo voy a sustituir
con control+V por la ruta que he copiado del otro lado, voy
a darle aquí aceptar, vale, le doy permisos y a partir de ahora cada
vez que yo ejecute este de problemas con doble clic,
fijaos que se me abre la ventana de comandos que se va a quedar
abierta, se va a quedar aquí abajo abierta mientras sigamos
utilizando el Jupyter Notebook porque eso es lo que nos va a permitir
lanzar, vamos al navegador y aquí en el navegador que estemos
usando se nos va a lanzar una ventana en local, pero fijaos
que ya se abre directamente con los problemas, no hay que navegar
por las carpetas, sino que ya está abierta a la
carpeta de los problemas, podemos hacer exactamente lo mismo
con el de vídeos. Tenemos que venir aquí, primero irnos aquí
a la carpeta para cogerla, vamos para atrás vamos a el de
vídeos, y una vez ya estamos dentro hacemos clic aquí arriba con control+C
lo copiamos, y aquí en vídeo botón derecho del ratón propiedades
y aquí entre las comillas donde pone tantos por ciento y Usser Profile
todo lo que hay entre las comillas, los sustituimos por la
ruta, le damos a aceptar, permisos de administración y si ahora
hacemos doble clic aquí, nos abrirá otra ventana fijaos que
aquí tengo las dos ventanas del sistema, dos consolas y aquí
me abrirá ahora en un momentito otra pestaña del navegador con
el nuevo fijaos, con el nuevo Jupyter Notebooks local, donde tengo
todos los problemas que hemos visto de los vídeos, con esto
11
ya cada vez que queramos acceder a esto, podemos venir aquí
irnos a Anaconda y si vamos para abajo, veremos que tenemos
aquí la de problemas y la de vídeos que sólo tenemos que
hacer clic sobre ella para acceder directamente.
La estructura de Python
Video 12 La estructura de Python https://youtu.be/nj70D_nbWO4
13
este trozo de código sirve para hacer esto otro y nos viene
muy bien para, no en el momento que estamos desarrollando, pero
sí cuando más adelante vamos a coger el código poder entenderlo
mejor. Entonces los dos tipos de comentarios que hay son los
comentarios monolínea como esto de aquí que como veis empiezan
por almohadilla y aunque pongamos código delante
todo lo que va detrás del almohadilla pasa a estar comentado y Python no lo leerá pero
nosotros no podemos leer para apuntarnos cosas. Si queremos hacer muchas líneas
de comentario se usan tres comillas simples al principio y al final que esto hace una
cadena de texto que Python no lee pero que nosotros podemos leer.
Las frases nosotros como vimos en uno de los vídeos anteriores en el interprete
podemos ir lanzando en funciones línea línea como por ejemplo aquí abajo. Veis aquí
le asignóa la variable "a" el valor cinco o que se sea diez partido "a".
Miro el valor de "c" en formato cadena. Esto va muy bien
ir línea línea porque nosotros por ejemplo si esto no es lo
que queríamos podemos aquí cambiar el diez por un ocho
volver a ejecutar esta línea,
volver a ejecutar esta línea y esta línea,
cambiar y que el resultado es inmediato esto es
muy cómodo para hacer pruebas de cosas sencillas pero no siempre
es lo óptimo entonces podemos igual que cuando escribimos un
texto organizarnos por párrafos. Los párrafos o scrips
podemos o bien tenerlos un archivo aparte como veis aquí el
ejemplo que hace exactamente lo mismo que las tres líneas
de antes solamente que las ejecutará las tres árabes o en
el caso de júpiter podemos tenerlas todas en un cuadro de
código entonces cuando nosotros ejecutemos este cuadro ejecutará
esta línea, esta línea y esta línea una detrás de la
otra sin esperar y sin pausar en ningún momento.
Otra cosa muy importante son las variables, las variables son
los contenedores de los valores que van a servirnos para resolver
los problemas en Python por ejemplo. un tipo de variable numérica
pues almacena un cero, un uno, un dos o un tres, el valor que queramos darle
las cadenas sirven para almacenar texto. Los diccionarios es
un tipo de variable muy especial que algunos conoceréis como
json o jason que sirven para almacenar una clave y un valor.
La lista sirven para listar objetos como su nombre indica y
se abren con corchetes y se cierran con corchetes y ponéis dentro
el valor que queráis y las tuplas son un tipo especial de
lista y va en lugar de con corchete las declaramos como variable con
paréntesis. Estos tipos de datos lo veremos más adelante
de forma específica. Como podemos ver, para asignar el valor a una
variable lo que hacemos es usar el símbolo igual
y el nombre de la variable entonces nombre variable igual el
valor que queramos almacenar y eso lo que hace es guardar ese
cero dentro de la palabra numero. La cadena igual
el texto hola mundo y eso nos guardará eso cuando nosotros
14
ejecutamos esto dentro de cada una de estas palabras tenemos
el error este ha dado por este carácter extraño de aquí
cuando nosotros ejecutamos esto dentro de cada una de estas variables
tenemos los valores que tenemos aquí. Las constantes
como por ejemplo el número pi, la gravedad... son muy útiles
cuando queremos hacer una serie de cálculos y nosotros
queremos acceder a una serie de números que van a ser siempre
los mismos como por ejemplo en este caso pi o la gravedad
en Python no existen constantes como tal pero
sí que hay una convención de nomenclatura y es que las variables
que nosotros ponemos todas en mayúscula quiere decir que el
contenido es una constante y no deberemos cambiar su contenido
a lo largo de nuestra ejecución y esto es todo por este vídeo.
Si quieres puedes descargar el texto de el Jupyter notebook utilizado. Para reproducir el proceso paso a
paso puedes hacer click con el botón derecho del ratón para descargar el Jupyter notebook y ejecutarlo en
local (recuerda usar "guardar enlace como" para guardarlo con extensión .ipynb para abrirlo luego con
Anaconda) o conectarte al Binder de la lección para ejecutarlo en la nube.
A partir del minuto 2'57" hay un error, obviamente 3+5=8 no 7. Pero recordad que el
objetivo del vídeo es mostrar cómo funciona binder, y como debéis introducir los datos
en él.
fichero
Resumen
En el módulo hemos reflexionado sobre las razones para aprender a programar y
definido qué es un programa informático, comentando las razones por las que hemos
elegido Python para aprender a programar. Luego hemos visto una serie de cuestiones
prácticas sobre las herramientas a utilizar en el curso, como la navegación por el
sistema de directorios, la instalación del entorno Anaconda, el uso del intérprete de
Python, qué son los Jupiter notebooks y cómo descargar el material del curso para
trabajar en local y cómo usar la interfaz de desarrollo Spyder, para acabar hablando de
la estructura de Python y de los tipos de errores que aparecen al programar.
El tiempo estimado para completar este módulo son 4 horas y el tiempo de visionado
de los vídeos alrededor de 26 minutos.
19
En las prácticas del módulo obtendremos el tipo de diversas variables, asignaremos
distintos tipos a los datos introducidos con el comando input, depuraremos expresiones
matemáticas y concatenaremos cadenas.
Las Variables
Video 14 Las variables https://youtu.be/xfTjY3qI6D0
Tipos de Datos I
Video 15 Tipo de Datos I https://youtu.be/ilyic4oJcmc
Según el vídeo, entre los minutos 2'20" y 2'24", se declaran dos tipos de enteros. Esto se debe a
que en el vídeo se emplea Python 2, existen dos tipos de enteros (int para números "pequeños" y
long para números "grandes"). Sin embargo, en Python 3, se han unificado bajo el mismo tipo int,
pudiendo almacenar números con una longitud ilimitada, bajo el mismo tipo.
Tipos de Datos II
Video 16 Tipo de Datos II https://youtu.be/WObUmGBUb1g
Hola en este vídeo vamos a seguir hablando de los tipos de
datos, en concreto algunas funciones que nos sirven para diferenciar
identificar los tipos de datos. La primera de ellas que vamos
a ver es la función type, la función type como aquí tengo
lanzando la función type y dentro un valor, nos va a decir
el tipo de datos al que corresponde, como veis aquí nos dice
int, aquí nos dice float, que significa real, aquí nos va a decir
complex, esto es una cadena que es str
esto es una lista,
una tuple o un diccionario, es tan sencillo como type el valor
o variable que queramos saber el tipo de datos que alberga,
y nos dirá el tipo de datos que tiene, es muy útil cuando
queremos hacer una serie de operaciones y no sabemos que es lo
que nos está llegando, lanzamos type vemos que es lo que hay y a partir
de ahí podemos empezar a trabajar. Otra función muy útil
es help, la función help aquí tenemos algunos ejemplos
dado un tipo de datos o una variable, si la ponemos con la función
help, help y entre paréntesis el tipo de datos o variable por
ejemplo aquí help de int, veis que nos lanza un texto bastante
largo y es una ayuda respecto al tipo de datos int, aquí nos
dice una explicación del tipo de datos int, que te dice que sirve
para guardar enteros, convierte un número a cadena, porque si
tu le pasas int y un y un texto intentará convertir el contenido
del texto a un entero y una serie de métodos que vienen acompañando
a la función, a la función o al objeto int,
lo mismo para las cadenas y para los diccionarios, simplemente
help y entre paréntesis aquello que tengamos dudas de cómo
funciona y muchas veces con la ayuda que vienen python
no necesitaremos buscar en internet cómo hacer las cosas porque
el propio python ya nos dice que es lo que podemos hacer con
ello, aquí como por ejemplo con los int veis aquí tenemos
el denominador y el imaginario para el caso de que tengamos
un número complejo, el numerador en el caso de la parte racional
24
y la parte cumple real de un número complejo, esto
es para la parte, los números reales, podemos hacer distintas
cosas y nos lo va a ir diciendo aquí. Otra función muy útil
la función de dir que es muy parecida a la de help pero solamente
nos va a listar aquella funcionalidad y aquellas
objetos que pertenecen a nuestro tipo de datos o nuestra variable,
por ejemplo, en el caso de hacer un dir de int si os
dais cuenta nos saca todas las atributos y funciones
que dependen de la función int pero si por ejemplo
yo creo una lista,
de números
y hago un dir de la lista
veis nos dice las funcionalidades que tiene la propia lista,
no hace falta que sea, que le pasemos un diccionario o una lista
el tipo de datos que queremos saber el dir, le podemos pasar
directamente la variable y nos va a devolver toda la funcionalidad
que podemos lanzar a partir de esa variable.
Por último vamos a ver funciones de conversión, estas funciones
de conversión nos sirven para convertir de un tipo de datos
a otro, siempre y cuando se cumplan una serie de condiciones.
El tenemos, un número del texto del trescientos
cuarenta y cinco y si nosotros intentamos al trescientos cuarenta
y cinco que es un texto, con más de tres vemos que nos va a dar
un error, porque como hemos visto en otros vídeos no podemos
sumar cadenas y números, en cambio si usamos la función de
conversión float, la tenemos instalada aquí la segunda float,
con la con el número en texto, la variable que teníamos el
trescientos cuarenta y cinco en formato de cadena, antes de
hacer la suma vemos que nos da trescientos cuarenta y ocho
coma cero, esto es porque esta función ha convertido este trescientos
cuarenta y cinco en trescientos cuarenta y cinco
coma cero porque lo hemos puesto float, si en lugar de float usáramos int,
sería trescientos cuarenta y ocho, porque nos pondría parte decimal
Por último veremos una función que usaremos mucho durante
el curso que se input, esta función input nosotros le pondremos
un texto que queremos que vea el usuario y le asignaremos una
variable, en el caso de en este caso en concreto, cuando yo ejecuto
esta línea vemos que nos sale un texto, dice dime tu edad
y una caja de texto, y aquí yo puedo poner un cinco, no es verdad
entonces dentro de edad del usuario aquí añado otro trozo de
texto y escribo edad del usuario vemos que lo que hay dentro
tenemos un cinco, no os habéis dado cuenta de que hay comillas
al principio y al final, si hacemos un type de la variable nos
dice que es una cadena, pero tendremos que tener cuidado con esto
porque la función input siempre va a recoger el texto o el
número que nos ponga el usuario en formato de cadena, si queremos
trabajar con números tendremos usar estas funciones de conversión
25
que acabamos de ver para tener el tipo de datos que nosotros
queramos, y esto es todo.
Expresiones I
Video 17 Expresiones I https://youtu.be/cvn0xH4F9mI
27
Expresiones II (Video 18)
Video 18 Expresiones II https://youtu.be/_uDM1rGR6-4
Hola este es el segundo vídeo sobre expresiones. En este vídeo vamos a hablar sobre
las operaciones lógicas o expresiones lógicas. Las expresiones lógicas que vienen del
álgebra de boole nos sirven para hacer operaciones con distintos elementos por
ejemplo si el dentro de la variable tres guardamos un tres, y dentro la variable cinco
guardamos un cinco, una de las cosas que podemos hacer es usar comparadores digo
tres es mayor que cinco, nos va a decir false porque es una expresión lógica que nos
dice que tres como en este caso no es mayor que cinco nos devuelve false, si en lugar
de mayor hago mayor o igual también nos dice que no es mayor o igual que cinco se
cumpliría true si tres y cinco tuvieran el mismo valor o tres fuera mayor.
Al contrario si le digo que tres, si le pregunto si tres es
menor que cinco me dice true, esto sí que es verdad
lo mismo pasa con tres es menor o igual que cinco.
Aquí hay un un comparador de igualdad que es con dos
iguales no con uno y no y es importante no confundirlo porque
con un solo igual haríamos una asignación de lo que tengamos
en la variable cinco dentro del tres y con dos lo estamos comparando
entonces aquí tres igual igual a cinco hace false en cambio
tres igual a cinco lo que hace es, como vemos aquí,
yo miro lo que hay dentro de tres,
ya no hay un tres ahora hay un cinco aquí hay que tener mucho
cuidado. Luego hay otro comparador que es el "is" que sirve para
comparar si estamos apuntando al mismo objeto, esto es un poco
es como el igual igual que estamos viendo hace
un momento pero más fuerte, entonces por ejemplo si preguntamos
si a es lo mismo que a por dos en este caso nos va a devolver
true porque esto es una cadena que pone aa y esto es otra cadena que
es a por dos que están en memoria y están libres y no,
no están en ningún sitio, en cambio y pongo aquí la letra a
igual a a y pregunto si a es igual que la letra a por dos,
como esta no es la misma que esta esto nos debería dar false
aquí tenemos el false está el resultado si bien aparentemente es el mismo
a parece ser lo mismo que a pero realmente por
detrás python los distingue porque no están apuntando al
mismo sitio y esto nos servirá para diferenciar pues eso cuando
los objetos sean casi lo mismo, valgan el mismo lo mismo pero
no sean el mismo objeto. Otros conectores lógicos aquí me
ha añadido la variable verdadero igual a true y la variable
falso igual a false para hacer esta pruebas y que sea más
sencillo de entender en español entonces los conectores lógicos
son el y el o y el no. El y que se escriben inglés and
sirve, dirá true cuando los dos lados del
conector sean verdaderos entonces en este caso verdadero
y falso como los dos no son verdaderos nos va a dar false.
Solamente dará verdadero en el caso de verdadero y verdadero
28
el resto de casos verdadero y falso o falso y verdadero nos
van a devolver falso, luego tenemos el or o o
que nos devolverá verdadero siempre y cuando uno de los dos
lados del conector sea verdadero por ejemplo verdadero o falso
nos va a dar verdadero porque tenemos un verdadero aquí
y lo cambiamos de orden
falso o verdadero
también nos devuelve verdadero pero en cambio falso o falso
nos devuelve falso porque como ninguno de los dos es verdadero
falso falso, es falso y por último tenemos el not que lo que hace
es cambiar lo que pongan aquí no verdadero pues es falso no falso es verdadero.
Esto sería todo sobre las expresiones lógicas en Python.
Resumen
En el módulo hemos visto el concepto de variable y los distintos tipos de datos que
pueden utilizarse en Python, desde los sencillos como los números enteros a los más
complejos como los diccionarios o las tuplas. Hemos visto también las expresiones
matemáticas y su precedencia y las expresiones lógicas con sus operadores AND, OR
y NOT.
El tiempo estimado para completar este módulo son 4 horas y el tiempo de visionado
de los vídeos alrededor de 42 minutos.
29
En el módulo introduciremos el concepto de flujo de ejecución y los distintos tipos que
existen, empezando con el más simple, el flujo secuencial. Explicaremos luego como
utilizar decisiones en Python, y cómo permite desviar el flujo del programa, para
acabar tratando los flujos iterativos, donde introduciremos los bucles for y while. Luego
comentamos dos comandos básicos, print() para mostrar resultados e input() para
introducir parámetros. Veremos también las cómo se usa el indentado del código para
agrupar las instrucciones y cómo incluir en el código mecanismos para tratar los
posibles errores de ejecución que puedan producirse.
En las prácticas del módulo trabajaremos la utilización del comando input para asignar
valores a variables y aprenderemos a encontrar el mayor de dos número introducidos.
Flujos de programación.
Video 19 Flujo de Programación I https://youtu.be/v3-HdZyZrFs
33
Mucha gente que viene de otros lenguajes, lenguajes de programación le cuesta el
trabajar para cada elemento de una lista porque está acostumbrado a trabajar con
rangos, lo que Python llama rangos, por ejemplo del uno al diez, del uno al cinco si
queréis usar los for como se trabaja con c++ con java script deberemos usar la función
range, la función range le damos un número y os dais cuenta aquí dice que es un
rango
del cero al cinco, si esto lo convertimos en lista con el conversor veis que hace cero
uno dos tres y cuatro, lo mismo pasa con el range del dos al siete, que convertido en
lista es dos tres cuatro cinco y seis, entonces otra forma de recorrer esto es para la
variable a patatas decirle para cada índice dentro del rango de cero a la longitud de
patatas, describiremos la letra que hay dentro de ese índice, vale, esto lo ejecutamos,
esto lo que hace es, vamos a ir por partes, en a tenemos patatas, la función length de
a, que con la función help podríamos descubrir nos dice la cantidad de letras que tiene
patatas, vale, hacemos un range de cero a length de a, es esto que si lo listamos para
poder ver lo que vale es los valores del cero al seis, entonces esto lo que está
haciendo es para un, los números que hay dentro de esta lista del cero, el uno, dos,
tres, cuatro, cinco y seis va a escribir, a ir escribiendo print el valor que haya en ese
índice, entonces si nosotros miramos lo que hay en a de cero ahí la p y así esto va a ir
incrementando el número cero, uno, dos y así poco a poco y escribiremos la palabra,
es otra forma de hacer este bucle for que tenemos aquí arriba, que en el caso de
algunos lenguajes de programación
es lo más normal, en el caso de python si queremos trabajar con índices se hace así.
Una palabra especial que tiene python en los bucles es break y es que cuando
llegamos, ejecutamos esa instrucción en la que pone el break se sale del bucle
completamente, aquí tenemos esta iteración, entonces lo que tenemos aquí, aquí
estamos ya combinando muchas cosas, tenemos el bucle for con patatas para cada
letra de patatas escríbeme la letra pero aquí tengo un condicional de si la letra es una
t, break, esto lo que hace es va escribiendo hasta que llega la t y entonces
una vez llega a la te se sale completamente del bloque este y escribe
la siguiente instrucción, por otro lado muy parecido al break
pero no tan, no salta todo el bloque
sino que lo que hace es saltarse esa iteración tenemos el
continue, continue lo que hace es salta al principio del bloque
for o bloque while sin ejecutar lo que viene después, aquí
por ejemplo, como veis no ha escrito las as esto es porque tenemos
que si la letra es una a, hace un continue esto se salta esta
instrucción de aquí, que es la que está escribiendo las letras,
y vuelve aquí al principio, y al final del bloque escribimos
siguiente instrucción. Por último avisaros que
hay que tener cuidado con los bloques infinitos, en el caso
del while si tenemos una condición que siempre se cumple
que es true pues se rompería el programa y se quedaría colgado
dentro de ese bucle en este caso gritando socorro,
y esto es todo.
34
En el vídeo, en el minuto 0'47" hay un error en el diagrama. Deberíamos comprobar si a>0 o, en el caso de
comprobar si a=0 los caminos indicados deberían ir al revés.
35
Por eso aquí nosotros tenemos el valor... al valor de la variable es y después de los
dos puntos hay un espacio antes de representar el cuatro, vale. Si nosotros
quisiéramos formatear
esto como nosotros quisiéramos o poner en el cuatro aquí
en medio, tenemos varias opciones como:
Podemos partir la cadena
y poner aquí una cosa,
el valor de la variable
es mayor que
tres, por ejemplo. Esto sería una forma de formatearlo. No
hace falta que pongamos espacios al principio al final ya que
no lo añadir el print cuando ejecutemos esto vemos que dice
"el valor de la variable cuatro", aquí en lugar de un número
36
podríamos poner una variable, es mayor que tres, igual que tres.
Podemos poner un número, una variable... Como he dicho en algunos
vídeos anteriores, en el caso de Python 3 podemos usar los
f strings. Los f strings, como dije en el vídeo en el que
explicaba, son cadenas que empiezan por f antes de declarar
la cadena. Entonces el valor de la variable y entre corchetes
la variable que quisiéramos, en cuatro en este caso,
es mayor que, entre corchetes.
Esto dentro de un print
ahora es exactamente lo mismo que arriba, pero permitiéndonos
la libertad de este espacio que nos que estaba añadiendo
quitarlo y darle el formato que nosotros queramos. Entonces, por ejemplo
así vemos que no añade automáticamente el espacio detrás
de los dos puntos. Es una forma de controlar nosotros exactamente
qué es lo que está saliendo por pantalla.
Luego, otro comando que se usará mucho en unos ejercicios es el input
que lo he comentado con anterioridad. El input, nosotros si lo
ejecutamos tal cual, nos sacará un cuadro de texto donde podemos
rellenar un valor y vemos que la salida es este valor.
Este input suele ir acompañado con un mensaje de texto en
el que le pedimos el usuario un dato. Escribe
un nombre y entonces escribo mi nombre
y vemos que la salida es Leonardo. Esto es porque esto devuelve
(...) lo que hayamos escrito el usuario y lo podemos guardar
en una variable. La variable nombre igual
a esto de aquí. Entonces, yo cuando escribo Leonardo
y si hago así y miro qué es lo que hay dentro del nombre,
vemos que hemos guardado dentro de nombre Leonardo.
Vale. Nosotros en lugar de hacer esto, pues como he dicho antes
podría tener un print en mi variable.
37
Entonces, estamos sacando como resultado esto de aquí.
Por ejemplo, otra cosa que nos puede pasar es sabiendo
que una maratón son cuarenta y dos coma dos kilómetros escribiremos
un programa que le preguntará al usuario cuántos minutos
tardó realizarla y con eso calculará el ritmo medio al que corrió.
Entonces, si nosotros sabemos que la distancia de la maratón es cuarenta y dos coma
dos, que lo hemos declarado como una constante,
podemos aquí preguntarle al usuario. Con un input
lo vamos a guardar en una variable se va a llamar ritmo medio,
cuántos minutos tardas.
Entonces, este ritmo medio nos acordaremos por lo que hemos
comentado anteriormente que el imput lo que coge es una cadena.
Entonces, este ritmo medio
que queremos poder operar con él, lo tenemos que hacer una conversión
a float, por ejemplo, porque sino no podremos hacer operaciones matemáticas
con él. Bien, una vez tenemos el ritmo medio con un
número real, que es lo que nos resuelva el usuario,
podremos hacer el cálculo. Entonces, podemos hacer un print...
No, ritmo medio no, esto es tiempo.
Pongo ritmo medio
es, como he dicho puedo hacerlo directamente con una coma, y en este
caso sería distancia
maratón partido
tiempo. Si os dais cuenta tiempo lo he puesto en minúsculas y distancia maratón
en mayúsculas, vale. Si ejecutamos esto, entonces aquí,
en cuántos minutos tardaste, pues vamos a ponerle trescientos
sesenta (unas cuatro horas, un ritmo muy modesto)
vemos que dice que nuestro ritmo medio es cero coma once...cero coma once es...
Esto es... Esto es así porque le hemos puesto el ritmo en minutos y es la distancia en
kilómetros y hemos hecho kilómetros partido por minuto. Si nosotros queremos saber
cuántos minutos hemos tardado cada kilómetro sería la operación, al contrario.
Hemos dicho trescientos sesenta y aquí sí, nos dice que nuestro ritmo medio es ocho
coma cincuenta y tres minutos por kilómetro.
Esto es todo respecto al input y al print.
38
Python – Bloques Indentados (Video 23)
Video 23 Python – Bloques Indentados https://youtu.be/3lP7UQW1yfA
39
con otro print
esto está con espacios
si lo tuviéramos al mismo nivel pero con espacios, en este caso
no va a dar error porque nuestro editor de texto guarda todo
como espacios, los tabulados los convertirá en espacios, entonces cuando ejecutemos
vemos que como edad no no es mayor que dieciocho, no entra dentro
del if, bueno voy a ponerle otro valor
veis, y ahora entra dentro del bloque y ejecuta esta parte
de aquí dentro. Aquí tenemos otro ejemplo con
dos bloques tenemos otra vez la variable edad, que la hemos
vuelto a sacar un diez, si es mayor que dieciocho pues le hemos puesto
puede beber en españa y si es mayor que sesenta y siete además estará
jubilado, vemos que los bloques son, es mayor que dieciocho tenemos
este bloque de aquí y además tenemos este segundo bloque
si es mayor que sesenta y siete, tenemos dos bloques, uno dentro
de otro, este de aquí solamente se ejecutará si estamos
dentro de este, vamos a ver cómo se ejecuta poniéndole un valor
mayor que dieciocho
veis, dice puede beber en españa y poniendo un mayor valor
mayor que sesenta y siete
nos dice las dos frases, puede beber en españa y además está
jubilado. Otro de los bloques típicos es el if else
que te dice una condición y si no se cumple genera otro
bloque, vamos a verlo
limpiamos esto, tenemos
este es el bloque del if como veis está tabulado y luego el bloque del else es este otro,
ambos tabulados, el mismo nivel de tabulación para los dos
y cuando nos hemos salido del if para declarar else hemos
echado hacia atrás, vale, el funcionamiento es el mismo
entonces aquí le hemos puesto un quince, entonces nos dice la condición
40
del else, aún no puede beber en España, para los bloque for pasa
exactamente igual, vimos cómo funcionaban los bloque for en un
vídeo anterior y ahora vemos exactamente cómo funciona la indentación
aquí tenemos este bloque de aquí, que imprime la palabra fruta le añadimos
más elementos
y ejecutamos vemos que dice, comienza el bloque, manzana otro elemento,
pera otro elemento, plátano otro elemento, esto es porque cada
vez que ha entrado dentro del bloque, del bloque para cada una
de las frutas ha ejecutado este trozo de código, ha hecho el print
de fruta y luego el print de otro elemento,
vale, y por último, vamos a ver
cómo funcionan las funciones, nunca mejor dicho, aquí tenemos
una declaración de una función que va a hacer una suma de
dos elementos, el cinco y el tres en este caso y al final va
a hacer este print de los dos, de la suma, de del valor de
la suma de los dos elementos y luego tenemos una llamada,
como veremos más adelante en el tema de las funciones este
trozo de aquí es la declaración de la función, este trozo
de aquí, este bloque de aquí es el contenido de la función
y durante la declaración este bloque no se ejecuta, solamente
se ejecuta en la llamada, que se esto que tenemos aquí, aquí
estamos llamando a la función y cuando hacemos esto lo que hacemos
es entrar aquí dentro y ejecutar todo lo que hay dentro del
bloque, veamos cómo funciona
veis que nos devuelve un ocho, porque lo que ha hecho ha sido
guardar este cinco aquí, este tres aquí y devolvernos el resultado.
Pues esto es todo respecto a los bloques indentados.
41
Hola en este vídeo vamos a ver cómo tratar errores en Python con el bloque try/except.
Recordáis que en uno de los videos anteriores
hablamos sobre cómo, de los errores se aprende.
Pero no siempre querremos aprender de ellos sobre todo cuando
son errores de tipo de ejecución. A menudo, es mejor tratarlos
y, o bien, arreglarlos o bien ponerles algún remedio para que
no sean un error tan problemático. Veamos algunos ejemplos.
Como vimos en el vídeo de los errores se aprende. A unos errores
típicos de ejecución con la división entre cero
intentar acceder a una variable que no existe.
Intentar concatenar una cadena con un número.
Así, como errores de acceder a un archivo que no tenemos acceso
o que no existe, problemas de conexión, problemas de comunicación,
el acceso a datos. Todos estos errores cuando estamos
ejecutando son problemáticos porque puede ser una entrada
del usuario que no ha cargado la variable o algún problema así.
Entonces, cuando esto sucede nosotros no queremos que el
programa falle si no queremos seguir ejecutando.
Por ejemplo, nosotros e intentamos aquí recibir el,
un número del usuario. Del usuario cuando, como decimos escribe
un número. Podemos poner un tres y es to da un error. Cuando
esto pase el programa fallará, el programa dará error y si
el usuario final no somos nosotros sino que es alguien que
está utilizando el programa no entenderá que está pasando.
Vale, entonces lo que se suele hacer en estos casos
es utilizar el bloque try/except. El bloque try/except aquí
en el try le decimos a Python que intente ejecutar el contenido
de este bloque de aquí.
42
Y si todo va bien ejecutará esto y cuando termine se saldrá
del blog entero y no ejecutará lo que hay dentro de except. En
el caso de que falle algo alguna de las líneas de este bloque
saltará y ejecutará está antes de salir del try/except. En este
este caso, vemos que el lugar es lo que hemos puesto es un mensaje
de error. Veamos que lo que sucede. Nosotros
ejecutamos esto y ponemos un número válido.
Vemos que dice hemos sufrido un error debido a que en el valor
numérico is not defined. Pues está diciéndonos que
la variable valor numérico no está definida porque tienen
nombres distintos. Esto lo solucionamos y volvemos a ejecutar
le ponemos el tres. En este caso, ejecuta todo esto y se
salta este trozo de aquí no da el mensaje de error. ¿Pero qué
pasa cuando ponemos el tres que decíamos
antes? Contexto, en lugar del mensaje de error tan cero que teníamos
aquí vemos un mensaje de error mucho más legible dice hemos
sufrido un error debido a que el literal int
en base diez que esperábamos. En lugar de eso
hemos recibido un tres. Si es verdad que este error es más legible
que ésta de aquí. Podríamos hacerlo más específico,
más amigable para el usuario para que luego cuando el usuario
se contacte con nosotros nos pueda especificar o puede entender
que lo que está pasando. Podremos poner estamos
esperando a que el texto que estas, que tiene que escribir
sean números en caracteres numéricos
no alfanumérica.
Pero qué pasa cuando queremos realizar cosas
con el contenido del valor, de la variable valor numérico más
adelante. Es uno de los problemas que podemos tener que dentro del
bloque le pidamos un dato el usuario y estemos asignando una
43
variable, como pasa aquí.
Estamos pidiendo una variable y la estamos guardando en esta,
en este, en este variable valor numérico. Y el contenido
completo del bloque try es esta de aquí. ¿Pero qué pasa si
falla esto? Valor numérico no tendrá un dato válido cuando
haya esto fallado. Entonces, lo que hemos hecho ha sido aquí en
la excepción asignarle un valor válido porque luego la variable
la estamos usando aquí en esta suma. Entonces, cuando ejecutamos esto.
Vemos que si le ponemos un valor válido el,
ahora mismo ha dado error al poner el nombre de la variable. Pero bueno,
nombre de la variable le ponemos un valor válido.
Y vemos que hace este print de aquí que nos devuelve un seis
y luego hace este print de aquí también nos devuelve un seis.
¿Que pasa si nosotros ponemos la variable contexto?
Vemos que este esta línea de aquí está fallando. Al fallar
esta línea, estas dos se salta y lo que hace es escribir el
valor numérico el cero. Este cero que estamos guardando dentro
el valor numérico es el que sumaremos a tres y el que estamos
imprimiendo aquí. Esto hace que esta línea no de error
y podemos seguir con la ejecución de nuestro programa. Esto
es muy útil cuando estamos intentando cargar archivos o cualquier
cosa. Podemos controlar y si el archivo no existe
pues podemos manejarlo de alguna manera o bien
pidiendo al usuario un archivo nuevo o bien intentando
acceder más tarde o hacer alguna cosa. Hay que tener cuidado
con los bloques try muy largos. Por ejemplo, este bloque try
aquí son solamente cuatro líneas, el que estamos usando de ejemplo.
Pero si en lugar de cuatro líneas fueran cien sería problemático
porque no podríamos completar exactamente en qué punto está
fallando. Nosotros aquí simplemente estamos manejando
el error y guardando una variable con un carácter correcto
teniendo en cuenta el valor que está introduciendo el
usuario. ¿Pero qué pasa? Como vemos aquí. Aquí
valor numérico lo estamos poniendo bien, pero podríamos en
la línea setenta tener otro error. Ese error no tenerlo manejado
aquí porque no estamos haciendo nada en concreto con esos
datos y mucho más adelante nuestro programa eso ocasionarnos
44
problemas. Entonces, los bloques try tienen que concretar exactamente
en el error que estamos intentando tratar para cada bloque.
Vale, luego en la documentación de Python tenéis los tipos
de errores disponibles y esto nos permite filtrar por el tipo
de error. Por ejemplo, aquí tenemos una división por el valor
que introduce el usuario. Entonces, si nosotros ejecutamos esta
este script de aquí. Y le decimos como parámetro de entrada un cero.
Nos dice que es un error de tipo aritmético, esto es porque
él ha intentado ejecutar esto de aquí. Ha fallado en la división
y como es de tipo aritmético el error ha llegado
a esta excepción de aquí y ha ejecutado esta. Todos estos de
aquí nos han llegado a ejecutar porque ha decidido. Él
sabe que el error es de tipo aritmético y ejecuta esta excepción.
Si en lugar de ser de tipo aritmético sería numérico este
trozo solo saltaría y seguiría con los siguientes hasta que
se encuentre una del tipo. Entonces, en nuestro caso hemos puesto
una aritmética una de valor y otra más genérica en el caso
de que no se ha ninguno de estos dos errores.
Veamos qué pasa cuando en lugar de un tres ponemos el texto tres.
Vemos que no ha escrito nada porque lo que ha hecho ha sido
en el caso de un error de tipo valor simplemente la regla,
no está poniendo un mensaje. Y por último, veremos el grupo
finally y esto sirve para, esto se ejecutará siempre de forma
esto se ejecutará siempre cuando vayamos a finalizar un bloqueo.
Independientemente de lo que haya sucedido tanto se ha funcionado
como si no. Vamos a limpiar esto, tenemos por aquí en bloque try,
el bloque except,
y el bloque finally.
Si algo de este bloque try falla, saltará y ejecutará esta excepción.
Si todo va bien ejecutará al finally y luego continuará.
Si algo falla, después de ejecutar el except acabará ejecutando
el finally. Y esto es muy útil por ejemplo si estamos abriendo
un archivo dentro del bloque try podemos nosotros cerrar este
archivo en el finally y y de esta, de este modo tanto si funciona
el escript como si no funciona el archivo acabará estando cerrado.
Entonces, no tenemos que tener repetido el código de cerrar
el archivo aquí, aquí, aquí o ponerlo aquí al final y depender
de si esto está capturando bien el error.
Y esto es todo respecto a los bloques try/except.
45
Práctica 3.1 Guardar input en variable
Práctica 3.2 Encontrar el mayor de dos números introducidos
Resumen
En el módulo hemos visto el concepto de flujo de ejecución y los distintos tipos que
existen, empezando con el más simple, el flujo secuencial. Luego hemos pasado a
como utilizar decisiones en Python con el comando if, y cómo permite desviar el flujo
del programa, para acabar tratando los flujos iterativos, donde hemos tratado los
bucles for y while. Hemos comentado dos comandos básicos, print() para mostrar
resultados e input() para introducir parámetros, hemos visto cómo se usa el indentado
del código para agrupar las instrucciones en los comandos anteriores y cómo incluir en
el código mecanismos para tratar los posibles errores de ejecución que puedan
producirse.
46
Python – Par o impar (Video 25)
Video 25 Python – Par o impar https://youtu.be/cKkZdNA-m4c
Hola en este en esta serie de vídeos vamos a ver problemas típicos en python y cómo
resolverlos. El primero de ellos par o impar vamos a diferenciar entre números pares o
impares en la entrada de datos.
Esto es una la plantilla del problema, aquí tenemos el texto que esperamos que no
modifiquéis y tu código aquí vale, como veis tenemos un input que si ejecutamos esta
línea introduce tu número que ponemos un tres ese tres está guardado en la variable
47
Python – Encuentra los divisibles (Video 26)
48
Python – Contar elementos (Video 27)
Video 27 Python – Contar elementos https://youtu.be/J8vkxU3EzXU
Hola, en esta serie de vídeos vamos a ver cómo resolver problemas
típicos con bucles en Python.
Cuando intentamos resolver un problema con un bucle en Python
tenemos que tener en cuenta lo que hablamos en el flujo interactivo.
Tendremos una inicialización del bucle, luego tendremos nuestro
bucle donde hace, haremos la tarea repetitiva y luego una finalización.
Estas tres zonas tenerlas definidas de esta forma
nos ayudarán a resolver los problemas más fácilmente.
El primer problema que vamos a resolver es cómo contar los
elementos de una lista dentro de un bucle.
Nosotros aquí tenemos este primero que es contar elementos
de una lista y dado una lista que es estos elementos de aquí.
Nosotros en Python tenemos la función len. Cuando ejecutamos
vemos que nos devuelve un seis, porque el número de elementos
que tiene nuestra lista es seis. ¿Pero qué pasa si no tuviéramos
la función len? Puede aparecer estúpido en un principio
pero no lo es así porque muchas veces queremos contar
elementos que no podemos aplicarle la función len o no podemos
hacer algo así. Y además, saber cómo resolver esto nos simplificará
resolver otros problemas más adelante. Como he dicho lo primero
que tendremos que hacer es iniciar una inicialización. Entonces,
la cuenta la vamos a inicializar a cero porque ahora mismo en la
no tenemos ningún elemento nuestra cuenta. Y qué hacemos, queremos
contar. Entonces, para cada elemento en la lista
vamos a añadir un elemento, un ítem a nuestra cuenta. Entonces,
lo que hacemos es cuenta, actualizarlo, cuenta
más uno, vale. Y finalmente,
imprimiremos lo que tenemos en cuenta, vale. Ejecutamos esto, vemos
que el resultado es el mismo. Que ha pasado, cada vez, para cada
elemento de la lista aquí primero valía cero. Ha entrado con
el nueve y aquí dice con el nueve cuenta vale cero más uno. Con
el trece, uno más uno valdrá dos, tres, cuatro, cinco y seis.
Y al final, tiene, tenemos aquí el seis que queríamos. Si queremos
hacerlo más visual, podríamos hacer aquí un print.
Elemento estamos añadiendo es el
elemento y ocupa.
Esto lo hacemos con un efe print, para que nos lo formateé.
Entonces, para que sea más fácil de entender. El resultado final
es lo que tenemos en cuenta.
Ejecutamos esto aquí, vemos que para cada iteración nos salga
este mensaje. El elemento que estamos haciendo es el nueve igual
y ocupa el orden uno, ocupa el orden dos, el tres. Así, hasta que llegamos al seis
y el resultado final es seis. Y así, contaríamos los elementos
que tenemos en una lista y esto es todo.
49
Si quieres puedes descargar el texto de el Jupyter notebook utilizado. Para reproducir el proceso paso a
paso puedes hacer click con el botón derecho del ratón para descargar el Jupyter notebook y ejecutarlo en
local (recuerda usar "guardar enlace como" para guardarlo con extensión .ipynb para abrirlo luego con
Anaconda) o conectarte al Binder de la lección para ejecutarlo en la nube.
Hola, este es el tercer video sobre cómo resolver problemas típicos con bucle. Como
he dicho en los vídeos anteriores a la hora de resolver un problema con un bucle for es
importante tener una parte de inicialización donde inicializamos los valores
51
de las variables que vamos a usar dentro del bucle. Luego, tendremos
nuestra iteración donde haremos algo repetitivamente y por
último una finalización, donde tendremos un resultado final.
En este ejercicio vamos a ver cómo calcular las medidas de
los valores de una lista.
En el caso, el caso más típico es que tenemos una lista con
estos elementos y vamos a calcular la media. La media final
es la suma de los valores dividido por su longitud. Ejecutamos
esto. Nos dan veinticinco que es la media que tendríamos al
sumar todos estos valores y dividir entre el número de elementos.
Vale, que como habíamos visto anteriormente es ciento cincuenta
entre seis. ¿Pero como lo haríamos sin tener sum ni len? Pues, bien.
Si os dais cuenta, lo que tenemos aquí es una función, de la
función suma la función len. Son dos funciones interactivas
lo que hacen es por un lado contamos
los elementos que tiene el, la lista. Y por otro lado, los sumamos
vamos a inicializar una variable cuenta y una variable suma
para luego poder hacer esta división. Vale, entonces qué es
lo que hacemos para cada elemento en la lista
cuenta es igual a cuenta más uno.
Suma es igual a suma más elemento. De este modo, la
variable cuenta va contando cuántos elementos tenemos en lista.
Y la variable suma va añadiendo el valor del elemento a la
variable suma. Al terminar el bucle, dentro de las variables
suma y cuenta tendremos, como he dicho aquí el número de elementos
y aquí la suma. Que es justo lo que tenemos aquí la suma y
el número de elementos. Pues en la finalización,
fuera del bucle podemos decir que la resultado sea suma partido por
cuenta. Pues ejecutamos esto, nos da el mismo veinticinco que
teníamos aquí. Entonces, podemos como hemos hecho anteriormente
52
dejarnos unos mensajes para ver que lo que está sucediendo
en cada ejecución. El valor,
el elemento que estamos introduciendo
es elemento.
Actualmente vamos por el elemento
número, cuenta.
Nos faltaría saber el resultado parcial de la suma es, lo que
tengamos en suma.
De este modo, cada vez tendremos en el bucle aparte de realizar
esta suma veremos estos tres valores. Si volvemos a ejecutar
vemos que nos ha añadido una línea por cada iteración. En total seis,
seis por tres dieciocho líneas. No nos dice el elemento que estamos
introduciendo, en que interacción estamos y el resultado parcial
de la suma. Y como vamos sumando. Igual que vimos para el ejercicio
anterior en el cual contábamos, sumamos los elementos podemos
hacer lo mismo aquí. Si nosotros quisiéramos sacar la media
de los valores positivos. Simplemente cambiando esta suma
por el valor absoluto de elemento.
Ejecutando, el resultado final en lugar de ser veinticinco,
pasa a ser veintiséis coma seis, seis período. ¿Por qué? Porque
el resultado final de la suma al pasar esto absoluto pasa a
ser ciento sesenta. Y al dividirlo entre seis da este resultado.
Y esto es todo sobre cómo calcular la media con un bucle for.
Resumen
En el módulo hemos tratado de forma práctica como resolver problemas simples
usando bucles iterativos y decisiones. Hemos visto como clasificar números en pares o
impares, encontrar números divisibles por uno dado, contar elementos, sumar valores
o calcular medias de una lista, ver si existe un elemento concreto o encontrar el mayor
o el menor valor de la lista.
El tiempo estimado para completar este módulo son 4 horas y el tiempo de visionado
de los vídeos alrededor de 25 minutos.
En las cuatro prácticas del módulo crearemos funciones para imprimir la frase "Hola
Mundo", para concatenar cadenas o contar palabras y crearemos un módulo con
constantes que podamos reutilizar.
Hola. Este es el segundo vídeo sobre las funciones y vamos a profundizar un poco
más en este concepto.
En primer lugar, tenemos que tener en cuenta que las funciones deben de ser vez
versátiles. En el ejemplo que vimos en el vídeo anterior donde le pedíamos que sumar
a tres más cinco, la función lo único que sabía hacer era sumar tres y cinco.
Aquí tenemos...
Aquí tenemos nuestra función del ejercicio anterior que cuando la llamábamos
suma3y5 lo único que va a hacer es decir el resultado es ocho pero los parámetros nos
darán la versatilidad que necesitamos ¿Qué son los parámetros? Pues en lugar de
tener la función suma3y5 podríamos tener la función suma donde tenemos el sumando
uno y el sumando dos estos dos parámetros que hemos definido aquí son los valores
con los que podemos llamar a nuestra función y podemos variarlos en cada llamada.
Estas variables que tenemos aquí luego las podemos usar dentro de
la función. Entonces aquí lugar de tres más cinco podemos
poner sumando uno y sumando dos
entonces nuestra función suma3y5 pasa ser suma
de tres y cinco porque una cosa que nos dé versatilidad y otra
cosa es que queramos usarla, entonces al ejecutar esto el resultado
es el mismo pero sin lugar de un cinco pusiéramos un siete
el resultado debe ser diez y así es.
Cuidado con los contextos. Como vimos con la parte
de intentación en los bloques, por un lado estarán las variables
globales las que están definidas fuera de las funciones y
luego están las variables que están dentro del contexto de
la función dentro del contexto de del bloque. Cada bloque intentado
tiene su propio contexto y las variables que se crean dentro
de ese bloque solamente están accesibles dentro de ese bloque.
Como por ejemplo, aquí definimos esta variable global que tiene
un siete ¿Vale? Y aquí en el contexto de la función
tenemos este bloque de aquí.
Que vemos que aquí tenemos una variable que es igual a siete y tenemos
varios pins donde intentamos hacer a una variable global a una
variable y a un parámetro ¿Vale? Ejecutamos esta definición
primero le decimos que es lo que quiere hacer y
ahora lo llamamos ¿Vale? Y vemos que nos imprime la variable global
que hemos definido antes valía siete porque como está fuera
sí que podemos acceder a ella dentro de la función,
luego el valor de la variable local de siete y por último
el parámetro con el que hemos llamado la función vale parámetro
59
¿Vale? pero que pasa estas estas dos variables tanto parámetro
como variable que está dentro del contexto de la función
no están accesibles desde fuera entonces si nosotros intentamos
acceder a ellos de forma independiente vemos que la variable
global sí que podemos acceder pero tanto si intentamos acceder
a la variable como parámetro nos va a dar errores porque nos
dice que no están definidas. Estas dos variables no existen
fuera de la función. Tened mucho cuidado con esto.
Además en el caso de las variables globales, por ejemplo, esto
de aquí para para si nosotros tenemos una función
mi función global ¿Vale?
y queremos hacer algo con esta variable global que no sea leerle
el valor y mostrarlo. Nuestra variable global se llamaba
variable global ¿Vale? Vamos a coger aquí,
nosotros aquí podríamos poner lo que habíamos hecho print
el valor de la variable global y como hemos dicho está accesible
en modo lectura fuera de la función. Si esto lo lo definimos y
luego lo ejecutamos mi función global
vemos que nos devuelve siete ¿Qué pasa si queremos modificar
el valor de esa variable dentro de nuestra función? Tendríamos
que antes de hacer el intento de modificación coger el
nombre de la variable, variable global
y ponerle un modificador delante que es global
así estamos indicándole a nuestra función que esta variable
global que vamos acceder aquí viene de fuera y queremos modificarla.
Entonces aquí podríamos hacer variable global es igual a
es igual a variable global más tres.
¿Vale? lo guardamos, ejecutamos y vemos que tenemos un diez pero
no sólo tenemos un diez sino que esta variable global ha modificado
el valor que teníamos aquí arriba ¿Qué pasa si volvemos a
llamar a esta función? Pasamos a tener un trece porque esa
esa variable la teníamos definida fuera y la estamos actualizando
cada vez que llamamos a la función si lo volvemos a ejecutar tendremos
un dieciséis y así cada vez.
El return algo muy importante que tenemos que tener en cuenta
es muchas veces nuestras funciones lo que estamos haciendo es
imprimir por en pantalla unos resultados, unos textos pero a veces
queremos devolver un valor para hacer más cosas con este valor.
Nosotros por ejemplo si aquí tenemos el número que es la
suma de tres y seis y hacemos print del número
nos muestra un nueve. Si aquí en lugar del print del número usemos
número vemos que nos dice que el out de la función está
porque para Jupyter todo el bloque trabaja como si fuera
una función que estamos ejecutando es este nueve, vale ¿Qué
pasa? Si nosotros quisiéramos luego con ese nueve hacer cosas
en este caso no pasa nada porque lo tenemos dentro de esta
variable pero ¿Qué pasaría si yo quitara esto
60
y quitara esto?
Va a ser el mismo, el nueve, pero no lo tenemos guardado dentro
de ninguna variable. No podemos acceder a eso a no ser que volvamos
a ejecutar nuestra función suma ¿Vale? Para hacerlo con una
función nuestra y tener esto dentro una variable lo que tenemos
que usar es la palabra clave return. Esta palabra clave lo que
hace es al finalizar la función lo que pongamos dentro de
la palabra clave lo devolverá y lo podemos guardar dentro
de una variable. Aquí definimos nuestra función suma y vemos
como habíamos hecho en el ejemplo anterior tenemos el sumando
a y el sumando b guardamos la suma dentro del total y esto es
lo que devolvemos con return, entonces si hacemos suma de cinco
y siete y lo asignamos a número y hacemos print de número
nos tendría que devolver un doce. Cosas que tenemos que tener
en cuenta con return es que cuando llegamos al return
se finaliza la ejecución de la función entonces si aquí
tuviéramos más de cosas como por ejemplo un print
esto me gusta que saliera y esto lo definimos
cuando ejecutamos esto vemos que el print esto me gustaría
que saliera no se va a ejecutar nunca porque está detrás
de un return además en la medida de lo posible queremos,
debemos de tener un solo return por función si tenemos varios
caminos va a base de ifs o fors o cualquier cosa que vayan
devolviendo valores una una opción que no es muy elegante
tener un return en cada final del camino que nos
devuelva un valor o otro pero es más difícil de controlar que
si simplemente tenemos un solo return al final
que nos devuelva el valor resultado y lo que vamos haciendo
es en una variable ir guardando los cambios de valor, de esta
forma es más fácil de controlar porque el programa siempre
va a ejecutarse del principio al fin la función se va a ejecutar
siempre de principio a fin y esto nos control nos servirá
para evitar problemas como este y luego además se pueden volver
a devolver varios datos separados por coma por ejemplo aquí
este return total además podríamos devolver
mi mensaje, veis separados por coma, entonces aquí el número
podría poner número coma mensaje entonces lo que hemos hecho ha sino en
la variable número guardar el total y en la variable mensaje
guardar mi mensaje entonces cuando hagamos print número podemos hacer
también aquí print mensaje
y al ejecutar
número mensaje es igual a más de cinco y siete
¿Por qué? Porque no he definido esto, perdón. Vale, ejecutar. Ahora sí. No entendía
el error y era porque no habíamos guardado el cambio aquí
ahora vemos que bien en número tengo el doce y el mensaje tengo
mi mensaje esto es así se puede hacer pero yo no lo recomiendo
porque puede pasar que luego nosotros tengamos más adelante
61
simplemente este trozo de código, nuestra función suma la
tengamos en otro sitio o la estemos usando de otra librería y
nosotros aquí en mensaje tenemos esto pero ¿Qué pasa si tenemos
esto? y ejecutamos vemos nuestro print la función ha funcionado normal
y vemos que dentro de número tenemos la tupla doce y mi mensaje.
Es más difícil de controlar el resultado que
y es más difícil de manejar. Cuando queramos hacer esto en
lugar de devolverlo como una tupla así lo conveniente es crear
un objeto que tenga cada uno de los elementos que queramos
devolver y tratarlo de forma independiente dependiendo del
tipo de objeto y cada uno de los elementos que queramos volver.
Y esto es todo. Muchas gracias.
Para esta práctica, si trabajáis en local, tendréis que descargar (pulsando el botón derecho del
ratón) en el directorio de trabajo de python los
ficheros libroderecetas.py, libroderecetas1.py y libroderecetas2.py (no os olvidéis de cambiarle la
extensión a .py en todos) y crear la carpeta estanteria en el mismo directorio, copiando dentro los
ficheros libroderecetas1.py y libroderecetas2.py y creando en ella un fichero sin contenido con
nombre __init__.py (con 2 barras bajas delante y detrás de init).
Si al principio de curso habéis descargado el paquete máster con todos los notebooks del curso,
los ficheros estarán en el paquete.
Hola. En este vídeo vamos a hablar sobre funciones desde objetos una de las cosas
que podemos hacer en Python es que las variables sean las que llaman a las
funciones. Esto vamos a verlo ahora.
Luego y otra de las cosas que se pueden hacer es encadenar llamadas de variables
ahora mismo veremos un ejemplo de cómo sucede esto. Por ejemplo, yo tengo mi
texto
en el que guardo "el perro de san roque no tiene rabo"
como el texto es de tipo string, de tipo cadena, será lanzamos
la ayuda de las cadenas vemos aquí que tiene una serie de
funciones, entre esta funciones, por ejemplo, la función title
lo que hace es poner el principio de cada palabra en mayúsculas
y aquí puedo hacer string punto title y mi texto
pero tal y como está tal y como funciona Python como mi texto
65
también es un string puedo llamarlo directamente el punto
title desde mi texto y hacer mi texto punto que title el resultado
va a ser el mismo que hacer string punto title
con mi texto. Si os dais cuenta "El Perro De San Roque No Tiene Rabo"
le ha puesto también las mayúsculas. Si yo quitara esto
desaparecen las mayúsculas, ¿vale?
¿Qué se puede hacer con esto? Aparte de aportarnos nuestro
código mucho porque si os dais cuenta de esto de aquí a esto de
aquí hemos reducido un poquito y se ha hecho mucho más simple
nos permite encadenar llamadas porque ¿Qué pasa? Esto que tenemos
aquí en mi texto punto title también es una cadena lo que nos
está devolviendo esto es una cadena como veis aquí que empieza
y acaba en comillas entonces nosotros podemos encadenar llamadas
por ejemplo las cadenas también tienen una función que se
llama replace que lo veremos más adelante que sirve para sustituir
unas palabras por otras y entonces yo puedo cambiar San por
Mister y poner y lanzar y esto también genera
una cadena entonces tendríamos esta función que crea un string
y a esa string le llamamos el title lo vemos por partes primero
vemos que haciendo el repalce éste que he dicho dice "el perro
de mr roque que no tiene rabo" pero a esto le puedo poner justo
después title entonces le añade las mayúsculas podría seguir
poniendo puntos ya llamando y encadenando funciones de llamadas
siempre y cuando el parámetro de entrada de esas funciones
seguirá siendo un tipo de string.
Y esto es una de las formas que podemos utilizar
para trabajar con funciones en Python. Esto es todo.
Resumen
En el módulo hemos introducido el concepto de función como mecanismo de
reutilización de código y cómo pasarle parámetros a una función y hacer que devuelva
resultados. También hemos visto como agrupar las funciones en módulos y paquetes
para estructurar nuestro código y para incorporar código de otros programadores con
66
facilidad. Finalmente hemos tratado la notación orientada a objetos que podemos usar
en Python para llamar a ciertas funciones.
El módulo incluye cuatro prácticas (dos que cuentan para el progreso del curso y otras
dos que no), un examen de prueba y un examen de módulo. Si no has solicitado el
certificado no podrás acceder al contenido evaluable, con lo que no tendrás acceso a
las prácticas evaluables ni al examen de módulo, aunque puedes descargarte el
fichero máster con todas las prácticas de la sección de recursos de la página inicial del
curso y realizarlas sin que sean evaluadas.
El tiempo estimado para completar este módulo son 5 horas y el tiempo de visionado
de los vídeos alrededor de 36 minutos.
En las cuatro prácticas del módulo crearemos funciones para cambiar todas las
apariciones de primera letra de una frase por otra, concatenar dos cadenas cambiando
parte de ellas, insertar una cadena en el medio de otra o cambiar las mayúsculas por
minúsculas en una cadena.
¿Qué son las cadenas de texto? Durante todo el curso hemos usado
cadenas de texto y hemos estado hablando de ellas de forma
un poco por encima sin llegar a profundizar en
esto. En este vídeo vamos a hablar sobre ellas.
Aquí lo tengo, las cadenas por ejemplo en el vídeo
anterior hablábamos sobre el refrán el perro de San Roque no
tiene rabo y lo que hacía esa, esa cadena de texto que
empieza por comillas dobles al principio al final.
Esto es un conjunto de caracteres uno detrás de otro encadenados
que se guardan dentro de una variable. Si os dais cuenta, pueden
empezar por comilla doble o por comilla sencilla.
Este otro, es otra cadena de texto porque Ramón Rodríguez
se lo ha robado, terminando el refrán. Una de las operaciones más
67
comunes que se hacen con cadenas de texto es concatenar las,
poner una detrás de la otra. Para ello se usa el símbolo más.
Entonces, podemos tener la variable refrán que teníamos con
el perro de San Roque no tiene rabo y luego porque Ramón Rodríguez
se lo ha robado. Entonces, esto completaría nuestro refrán.
Pues si nosotros vemos que es lo que dentro del refrán.
Vemos que pone el perro se San Roque no tiene rabo porque Ramón
Rodríguez se lo ha robado. Si os dais cuenta que me he puesto una, un
mensaje con un comentario cuidado con los espacios.
Esto es porque si os dais cuenta, aquí no hay ningún espacio
igual no acaba tampoco hay ningún espacio. Es símbolo más
no añade nada en medio de las dos cadenas simplemente coge
una cadena y al final añade la otra entonces si nosotros queremos
que estén separadas tendremos que o bien poner espacios o
bien usar otro, otro comando que no sea simplemente la concatenación
con más. Vale, otra cosa muy importante sobre las cadenas es
que cuando nosotros estamos trabajando con cadenas en Python
muchas veces pasa como vemos aquí que las líneas de código son
muy largas. Esto en esta pantalla que tiene buena resolución
se va a ir bien pero si tuviéramos la mitad de espacio esto
empezaría a descuadrarse y no sabríamos dónde empieza la línea
donde acaba la línea y esto es un problema en Python porque
saber dónde empiezan y acaban las líneas es muy importante
para saber dónde estamos y qué estamos haciendo. Entonces,
la contrabarra nos ayuda organizarnos como pone este título.
Nosotros esta frase de el perro de San Roque no tiene rabo porque Ramón Rodríguez
se lo ha robado, esto es un refrán típico en España. Lo
podemos separar en varias líneas de código usando la contrabarra.
Si os dais cuenta, aquí tengo un trozo de cadena, contrabarra otro
trozo de cadena, contrabarra otro trozo de cadena. Entonces, con
esto puedo añadir saltos de línea dentro de mi declaración
de la cadena. Cada trozo tiene su principio y su fin con comillas
y nosotros le indicamos a Python con esta contrabarra de que lo
que va a debajo es la continuación de esta cadena. Entonces,
si yo ejecuto esto.
Y hago así. Vemos que a pesar de que está en varias líneas para
Python sigue siendo una sola línea, porque esto es simplemente
una forma organizarnos. Entonces, cuidado con, es muy importante
tener cuidado con añadir texto después de las contrabarras.
Por ejemplo, si yo aquí añado un espacio
y ejecutó. Veis que nos dice unexpected character después de
la línea continuation character. Esto quiere decir que ha
encontrado caracteres que no esperaba justo después de esta
por barra que es para él el carácter de continuación,
continuation character. Y borramos los espacios que ha añadido
aquí. Y vuelvo a poner la contrabarra, solamente quiero borrar
los espacios, vuelve a funcionar. Entonces, cualquier carácter que
añadamos después de las contrabarras serán problemáticas.
También, la junta de barra nos permite jugar con indentación.
68
Esto quiere decir que nosotros podríamos hacer algo como esto
después de cada contrabarra la siguiente línea empezarla
por donde queramos y no tendríamos que tener en cuenta el
sistema indentación de Python. Esto funciona perfectamente,
a pesar de que funciona yo recomiendo no hacerlo.
Es útil saberlo porque muchas veces queremos por ejemplo,
echar un poco para tras la identación de este trozo respecto
al principio del, de la declaración. Si por ejemplo, lo que tenemos
aquí es muy largo y luego la cadena hace que todo se descuadre
mucho hacia la derecha. Imaginaros que toda la cadena
en lugar de empezar aquí,
empezará a esta altura. Vamos perdiendo mucho espacio de código
y además estamos echando todo el código a la derecha lo cual
no nos es cómodo. Nos permite jugar en este sentido
y podemos por ejemplo, organizarnos así aprovechando mejor
el espacio. Pero, no os recomiendo que tengáis unas líneas un
poco más a la derecha, otras más a la izquierda. Porque luego
cuando estéis mirando el código será complicado.
¿Y si queremos añadir saltos de línea? Os acordáis de esto que
hemos hecho de que lo añadido como una sola línea. En Python
tenemos dentro de las cadenas el carácter barra ene, que nos
permite añadir saltos de línea.
Entonces, si yo declaró esto y lo imprimo, vemos que donde hemos
puesto un barra ene nos añadir un salto de línea. En este
caso el barra ene lo hemos hecho coincidir con el final
lo cual nos ha permitido formatearlo como nosotros
queríamos. Otra forma de trabajar con cadenas en multilinea es
usar las tres comillas. Y esta, pero estas tres familias tener mucho
cuidado porque al principio y al final ponemos tres comillas.
Todo lo que hay dentro será una cadena, pero todo lo que hay
dentro es todo lo que hay dentro. Si nosotros formateamos con
tabulados aquí dentro ese formateado, luego aparecerá también
en la cadena. Porque tanto los espacios como los tabulados que
pongamos aquí Python lo va a reconocer como parte de la cadena.
Los saltos de línea también, entonces teniendo en cuenta eso
y teniendo un poco de cuidado el sistema de tres
comillas nos ayuda a simplificar mucho el uso de cadenas de
muchas líneas. Pero hay veces, que no nos es útil porque nos
descuadraría mucho el código y esto es todo sobre cadenas.
Si quieres puedes descargar el texto de el Jupyter notebook utilizado. Para reproducir el proceso
paso a paso puedes hacer click con el botón derecho del ratón para descargar el Jupyter
notebook y ejecutarlo en local (recuerda usar "guardar enlace como" para guardarlo con
extensión .ipynb para abrirlo luego con Anaconda) o conectarte al Binder de la lección para
ejecutarlo en la nube.
72
Si quieres puedes descargar el texto de el Jupyter notebook utilizado. Para reproducir el proceso
paso a paso puedes hacer click con el botón derecho del ratón para descargar el Jupyter
notebook y ejecutarlo en local (recuerda usar "guardar enlace como" para guardarlo con
extensión .ipynb para abrirlo luego con Anaconda) o conectarte al Binder de la lección para
ejecutarlo en la nube.
Hemos incluido este vídeo de otro de nuestros cursos para que veáis un ejemplo simple de la importancia
de los códigos de caracteres al trabajar con ficheros de texto.
Hola, hemos visto que los juegos de caracteres lo que hacen es traducir
un conjunto de letras a un código binario para que el ordenador
pueda trabajar con ellos y vamos a ver por qué son tan importantes
y cómo nos afecta. Bien aquí tenemos un fichero que es punto
csv que es texto separado por comas, que es un formato
habitual de intercambio de datos en la red. Bien vamos
a abrirlo y el botón derecho del ratón vamos a abrirlo con
76
un editor de texto que se llama notepad plus plus, notepad++,
que es bastante potente, bueno aquí tenéis el fichero,
vamos a ponerlo en pantalla completa, fijaos que están los textos
separados por coma, aqui están los distintos campos y aquí
tenemos un campo de texto, que veis de la atracción gravitatoria
del sol y la luna, la combustión de combustible, la elevada temperatura,
físico, etcétera. Bien esto si nos vamos aquí, a codificación
vemos que el notepad++, que es muy listo, ha detectado
que es UTF sin BOM, este es el que el juego de caracteres
que está usando. ¿Qué pasa si le decimos que es ansi?.
Que es el de Windows, el juego de carácteres de Windows, utf-8 se
suele utilizar mucho en internet y ansi es el de Windows,
fijaos que las letras normales están igual, porque las
mayúsculas, minúsculas, no acentuadas normales y los números,
comparten el mismo código en la mayor parte de los juegos
de caracteres que se usan hoy en día, pero los acentos fijaos
que la o, se ha cambiado, luego la i de físico también, ¿qué pasa?
Que no ha sabído interpretar ansi los acentos,
los bytes que lo representa son distintos en ansi
que en utf, conclusión que si guardáramos esto así ahora
esto ya estaría destruido, ya no nos serviría, este fichero
ya no podríamos trabajar con él, podemos aquí en
notepad++, podríamos, primero decimos que es utf-8
y podríamos cambiarlo, podríamos convertirlo en ansi esto
nos podría servir para meterlo después en un programa que
sólo entiendan ansi, ¿porqué?. Pues por ejemplo mirad esto, mirad
que pasa si ahora cojo esto y le hago doble clic para que lo abra
el Excel, el Excel lo abre, no sabe interpretarlo bien, para ello
voy a decirle que sí que me interprete bien diciendo aquí
en datos tengo una aplicación que es texto en columnas y le
digo que están delimitados por comas, me va a poner en columnas
de manera mucho más bonita que está y aquí veo que
me ha puesto la o acentuada con una a, i de físico la i de
químico, todo esto ya no se puede recuperar, si guardamos
este fichero los acentos ya están corrompidos, ¿cómo lo tendríamos
que hacer?. Pues vamos a cerrar este fichero,
cerramos, no guardamos nada, abrimos un archivo nuevo
y ahora importamos con la herramienta importar, está aquí en
datos obtener datos externos, desde el texto
y aquí nos va a decir, aquí en descargas tenemos el mismo
fichero, pero ya nos va a dar la opción, fijaos aquí tenemos los
mismos datos, le decimos que son delimitados porque van separados
por comas como os he dicho, aquí ya lo tenemos, veis que ya me
los está poniendo bien, pero el campo de texto sigue estando
mal. ¿Porqué?. Porque Windows, perdón Excel no es tan listo
como el notepad++ y no detecta, y él cree que es el juego
de caracteres de Windows, Windows ANSI, fijaos lo tenemos aquí,
77
pero si aquí le decimos, fijaos que cantidad de juegos de caracteres,
el MSDOS, luego hay un montón de Árabe hay Centroeuropeos,
Bálticos, Chinos..., vámonos aquí abajo, aquí tenemos el Europeo Occidental
one, aquí está que mos hemos pasado, el utf-8. Si cogemos
utf-8, fijaos que ya están los acentos bien representados,
si ahora le digo siguiente, con comas, muy bien y le digo que finalizar,
en vez de doce le voy a decir que me lo ponga
aquí en el A1, para que se ponga bien bonito y fijaos que
él ya me lo sabe hacer, me lo pone por campos y aquí están los acentos
bien representados, ¿Qué hubiera pasado si yo, si Excel no
tuviera la opción de interpretar a mano el juego de
caracteres?. Pues tendríamos que haber hecho un paso intermedio
que sería por ejemplo, y lo voy a enseñar, si yo ahora le digo esto
que la codificación la convierta a ANSI
y me lo guarde, con control s, ahora me vengo aquí, perdón que
me he equivocado de tecla, y le doy doble clic para que me habla
Excel y aunque sigue estando si las comas, fijaos que
aquí los acentos ya están bien, si ahora selecciono la columna
me voy a datos y le digo texto en columnas como he hecho antes
y le digo delimitados, con comas, finalizar fijaos que ya...,
esto con Excel no hace falta porque podíamos haber hecho dentro
de excel, pero un programa que sólo entienda ANSI, pues tendríamos que
haberle convertido juego de caracteres a priori para que lo
interpretará y con esto termino.
Vamos a ver cómo trabaja Python o cualquier otro lenguaje de programación con el
texto, cómo se almacena cualquier carácter de texto carácter puede ser una letra, un
número, un símbolo...
Fijaos que la letra 'a', que le vamos a guardar la variable letra, vamos a darle aquí a
run y luego usamos el comando ord que nos da el código de esa letra, realmente lo
que está guardando el lenguaje de programación en memoria es un número que
representa esa letra en el juego de caracteres que está utilizando. En este juego de
caracteres el número noventa y siete representa la letra 'a' minúscula. Si cambiamos a
la 'a' mayúscula y ejecutamos otra vez esta celda vemos que el código de la 'a'
mayúscula es sesenta y cinco. Si ponemos el carácter 1 pues vemos que el código es
cuarenta y nueve o si ponemos el carácter de exclamación, veremos que el código es
treinta y tres. Bien, también podemos hacer lo contrario, podemos obtener la letra
correspondiente a un número de código si pinchamos aquí y le damos a run, vemos
que el sesenta y cinco es la 'a' mayúscula y pues cualquier otro carácter por ejemplo si
ponemos ochenta y nueve pues es la y griega mayúscula.
Bien también podemos ver todos los códigos de los caracteres de una cadena, por
ejemplo la cadena el perro de roque, utilizamos un for, for letra en cadena y print el
número de esa letra, el código que corresponde a esa letra.
78
Si os fijáis aquí hemos añadido el print, una coma y un end igual a espacio para que en
vez de sacarnos un número por línea nos los ponga todo en la misma línea, de esta
forma podemos cambiar el comportamiento de print y que en vez de cada vez
que imprima acabe con un salto de línea, pues acabe con otro
carácter, en este caso hemos puesto un espacio, de esta forma
como ya le he puesto run pues fijaos que tengo aquí
la 'e' mayúsculas el sesenta y nueve la 'l' minúscula el ciento
ocho el espacio treinta y dos la 'p' el ciento doce, la 'e'
minúscula el ciento uno y así todos los caracteres de la
cadena. Y quiero acabar comentando que podemos utilizar esta
forma de almacenar los caracteres para encriptar un mensaje,
de una forma muy sencilla con una encriptación por desplazamiento
que también se conoce como cifrado césar, aquí tenéis el
enlace de wikipedia, porque lo utilizaba César el emperador
para cifrar sus mensajes en vez de con el código de caracteres del
el ordenador como en este caso, utilizaba el número de letra
en el alfabeto. Fijaos que aquí tenemos la cadena 'el perro
de roque' y vamos a crear una cadena codificada con un desplazamiento
de cinco. La cadena codificada la empezamos vacía y luego para
cada letra dentro de la cadena la cadena codificada sería
igual a la cadena codificada que teníamos antes más el carácter
correspondiente al código de la letra más el desplazamiento.
Y aquí tenemos la cadena decodificada, aquí he metido codificación
y decodificación en el mismo programa, aquí vemos que para
cada letra en la cadena ya codificada, de acuerdo, la cadena
decodificada será la cadena decodificada más el carácter
correspondiente al código de la letra menos el desplazamiento
porque aquí estamos deshaciendo lo que habíamos hecho en
la cadena codificada, aquí ya lo tenemos hecho, voy a darle
run para que lo veáis, fijaos que la cadena original es 'el perro
de roque' si desplazamos cinco todos los caracteres nos
queda esto y si con esta cadena volvemos a desplazar menos
cinco volvemos a tener el perro de roque. Si cambiamos el código,
o sea el la cantidad de caracteres que nos desplazamos a siete
veréis que la cadena de en medio cambia, veis aquí tenemos
otra codificación pero como sabemos que nos hemos desplazado
siete nos volvemos a desplazar menos siete y volvemos a obtener
el original con esto hemos visto cómo trabaja Python con los
códigos de caracteres.
79
Práctica 6.1 Función cambiaprimera()
Práctica 6.2 Función concatenamal()
Práctica 6.3 Función enelmedio() (no evaluable)
En este apartado os proponemos un ejemplo práctico para que podáis practicar lo aprendido.
Hemos creado una instancia en la plataforma Binder, que permite crear y ejecutar de forma
remota código sin necesidad de crear un usuario. Podéis acceder al entorno de desarrollo en
Binder pinchando en el logo que aparece a continuación.
Binder (mybinder.org)
Si habéis instalado Python y queréis realizar la práctica en vuestro entorno local también podéis
hacerlo. Tenéis que descargar el siguiente fichero comprimido y descomprimirlo en una carpeta
de vuestro ordenador.
fichero
Hemos creado una instancia en la plataforma Binder, que permite crear y ejecutar de forma
remota código sin necesidad de crear un usuario. Podéis acceder al entorno de desarrollo en
Binder pinchando en el logo que aparece a continuación.
Binder (mybinder.org)
Si habéis instalado Python y queréis realizar la práctica en vuestro entorno local también podéis
hacerlo. Tenéis que descargar el siguiente fichero comprimido y descomprimirlo en una carpeta
de vuestro ordenador.
fichero
80
Resumen
En el módulo hemos tratado las cadenas de texto, cómo se almacenan en memoria y
cómo pueden manipularse. Hemos visto como extraer un trozo de una cadena, cómo
encontrar una cadena en otra (por ejemplo, una palabra en una frase) y como
manipularla con diversas funciones que nos permiten convertirla a mayúsculas o
minúsculas, dividirla en varios trozos o quitar los espacios del principio y del final.
Finalmente hemos hablado de los códigos de caracteres y de la importancia de
manejarlos correctamente a la hora de trabajar con ficheros de texto.
El módulo incluye una práctica que no cuenta para el progreso del curso, un examen
de prueba y un examen de módulo. Si no has solicitado el certificado no podrás
acceder al contenido evaluable, con lo que no tendrás acceso a las prácticas
evaluables ni al examen de módulo, aunque puedes descargarte el fichero máster con
todas las prácticas de la sección de recursos de la página inicial del curso y realizarlas
sin que sean evaluadas.
El tiempo estimado para completar este módulo son 4 horas y el tiempo de visionado
de los vídeos alrededor de 32 minutos.
En la práctica del módulo crearemos una función para extraer una palabra de un
párrafo concreto de un fichero de texto.
Hola, en este vídeo vamos a hablar sobre cómo trabajar con archivos en python. Qué
hemos visto hasta ahora, hasta ahora en el curso hemos visto la entrada de datos,
usando el comando input le pedíamos a un usuario que introdujera datos a nuestras
aplicaciones, también hemos visto la salida de datos, principalmente hemos usado
print para mostrar nuestra resultados por pantalla, luego hemos estado usando la
memoria del del equipo tanto cuando hemos declarado instrucciones, hemos declarado
funciones, hemos declarado variables, guardábamos esos valores dentro de una
variable, los modificamos realmente estábamos usando la memoria del ordenador y al
mismo tiempo estábamos usando el procesador cuando ejecutábamos nuestro nuestro
intérprete era el procesador el que estaba interpretando línea línea y ejecutando su
contenido, y estas han sido nuestras piezas hasta ahora, pero realmente hay muchas
más en el lego que es python, hay acceso a bases de datos, hay acceso a vídeos, hay
81
acceso a elementos online y además hay elementos acceso a archivos, los archivos
son distintas cosas realmente es lo que contiene los datos en el equipo, tanto los
vídeos, como los audios, como los textos y en el curso vamos a hablar sobre cómo se
trabaja con los documentos de texto, qué es un archivo documento de texto, para
python es un conjunto de líneas con cadenas dentro de cada una de esas líneas, es
muy fácil de trabajar con ellos y es muy fácil de recorrerlos, lo veremos en el siguiente
vídeo y veréis como es muy fácil y muy cómodo.
Para esta práctica, si trabajáis en local, tendréis que descargar (pulsando el botón derecho del
ratón) en el directorio de trabajo de python el fichero ejercicio.csv (no os olvidéis de cambiarle la
extensión a .csv).
Hola en este vídeo vamos a ver cómo trabajar con documentos de texto,
en el medio anterior explicamos un poco que eran los documentos
de texto para Python, que eran un conjunto de líneas, y
dentro de cada línea habían cadenas de texto, y ahora vamos
a ver cómo se trabaja con ellos en Python,
para ello me he preparado este archivo, donde tengo este documento ejercicio
csv, que es este de aquí como veis es un csv con
unos datos de alguien que se ha ido guardando, lo que hacía
cuando, el ejercicio que hacía. Si nosotros quisiéramos acceder
a esos datos desde Python sería tan fácil, ¿cómo? pues usando el
comando open, el nombre del archivo con la ruta completa si
no estamos en la misma carpeta que el archivo, y opcionalmente
un modo de apertura, esto lo veremos ahora mismo.
Esto nos guardar aquí un manejador de archivo, con el cual
podemos hacer cosas, una de las cosas que más fáciles de utilizar
es simplemente llamar al comando read, lo que hará es
todo el contenido y convertirlo en una cadena, esta cadena la
podríamos guardar en una variable, y a hacer las operaciones
que estábamos haciendo con cadenas hasta ahora. Si os dais
cuenta los saltos de línea, lo que ha hecho ha sido poner los
barra ene que hablamos, cuando estuvimos hablando de las cadenas
esto sería. Algo muy importante es cuando nosotros abramos
un archivo y estemos trabajando con él, pasa como cuando estamos
abriendo un archivo de texto o un documento con el word si
luego lo queremos abrir con otra cosa, va a dar
problemas porque ya no tiene abierto otra aplicación, realmente
cuando estamos haciendo el open, lo estamos abriendo nuestra
82
aplicación que es Python, si esto se quedará
abierto luego no podríamos abrirlo con otra aplicación o
podrá hacer cosas con él. Es importante que cuando terminamos
de trabajar con el archivo lo cerremos, para eso usaremos el comando
close, si os dais cuenta si intento acceder al contenido del archivo después
del close, nos va a decir estás intentando hacer una operación
de entrada salida con un archivo cerrado, no nos permite, no nos
lo permite hacer, en cambio, ese archivo ahora mismo está libre
para que lo haríamos con un excel o lo habrían con cualquier
otra cosa y lo pudiera modificar.
Como os he dicho este este erre de aquí es opcional y pero
hay distintos modos de apertura, si nosotros lo quitáramos
realmente sería lo mismo que tenerlo con el real erre que
es modo de lectura, y ahora vamos a ver los distintos modos modos
de apertura que hay son estos de aquí, como veis hay algunos
que empiezan por r, que son de lectura, y son lectura normal,
lectura en modo binario, por ejemplo, cuando queremos abrir un
archivo de vídeo de audio, lo abriríamos con lectura modo
binario, lectura y escritura el esto es lo mismo pero para binarios,
estos de escritura, empiezan por uve doble se os veis tenemos
los mismos modos, lo único que esto no nos van a permitir escribir
dentro del archivo, y por último tenemos los de agregar, estos
modos de agregar contenido, lo que hacen es abrir un archivo
y irse al final del archivo es como un modo de escritura
lo único que empiezarás, empezarás al final del archivo, ¿vale?
y veamos algunos métodos del objeto archivo, del objeto fail
entonces, para esto lo que vamos a hacer es dentro del de la
variable archivo guardo un manejador de archivos con el open
mismo archivo de ante y en modo lectura ¿vale? entonces dentro
de la variable contenido, archivo punto read y lo voy a mostrar
en pantalla con print y por último lo cierro para poder usarlo
más adelante o volverlo a labrir o abrirlo con otra cosa.
¿Vale? si os dais cuenta esto cuando he hecho el print, me ha
mostrado una línea detrás de otra, porque Python por detrás
lo que ha hecho ha sido cuando ha hecho el Open
y en el read todos los saltos de línea me ha puesto un
barra ene, entonces aunque la cadena entera era como esta de aquí
arriba, cuando hacemos el print nos la muestra así.
Si os dais cuenta al aquí al final hay otro salto de línea
ese salto de línea, lo incluye el propio print
si ponemos varios prints, uno detrás de otro de trozos de archivos
habran saltos de línea, porque tendremos los saltos de línea
del read y los saltos de línea del print, esto lo veremos más
adelante cómo quitarlos. En un ejemplo
¿vale? de hecho lo vamos a ver ya, otro que tenemos es el read line
como he dicho esto es un manejador, un manejador lo que hace es
simplemente está apuntando al principio del fichero y está
83
esperando órdenes, cuando nosotros le decimos read lo que hace
es coger desde el principio hasta el final del archivo y volcarlo
todo en una variable, pero nosotros podemos hacer read line y esto
lo que hace es ir yendo línea a línea, entonces cada vez que ejecutamos
read line, le una línea y la guarda y la devuelve para
que hagamos con ella lo que queramos, en este caso guardarlo en una variable
entonces en línea cero, guardamos la primera línea y en línea
uno, guardamos la siguiente si luego hacemos un print, tanto de
línea cero como de línea uno, si ejecutó esto aquí se ve más
claro de los saltos de línea que decía antes, porque por un
lado tenemos el salto de línea que tenemos aquí por el read
line, y por otro lado tenemos el salto de línea del print.
Cuando estuvimos hablando de las cadenas vimos una función
que era strip que no servía para quitar el final de las cadenas
aquellos caracteres invisibles, como los espacios, o los saltos
de línea, si no quisiéramos tener estos saltos de línea aquí
lo que tendríamos que hacer, es a esta línea de aquí que viene con salto
de línea hacerle una strip,
lo mismo para la de abajo
esto lo ejecutamos ahora, vemos que hemos quitado los saltos
de línea esto que está hablando todo el rato.
Otra cosa se va a hacer con los read lines es recorrer
el archivo dentro de un bucle for, para cada línea en el archivo
punto read lines hacer un print de la línea.
Esto si os dais cuenta nos está mostrando el archivo igual que
antes, pero lo hemos recurrido línea línea esto cuando el
archivo es muy pequeño alomejor no tiene sentido pero cuando
tenemos archivos de cientos de megas intentar hacer un
punto read, como esta de aquí arriba es inma, es querer matar al
ordenador, entonces haremos trabajaremos con trozos de línea
algo más manejable para que no saturar al al equipo simplemente
con la lectura del archivo. Los saltos de línea que aparecen
aquí, una vez más, los podemos arreglar con el punto strip.
El tell, el tell nos dice en qué posición del archivo estamos
ahora mismo, entonces si yo aquí abro el archivo
cuando hacemos un archivo punto tell, esto lo que nos está llevando
es, diciendo en qué punto del archivo estamos ahora mismo nos
dirá cero, porque está en el primer carácter del archivo.
Después de hacer un read line, cuando hagamos el punto tell nos
dirá la posición del archivo que estará que es pues justo
al final de la última línea, entonces ejecutando esto nos
dice cero veintiséis que es los caracteres
este de aquí y este de aquí.
Cuando decidamos el siguiente read line eso se iría moviendo, nosotros
podemos saber en qué está en qué punto estamos
con ese tell con el length del archivo podríamos saber el tamaño
del archivo total, y entonces podríamos hacer cosas como poner
84
una un porcentaje de progreso de procesado el archivo. Otra
de las cosas que podemos hacer, es saltar a un punto en concreto del archivo,
por ejemplo, si nosotros hacemos un read, lo que estamos haciendo
realmente es recorrer todo el archivo, entonces
si yo hago un read y hago un tell, si os dais cuenta nos dice que estamos
aquí, al final del archivo, luego hacemos un seek y nos vamos
a otra vez al principio. Esto nos podría servir, por ejemplo,
vuelvo a abrir el archivo
vale y hago un archivo, archivo punto
read y lo ejecuto, luego me añado otro trozo de código y vuelvo a hacer
digo punto read,
no nos devuelve nada porque esto ya está al final del archivo
y al hacer el read no está devolviendo nada, si quisiéramos
volver a leer el archivo entero tendríamos que primero hacer
un seek, irnos al principio luego ya podríamos volver a leer el archivo
y vuelve a funcionar. Acordaros como siempre de hacer archivo punto
close al terminar,
luego cuando en el siguiente vídeo trabajaremos sobre la escritura
y veremos el close, esto es todo en este parte del vídeo.
Hola, en este vídeo vamos a seguir viendo cómo trabajar con documentos de texto en
Python. En el vídeo anterior nos quedamos justo antes de trabajar con la escritura de
archivos lo hemos acordado así para hacer más fácil el acceso a esta parte en
concreto del vídeo. Como veis aquí el archivo lo he abierto con esta extensión con este
formato w+.
Los tipos de apertura de, los modos de apertura de archivos los explican el vídeo
anterior y el w+ es escritura lectura, escritura y lectura sobreescribe archivo si existe y
crea un archivo si no existe. Entonces, esto lo que hace nos permite leer y escribir y
además escribe crear un archivo si no existe que es nuestro caso si os dais cuenta el
archivo no existe.
Nosotros lo que hacemos es abrir el archivo en modo escritura luego con el comando
write escribimos la cadena que queremos escribir y luego el comando close nos lo
cerrará.
Ejecutamos esto aquí ha aparecido prueba escritura punto extensión el archivo que
hemos creado y como veis tiene la nueva cadena en el archivo, vale. Si nosotros
volviéramos a ejecutar esto el archivo resultante, el archivo que tenemos que es
prueba escritura punto extensión, tiene exactamente lo mismo ¿Por qué es esto?
Porque lo hemos abierto con el con el w que es escritura y el + esto lo que ha hecho
ha sido volver
a abrir el archivo porque ya existía y desde el principio lo primero que ha hecho ha sido
escribir esto empezando desde el cero porque el manejador de archivo está el principio
del archivo. Como es exactamente la misma cadena nuestro archivo no ha cambiado
para nada. Si aquí le pusiéramos una a por ejemplo, lo volviéramos ejecutar, así, esto
85
lo actualizo veis esto ha cambiado completamente el principio del archivo porque
estábamos aquí y hemos empezado a escribir desde aquí ¿Qué pasa si quisiéramos
escribir a continuación al final del archivo? Pues en lugar de abrirlo con el modo w, lo
tendríamos que abrir con el modo a por ejemplo, así que es open de añadir esto hace
exactamente lo mismo pero aquí el puntero del manejador archivo en lugar de estar al
principio está al final del archivo, entonces es cuando nosotros escribimos y lo que
estamos haciendo es añadir líneas al final.
Si quisiéramos que empezará justo abajo lo que tendremos que hacer pues es añadirle
un salto de línea aquí.
Esto cada vez que lo ejecutamos nos va a ir añadiendo nuevas líneas
con este texto, ¿Veis?
Esto está en el archivo que estamos escribiendo.
Cuando estemos trabajando con archivos por cómo funcionan
los sistemas operativos hay veces que cuando nosotros hagamos
el write el escribir la cadena que estemos escribiendo no siempre
aparezca automáticamente en el archivo. Esto que estamos haciendo
aquí como el procesador está ocioso en este caso
lo escriben enseguida, pero hay veces que el proceso está haciendo
el procesador está haciendo muchas otras cosas estamos en
un servidor, estamos trabajando con un archivo muy complejo
y no le da tiempo a escribir cada una de las líneas.
Entonces cuando nosotros hacemos realmente esto ¿Vale?
realmente está este orden de escritura no se
ejecuta de forma definitiva hasta que nosotros cerremos el
archivo. Si nosotros el archivo lo mantenemos abierto y estamos
haciendo otras operaciones de escritura estas no siempre van
a estar disponibles aquí, en este caso si os dais cuenta no
lo ha añadido todavía hasta que una de dos o cerremos el archivo
y entonces le forzamos a hacer todas las escrituras o usemos
el comando flush que esto lo que hace es decirle a Python lo que
tienes en el buffer de escritura guardarlo todo el archivo
entonces todos los writes que hayamos acumulado se volcarán
al archivo y modificarán el archivo como hemos hecho el flush
vemos que tenemos la cadena para flushear, antes no estaba y justo
después de esto sí. Como siempre al finalizar de trabajar
un archivo es conveniente cerrarlo
y respecto a este es conveniente cerrarlo muchas veces es un
problema porque nosotros aquí hacemos un open, hacemos una
serie de operaciones y al final lo cerramos mientras
todo va bien no hay un ningún problema siempre y cuando nos acordemos
de cerrar pero hay veces que esto puede fallar
hemos visto cómo hacer control de errores con el try y el
catch pero hay veces que es mucho más cómodo usar with open.
With open lo que nos hace es decir esto es una
apertura normal del archivo, este es el manejador que vamos
a usar de archivo o sea exactamente lo mismo que esto de aquí
pero al hacerlo dentro de un with cuando falle algo de aquí
86
se saldrá fuera y cerrará correctamente el archivo siempre
pase lo que pase dentro y este manejador de archivo solamente
estará disponible dentro de este entorno.
Como vimos en los vídeos anteriores esto de aquí, esto es
como si fuera un if o un for y todo y mientras estemos aquí
dentro podremos trabajar con el archivo y una vez nos salgamos fuera
dejaremos de tener este archivo disponible.
Entonces si yo ejecuto esto
vemos que el primer print nos muestra el read
pero este print que está fuera del open del with open nos da un error
de el archivo está cerrado. El archivo está cerrado si aquí
hiciéramos cualquier cosa que diera error el archivo estaría
cerrado también correctamente no no nos lo habíamos dejado
abierto aunque el programa se hubiera finalizado incorrectamente
y esto es todo sobre el trabajar con archivos.
Hola, en esta serie de vídeos vamos a ver algunos ejercicios muy básicos cuando
documentos en python y qué mejor unos ejemplos para verlos. Veamos el primer
ejemplo de ejercicio es contar las líneas de un archivo, combina todo lo que hemos
aprendido para contar las líneas que tiene el archivo ejercicio csv. Archivo ejercicio csv
es este que tenemos aquí, con una serie de líneas, el editor de archivos ya nos dice
cuántas líneas tiene, pero queremos hacerlo con python, lo primero que vamos a hacer
es abrir el archivo y de volcarlo en manejador, manejador es igual open, el nombre del
archivo ejercicio .csv. Es importante saber que podemos hacer el archivo así porque
estamos directamente en la misma carpeta que el archivo si no tendríamos que poner
la ruta completa como solamente queremos contar podemos poner aquí o una r o no
deja poner nada porque lo abriremos en modo lectura.
Vale, aquí dice combina todo lo que hemos aprendido para contar las líneas, cómo
hicimos para contar el número de elementos de una lista, lo que hacíamos era un
bucle for y ese bucle for si os acordáis tenía una, una inicialización, el bucle y luego
una finalización entonces lo primero que vamos a hacer es cuenta igual a cero, la
inicialización, entonces para cada línea en el manejador es igual a cuenta más uno
este bucle irá recorriendo líneas y al final nos dirá cuántas líneas tiene.
Vale y por último pues pondremos un mensaje con el resultado, print el mensaje; El
documento ejercicio .csv tiene cuenta, líneas esto lo voy a hacer con un efe string que
lo usado otras veces acordaros esto es como las cadenas normales lo único que nos
permite con las llaves estas poner el valor de una variable, ejecutar un trozo de python
y mostrarlo, entonces si ejecuto esto nos dice el documento ejercicio punto csv tiene
noventa y una líneas, este sería el primero de los ejercicios.
Para esta práctica, si trabajáis en local, tendréis que descargar (pulsando el botón derecho del
ratón) en el directorio de trabajo de python el fichero ejercicio.csv (no os olvidéis de cambiarle la
extensión a .csv).
88
Python - Ejercicios con documentos III https://youtu.be/CGty8OsR_X8
Hola seguimos con los ejercicios con documentos como siempre,
con un ejemplo. Veamos aquí seleccionando archivos, modifica
el primer ejercicio para que nos permite seleccionar qué archivo
que hemos utilizar al contar las líneas usando el comando
input, pues como queremos modificar el primer ejercicio lo primero
que haremos será coger el código del primer ejercicio
y copiarlo donde pone tu código aquí,
y nos dice modifica el primer ejercicio para que nos permita
seleccionar qué archivo queremos utilizar al contar las líneas
usando el comando input, no se si os acordais pero el comando input nos
permitía pedir al usuario un dato que en este caso va a ser
el nombre del archivo. El nombre archivo
a ser igual a input y lo, le preguntaremos al usuario algo
como por ejemplo, introduce el nombre del archivo
que quieres utilizar.
Vale entonces para utilizar este archivo, borraremos hasta aquí
y que usaremos lo que nos devuelve el usuario nombre archivo.
Lo ejecutaremos y vemos que aquí nos hace una solicitud introduce
un nombre de archivo que quieres utilizar, nosotros podemos hacer como antes,
ejercicio punto csv. Vale el documento ejercicio
csv tiene noventa y una líneas, un detalle aquí este mensaje
no lo hemos modificado si queremos que esto cambie dependiendo
del nombre del archivo tendremos que borrar esto de aquí,
aquí poner nuestro nombre archivo, entonces ahora bien por
ejemplo cogiéramos uno de los libros de recetas que estábamos
utilizando antes libro de recetas punto py
libro de recetas punto py, el documento libro de recetas punto pe y
tiene seis líneas y esto sería todo en este segundo, tercer ejercicio.
Hemos creado una instancia en la plataforma Binder, que permite crear y ejecutar de forma
remota código sin necesidad de crear un usuario. Podéis acceder al entorno de desarrollo en
Binder pinchando en el logo que aparece a continuación.
Binder (mybinder.org)
Si habéis instalado Python y queréis realizar la práctica en vuestro entorno local también podéis
hacerlo. Tenéis que descargar el siguiente fichero comprimido y descomprimirlo en una carpeta
de vuestro ordenador.
fichero
Resumen
En el módulo hemos tratado cómo se almacena el texto en ficheros, las distintas
formas que tiene Python de abrir un fichero de texto y las funciones y métodos
necesarios para cargar el contenido del fichero en variables, moverse por el fichero de
texto y escribir en él. También hemos visto un ejemplo práctico de cómo afecta la
selección del código de caracteres al abrir el fichero.
92
Lista de videos
Problemas en la instalación
https://www.anaconda.com/products/individual si existe problemas en la instalación pueden
seguir este video es de mucha ayuda. https://www.youtube.com/watch?v=V-6AxVwJZbs
https://github.com/leosamu/pythonMoocCompanion/archive/master.zip
93
https://github.com/leosamu/pythonMoocProblems/archive/master.zip
94