0% encontró este documento útil (0 votos)
3 vistas421 páginas

Curso de Python

El curso de Python desde cero abarca desde la instalación del software hasta la programación de redes, incluyendo conceptos fundamentales como POO, algoritmos, listas, y bases de datos. Se utilizan herramientas como Sublime Text 3 y se enseñan las bases de la sintaxis, funciones, listas, tuplas y diccionarios. El curso incluye ejercicios prácticos para facilitar el aprendizaje y la aplicación de los conceptos.

Cargado por

Jose Medina
Derechos de autor
© All Rights Reserved
Nos tomamos en serio los derechos de los contenidos. Si sospechas que se trata de tu contenido, reclámalo aquí.
Formatos disponibles
Descarga como PDF, TXT o lee en línea desde Scribd
0% encontró este documento útil (0 votos)
3 vistas421 páginas

Curso de Python

El curso de Python desde cero abarca desde la instalación del software hasta la programación de redes, incluyendo conceptos fundamentales como POO, algoritmos, listas, y bases de datos. Se utilizan herramientas como Sublime Text 3 y se enseñan las bases de la sintaxis, funciones, listas, tuplas y diccionarios. El curso incluye ejercicios prácticos para facilitar el aprendizaje y la aplicación de los conceptos.

Cargado por

Jose Medina
Derechos de autor
© All Rights Reserved
Nos tomamos en serio los derechos de los contenidos. Si sospechas que se trata de tu contenido, reclámalo aquí.
Formatos disponibles
Descarga como PDF, TXT o lee en línea desde Scribd

CURSO PYTHON

DESDE 0

Pere Manel Verdugo Zamora


Sobre los vídeos de PILDORASINFORMATICAS
TEMARIO (VIDEO 1)

• Introducción
• Requisitos previos.
• Instalación software
• Fundamentos y sintaxis básica del lenguaje
• POO con Python
• Algoritmos, listas y tramos.
• BBDD
• Trabajo con gráficos y contenidos.
• Procesos y tareas.
• Programación de red.
• Sockets
• Ejercicios prácticos.

1
INTRODUCCIÓN (VIDEO 2)

• Historia de Python y características de Python.


• Requisitos hardware e instalación de Python.
• IDE a utilizar.

Características.

• Creado por Guido Van Rossum a comienzos de los 90.


• Lenguaje de alto nivel. Gramática sencilla, clara y muy legible.
• Tipado dinámico y fuente.
• Orientado a objetos.
o Sobrecarga de constructores. Herencia múltiple. Encapsulación. Interfaces.
Polimorfismo.
• Open Source.
• Fácil de aprender.
• Librerías estándar muy amplia.
• Interpretado.
• Versátil.
o Aplicaciones de escritorio, aplicaciones de servidor, aplicaciones web.

Instalación Python
Tendremos que ir a la siguiente página web: [Link]

2
Selecciona el botón y este descargará la versión para tu sistema operativo.

En mi caso como estoy trabajando con Windows, en la carpeta Descargas encontraremos el


siguiente archivo.

Activaremos la opción Add Python 3.8 to PATH, para que desde la línea de comando tengamos
acceso a dicha aplicación.

A continuación seleccionaremos Install Now.

3
Empieza la instalación.

Seleccionaremos path length limit, seguido del botón Closes.

Observaremos en nuestro ordenador que se han instalado las siguientes aplicaciones:

4
Una de las aplicaciones es IDLE (Python 3.8 32-bit), si lo ejecutamos observaremos una especie
de consola:

Para programa Python podemos utilizar varios editores como Eclipse, Notepadd++ o Sublimetext
3 entre otros, en este curso vamos a utilizar Sublimetext 3.

5
6
SINTAXIS BÁSICA I (VIDEO3)
En este capítulo veremos:

• IDLE Python
• Primeras instrucciones en Python
• Instalación Sublime Text 3

Vamos a ejecutar IDLE de Python

Observamos el siguiente símbolo >>> este es el prompt de la consola donde introduciremos


nuestras instrucciones Python.

Vamos a escribir la siguiente instrucción:

>>> print (“Hola Alumnos”)

Al ejecutar la tecla Enter se ejecutará el resultado.

Si queremos incluir varias instrucciones en una misma línea esta irá separadas por ;.

7
Podremos agregar comentarios que nos pueden ayudar en la realización del programa, este
empezará por el símbolo de almuadilla (#).

También se utilizar para invalidar linear de código que no queremos borrar.

Observas que al pulsar Enter no da error e ignora la línea.

Utilizaremos la barra \ si queremos que la instrucción tanga más de una línea.

No se utiliza con frecuencia pero era interesante comentarlo.

La identación consiste en programar de una manera que a la hora de programas vemos las
líneas que pertenecen a una parte del programa.

8
Cuando el código se muestra más hacia la derecha es la dentación, para ejecutar este ejemplo
tenemos que dar dos Enter.

Pero para poder programar con más facilidad vamos a usar el editor Sublime Text 3, este lo
encontraremos en la siguiente página web: [Link]

Seleccionaremos Windows -also as a portable versión si trabajas con Windows y si trabajas con
otro sistema operativo descargas el tuyo.

Vamos a descargas y veremos el siguiente archivo.

Vamos a copiarlos en una carpeta en el Escritorio para descomprimirlo.

9
Ejecutamos el siguiente archivo:

10
Vamos a configurarlo para trabajar con Python.

Del menú seleccionaremos Tools y de este Command Palette…

Escribiremos Install Package Control.

A continuación en la misma línea escribiremos: Install Package.

Ahora le decimos que nos busque sublimeREPL.

11
Hacemos Enter.

Desde el menú Tools en la parte inferior aparecerá SublimeREPL.

12
Ahora de Tools, seleccionaremos SublimeREPL, de este seleccionaremos Python y por último
Python.

Así nos quedará el editor.

Este editor no ayudará a la hora de realizar nuestros programas.

13
14
SINTAXIS BÁSICA II Tipos, operadores y variables (VIDEO 4)

• Variables

• Operadores

o Aritméticos: Suma (+), Resta (-), Multiplicación (*), División (/), Módulo (%),
Exponente (**) y División entera (//).
o Comparación: Igual que (==), Diferente que (¡=), Mayor que (>), Menor que (<),
Mayor o igual que (>=) y Menor igual que (<=).

15
o Lógicos: AND, OR y NOT.
o Asignación: Igual (=), Incremento (+=), Decremento (-=), (*=), (/=), (%=), (**=) y
(//=).
o Especiales: IS, IS NOT, IN, NOT IN.

Variable
Espacio en la memoria del ordenador donde se almacenará un valor que podrá cambiar durante
la ejecución del programa.

A continuación vamos a ejecutar Sublime Text.

Del menú Tools seleccionaremos SublimeREPL de este Python y de nuevo Python.

16
Operadores

Variables
Ejemplo de nombres de variables, Nombre, nombre, nombre3, mi_nombre.

El tipo de variable no lo establece el contendor, sino el contenido.

Para saber el tipo de variable utilizaremos la función type().

17
Utilizando las tres comillas.

18
Condiciones

Operador de asignación = y operador de comparación ==.

19
SINTAXIS III FUNCIONES I (VIDEO 5)

• Funciones
o Qué es
o Utilidad
o Sintaxis
o Ejecución

¿Qué son?

• Conjunto de líneas de código agrupadas (bloque de código) que funcionan como una
unidad realizando una tarea específica.
• Las funciones en Python pueden devolver valores.
• Las funciones en Python pueden tener parámetros/argumentos.
• A las funciones también se las denomina “método· cuando se encuentran definidas
dentro de una clase.

Utilidad

• Reutilización de código (cuando sea necesario o si es necesario)

Sintaxis

• Def nombre_funcion():
o Instrucciones de la función
o Return (opcional)
• Def nombre_función(parámetros)
o Instrucciones de la función
o Return (opcional)

Ejecución

• Nombre_función() → Si no recibe parámetros.


• Nombre_función(parámetros) → Si recibe parámetros.

A continuación vamos a ejecutar Sublime Text.

Vamos a comprobar lo siguiente:

20
Comprobar que estamos trabajando en el lenguaje adecuado del menú Tools, la opción Build
System veamos la opción Python activada, sino la tenemos que activar.

Para guardar nuestro proyecto seleccionaremos File y de este Save.

21
Seleccionaremos la carpeta donde queremos guardar los proyectos del curso.

El nombre del proyecto tiene que tener una extensión py, seguido del botón Guardar.

Observarás que el editor colorea el texto.

Para poder ver el resultado del menú Tools seleccionamos Build o con las teclas rápidas Ctrol
+B.

22
En la parte inferior veremos el resultado.

Si modificamos el código este lo tendremos que guardar del menú File y de este Save o con las
teclas rápidas Ctrol +S.

A continuación le damos a Ctrol +B

Ahora queremos que estas instrucciones se ejecuten 5 veces.

23
Esto sería lo más fácil pero no lo más correcto.

Lo correcto será crear la función que esta no se ejecutará hasta que sea llamada, en el siguiente
ejemplo hemos creado una función def mensaje(): que imprime tres mensaje que para que estén
dentro de la función estos tienen que estar dentados hacia la derecha, a continuación esta
función es llamada 5 veces.

Ctrol + S para guardar los cambios y Ctrol + B para ver el resultado.

24
Ahora escribe el siguiente código:

# funciones predefinidas
def mensaje():

print("Estamos aprendiendo Python")


print("Estamos aprendiendo intruccioines básica")
print("Poco a poco iremos avanzando")

print("---mensaje 1---")
mensaje()
print("---mensaje 2---")
mensaje()
print("---mensaje 3---")
mensaje()
print("---mensaje 4---")
mensaje()

25
print("---mensaje 5---")
mensaje()

Podrás observar que entre llamada de función y función podemos insertar más código.

Guardamos y ejecutamos.

26
27
SINTAXIS BÁSICA IV FUNCIONES II (VIDEO 6)

• Funciones
o Paso de parámetros

Ejecutaremos Sublime Text

Basándonos en el ejemplo anterior hemos creado una función llamada suma(): en la que
declaramos dos variables num1, num2 y le asignamos los respectivos valores de 5 y 7.

En la línea 6 llamamos a la función, recuerda que una función se ejecuta si es llamada.

Recuerda que una función se puede llamar las veces que la necesitemos.

En este ejemplo cada vez que llamemos la función esta sumará los mismos valores, lo ideal sería
que pudiera sumar valores distintos, para ello necesitamos crear una función con parámetros.

Ctrol+S y Ctrol + B

28
Si en una función con parámetros utilizamos
la opción return devuelve un valor como
estas máquinas nos retorna un artículo.

Además si a esta máquina le hemos de


introducir un código para que nos retorne un
determinado artículo, la similitud aun en
mayor.

El código introducido sería los parámetros


que le pasamos a la función.

Def suma(mum1, num2):


Resultado = num1 + num2
return resultado

print(suma(5,7))

print(suma(2,3))

print(suma(34,358))

29
También podemos pasar el valor de la función a una variable y utilizarla cuando la necesitemos.

30
SINTAXIS BÁSICA V. LAS LISTAS (VIDEO 7)

• Las listas

¿Qué son las listas?

• Estructura de datos que nos permite almacenar gran cantidad de valores (equivalente a
los arrays en otros lenguajes de programación).
• En Python las listas pueden guardar diferentes tipos de valores (en otros lenguajes no
ocurre esto con los array)
• Se puede expandir dinámicamente añadiendo nuevos elementos (otra novedad
respecto a los arrays en otros lenguajes.

Sintaxis de las listas

nombreLista=[elem1, elem2, elem3,……]

Índice es la posición del elemento de la lista, empezando por la posición 0.

Vamos a guardar un nuevo proyecto llamado [Link].

Declaración de una lista.

miLista=["María", "Pepe", "Marta", "Antonio"]

Índice Elemento de la lista


0 María
1 Pepe
2 Marta
3 Antonio

Para imprimir un elemento de la lista

31
Si queremos acceder a un elemento de la lista que no existe, nos generará un error.

En el ejemplo anterior la lista está entre 0-3, si hacemos:

Print(miLista[7]) → al ser un elemento que no existe nos dará error con el siguiente mensaje:

IndexError: list index out of range.

Al poner un valor negativo la búsqueda lo hace a la inversa, empieza a contar por el valor que se
encuentra a la derecha con el valor -1 y se va desplazando hacia la izquierda -2, -3, etc.

Porción de lista

Accedemos los valores desde la posición 2 con el índice 1 hasta la posición 3 con el índice 2, la
posición con el índice 3 no la muestra.

Si queremos mostrar desde el principio hasta el índice 2 una forma de hacerlo es la siguiente:

Print(miLista[:2], al omitir el valor de inicio entiende que quieres imprimir desde el primer
valor de la lista.

Print(miLiusta[2:], al omitir el valor de fin entiende que imprimirá de la lista desde el valor que
se encuentra en el índice 2 hasta el final de la lista.

32
Para agregar elemento en una lista utilizaremos la función append().

Si queremos agregar un nuevo valor a la lista y no queremos que sea al final utilizaremos la
función insert().

Para agregar varios elementos a la lista utilizaremos la función extend().

Para saber dónde se encuentra un elemento dentro de la lista index().

33
Pueden haber varios elementos con el mismo nombre pero la función index retorna el numero
del primer valor que encuentra.

Para saber si un elemento se encuentra o no utilizaremos in

Como este valor se encuentra veremos que en nuestra consola imprime un True si el elemento
no existe imprime un False:

Una lista puede almacenar valores de diferente tipo.

miLista=[“María”, 5, True, 78.35]

Para eliminar elemento de una lista remove()

34
Hemos eliminado Sandra de la lista.

Para eliminar el último elemento de la lista utilizaremos la función pop().

El último elemento de la lista que es Lucia ahora no se muestra.

Si queremos sumas el contenido de dos listas en una tercera lista:

El operador + lo utilizaremos como concatenado de dos listas.

Con el operador * podemos repetir la lista el número de veces que deseemos.

35
36
SINTAXIS BÁSICA VI. LAS TUPLAS (VIDEO 8)

• Las tuplas

¿Qué son las tuplas?

• Las tuplas son listas inmutables, es decir, no se pueden modificar después de su


creación.
o No permite añadir, eliminar, mover elementos, etc (no append, extend,
remove)
o Si permite extraer porciones, pero el resultado de la extracción es una tupla
nueva.
o Si permite comprobar si un elemento se encuentra en la tupla.
• ¿Qué utilidad o ventaja tienen con respecto a las listas?
o Más rápidas
o Menos espacio (mayor optimización)
o Formatean String
o Puede utilizarse como claves en un diccionario. (las listas no)

Sintaxis de la tuplas

nombreTupla=(elem1, elem2, elem3…..)

No se utilizan corchetes como en las listas.

Vamos a crear un nuevo proyecto llamado practica_Tupas.py

Ejemplo de Tuplas.

37
En la posición 3 hay un 1, recuerda que empieza por la posición 0.

Para convertir una tupla en lista vamos a utilizar el método list.

Sabemos que es una lista porque está entre corchetes.

La tupla la muestra entre paréntesis.

Para convertir una lista en tupla utilizaremos el método tuple.

38
Con la instrucción in podemos comprobar si hay elementos.

El método count nos permite mostrar cuentos elementos que nosotros le preguntemos hay en
una tupla.

En este caso el numero 13 está 2 veces.

El método len nos permite averiguar la longitud de una tupla.

39
Tupla con un único elemento, tupla unitaria.

Empaquetado de tupla, consiste en definir una tupla sin los paréntesis:

Mitupla=”Juan”, 13, 1, 1995

Desempaquetado de tupla:

40
41
SINTAXIS BÁSICA VII. LOS DICCIONARIOS (VIDEO 9)
• Los diccionarios

¿Qué son los diccionarios?

• Estructura de datos que nos permiten almacenar valores de diferente tipo (enteros,
cadena de texto, decimales) e incluso listas y otros diccionarios.
• Las principal característica de los diccionarios es que los datos se almacenan asociados
a una clave de forma que se crea una asociación de tipo clave : valor para cada elemento
almacenado.
• Los elementos almacenados no están ordenados. El orden es indiferente a la hora de
almacenar información en un diccionario.

Vamos a crear un nuevo proyecto llamado [Link].

La sintaxis:

midiccionario={"Alemania":"Berlín", "Francia":"París", "Reino Unido":"Londres",


"España":"Madrid"}

Para imprimir todo el diccionario.

42
Agregar más elementos a un diccionario.

El error de Italia Lisboa es premeditado. Ahora vamos a modificar la clave.

En la línea cuatro lo hemos sobre escrito. Ahora vamos a eliminar elementos a un diccionario
(del).

43
También podemos crear un diccionario con distintos tipos de valores:

Midiccionario={“Alemania”:”Berlín”, 23:”Jordan”, “Mosaqueteros”:3}

Convertir una tupla a un diccionario:

Para imprimir un valor del diccionario:

Crear un diccionario que además contiene una lista.

midiccionario={23:"Jordan", "Nombre":"Michale", "Equipo":"Chicago", "anillos":[1991,1992,


1993, 1996, 1997,1998]}

Ahora queremos consultar el Equipo y los anillos, recuerda que anillos en una lista.

44
Si en lugar de una lista queremos agregar una tupla:

midiccionario={23:”Jordan”, “Nombre”:”Michael”,”Equipo”:”Chicago”,

“anillos”:{“temporada”:[1991,1992,1993,1996,1997,1998]}}

Para consultar las claves del diccionario utilizaremos keys()

Si queremos imprimir los valores de las claves utilizaremos values()

45
Si queremos saber la longitud de diccionario utilizaremos len().

Basándonos de la siguiente información:

Crea dos proyecto uno utilizando diccionarios y otro utilizando listas, el usuario tiene que
introducir su documento nacional de identidad sin la letra y el programa tiene que imprimir la
letra del documento.

46
Trabajando con Diccionarios

El resultado será:

Puede probar con tu número del documento nacional de identidad.

Trabajando con listas

Ejecutamos la consola.

47
Puedes probar si funciona con tu número del documento nacional de identidad.

48
CONDICIONALES I (VIDEO 10)

• Condicionales
o Instrucción IF

Operadores de comparación:

Mayor que → “>”


Menor que → “<”
Igual → “==”
Mayor igual que → “>=”
Menor igual que → “<=”
Distinto→ “!=”

Vamos a crear un nuevo proyecto llamado [Link].

49
Ahora vamos a introducir la nota por teclado input().

Para este programa funcione hemos de realizar los siguientes pasos: Del menú Tools,
seleccionaremos SublimeREPL, de este Python y por último Python – RUN current file.

50
Observamos un error porque los valores que se introducen por input son de texto, al llegar la
condición IF el programa no lo entiende, para ello vamos a utilizar la función int().

Repetimos Del menú Tools, seleccionaremos SublimeREPL, de este Python y por último Python
– RUN current file.

Repetimos Del menú Tools, seleccionaremos SublimeREPL, de este Python y por último Python
– RUN current file.

También es correcto “nota_alumno=input(“Introduce la nota del alumno: “)

51
Definición de ámbito: significa que no podremos obtener su valor, así como su modificación si
no estamos en el ámbito de la variable.

52
CONDICIONALES II (VIDEO 11)

• Condicionales
o Instrucción IF. Instrucciones else y elif

La función else → si no es verdad.

Vamos a crear un proyecto nuevo.

Ejecutamos la consola: Del menú Tools, seleccionaremos SublimeREPL, de este Python y por
último Python – RUN current file.

Si eres mayor de 18 años puedes pasar.

Si eres menor de 18 años no puedes pasar.

53
La línea 8 se ejecutará siempre ya que esta se encuentra fuera del if.

Para controlar más condiciones utilizaremos al función elif.

Queremos controlar que si el usuario introduce una edad superior a 100 que nos aparezca un
mensaje de Edad incorrecta.

54
Ejecutamos la consola:

El siguiente ejemplo nos valorará la nota.

Ejecutaremos la consola e introduciremos una nota.

55
Vamos a realizar los siguiente ejercicios:

Las soluciones se encuentran en la siguiente página.

56
57
Solución ejercicio 1:

Solución ejercicio 2:

Solución ejercicio 3:

58
CONDICIONES III (VIDEO 12)
• Condicionales
o Switch ¿Switch?...
o Concatenación de operadores de comparación

Python prescinde de Switch.

¿Cómo conseguir un acceso directo a Python – RUN current file?

Del menú Preferences seleccionamos Key Bindings.

Copiaremos el siguiente texto:


{ "keys": ["ctrl+alt+r"], "command": "run_existing_window_command", "args":
{
"id": "repl_python_run",
"file": "config/Python/[Link]-menu"
}}

Del menú seleccionares File y de este Save.

Cada vez que presionemos Ctrol + Alt + R ejecutaremos Python – Run current file.

59
Para cerrar consola Ctrol + W.

Creamos un nuevo proyecto:

Vamos a utilizar una concatenación de condiciones que pare este ejemplo es:

If 0<edad<100:

Si la primera condición que 0 es menor que edad hace la siguiente comparación que es edad
menor de 100, si este se cumple imprimirá “Edad es correcta” sino se cumple imprimirá “Edad
incorrecta.

Si por error ponemos un número negativo este será el mensaje:

Si ponemos una edad mayor de 100

60
Este será el resultado:

Queremos comprobar si el salario de nuestros empleados cobran según su cargo, es decir bien
equiparados para ello vamos a realizar el siguiente proyecto:

El salario del presidente tiene que ser el mayor, el siguiente el director, a continuación el jefe
de área y por último el administrativo, si este criterio se respeta saldrá el mensaje “Salarios
equiparados” y si no se cumple el mensaje que saldrá “Salarios no equiparados”.

Ejecuta la consola y observa el resultado.

61
Ahora vamos a decirle que el administrativo cobra más que el jefe de área.

62
63
CONDICIONALES IV (VIDEO 13)

• Condicionales
o Operadores lógicos “and” y “or”
o Operador “in”

Vamos a realizar un proyecto para valorar si un alumno tiene o no derecho a beca.

Vamos a valorar la distancia superior a 40 km., tengan más de 2 hermanos en el centro y el


salario familiar sea menor o igual a 20.000 €. Tiene que cumplir los tres requisitos.

Ejecutamos la consola

Ahora ejecuta de nuevo la consola y pon los siguientes valores 65 Km, 1 hermano y salario
familiar 18000 €.

Para que puedas tener beca y como valor prioritario sea el salario_familiar, es decir que si
cobra igual o menos de 20000 ya se te pueda otorgar la beca.

64
Ejecutamos la consola y ahora solo cumplirá el salario familiar.

El alumno a de elegir una asignatura optativa.

El operador in da por verdadero si introducen una de las tres asignaturas especificadas.

Ejecutamos la consola:

Ahora vamos a poner una asignatura que no existe en la relación.

65
Python es case senstitive es decir diferencia las mayúsculas de las minúsculas es para que lo
escribáis igual.

Con la función lower() convierte a minúsculas.

Con la función upper() lo transforma a mayúsculas.

En la línea 5 lo hemos puesto toda la línea en minúsculas.

Con la función lower() paso a la variable asignatura en minúscula, si yo escribo en mayúsculas


no lo tendrá en cuenta.

Ejecutamos la consola:

66
67
BUCLES I. FOR (VIDEO 14)

• Bucles. Tipos
o Bucle for

Si no sabemos lo que es un bucle y quereos imprimir tres veces un mensaje, no nos queda más
remedio que repetirla 3 veces.

El programa funcionaría, pero esto no es eficiente ni recomendable.

Bucles
Determinados Indeterminados

• Se ejecutan un número determi- • Se ejecutan un número indeter-


nado de veces. minado de veces.
• Se sabe a priori cuantas veces se va • No sabe a priori cuantas veces se va
a ejecutar el código del interior del a ejecutar el código del interior del
bucle. bucle.
• El número de veces que se
ejecutará dependerá de las
circunstancias durante la ejecución
del programa.

68
Un error que podemos hacer es un bucle infinito, este no sale y no ejecutaría el resto del líneas
que tiene el programa.

Bucle for (determinado).Sintaxis

For variable in elemento a reccorrer:

Cuerpo del bucle

Identación

Elemento a recorrer: puede ser una Lista tupla, cadena de texto, etc.

Después del for encontramos una identación esto nos dirá las líneas que pertenecen al bucle.

Vamos a realizar un nuevo proyecto:

La variable i va asumiendo los valores de la lista, empezando por primavera y terminando con
invierno.

67
68
BUCLES II BUCLE FOR (VIDEO 15)

• Bucle for
o Recorido string
o Tipo rage
o Notaciones especiales con print

Repite e bucle tres veces porque la lista tiene tres elementos.

Ahora en la función print vamos a utilizar el argumento end.

De este modo omitimos el salto de línea, ahora para que la palabra hola tenga un espacio en el
argumento end pondremos igual comillas espacio comillas.

69
Ha escrito la palabra hola tantas veces como caracteres tiene el correo electrónico.

Ahora vamos a verificar si un correo electrónico en falso o no.

Ahora vamos a borrar la arroba.

70
En esta parte de código:

if email==True: if email:
print("email es correcto") print("email es correcto")
else: else:
print("el email no es correcto") print("el email no es correcto")

Si la línea “if email==True:” lo cambiamos por “if email:” al ser una variable Boleana funcionará
correctamente. Es decir que por defecto la reconoce como True.

Recuerda que si utilizamos == es para un operador de comparación al operador de asignación


que es =.

Ahora vamos a realizar un proyecto en el que nos preguntará por una dirección de correo y
que la pueda evaluar.

Vamos a ejecutar la consola

71
Ahora introduce un correo que no tenga arroba @ y podrás ver como es email no es correcto.

Ahora para verificar que el correo electrónico que introducimos es correcto, es decir que
encuentra la arroba y el punto.

Ahora si omites la arroba o el punto el mensaje será “el email no es correcto”.

Tipo range:

72
Si cambiamos por i veremos el valor en cada bucle.

73
74
BUCLES II BUCLE FOR (VIDEO 16)

Realiza los siguientes ejercicios:

75
Soluciones:

Yo lo he resuelto así:

Propuesta del profesor:

76
Yo lo he resulto así:

Propuesta del profesor.

77
Yo lo he resuelto así:

Propuesta del profesor:

78
• Bucle for
o Tipo range
o Notaciones especiales con print

Si en la función print usamos el parámetro “f” nos permite concatenar un texto con una viariale
que irá entre llaves.

Si en el rango modificamos poniendo (5,10), los valores de la variable i será desde el 5 hasta el
9.

79
Si en rango modificamos los valores por 5,50,3 los valores que asumirá la variable i empezará
por el 5 y al siguiente un incremento de 3 hasta llegar a un valor inferior a 50, en este ejemplo
llega al 47.

La función len() nos retorna el número de caracteres que tiene una variable.

Len(“Juan”) → 4

80
81
BUCLES IV. BUCLE WHILE (VIDEO 17)

• Bucle While
o Sintaxix

While (Sintaxis)

While condición:

Cuerpo del bucle

En un bucle indeterminado porque no sabemos las veces que se ejecutará.

Vamos con un nuevo proyecto:

Vamos a crear un proyecto, que hasta que no introduzcamos una edad correcta este nos irá
preguntando.

82
Si ejecutamos la consola este será el resultado:

Con esta función también puedes utilizar los operadores de comparación y lógicos que
utilizamos con la sentencia if().

Queremos controla que la edad correcta sea entre 5 y 100 años y si no es así que pregunte de
nuevo.

Si ejecutamos la consola este será el resultado:

83
¿Cómo hacer para que un bucle no sea infinito?

Vamos a introducir tres valores negativos.

84
Vamos a introducir un valor negativo y luego otro positivo.

85
BUCLES V. CONTINUE, PASS Y ELSE (VIDEO 18)

• Continue, pass y else

Este será el resultado:

En la línea 2 le estamos diciendo que cuando encuentra la “h” continue, esto quiere decir que
salte el resto de código y vuelva de nuevo al ciclo.

86
Por ese motivo la letra h no se visualiza.

En el siguiente texto “Píldoras Informáticas” si utilizamos la función len() esta nos retornará el
número de caracteres incluido el espacio en blanco que se encuentra entre las dos palabras ya
que el espacio en blanco también es un carácter.

Len(Píldoras Informáticas) es igual a 21.

Vamos a realizar un proyecto que nos diga el número de caracteres que hay sin contar el
espacio en blanco.

Pass

Por ultimo tenemos a pass, que tal como su nombre lo indica es una operación nula, o sea que
no pasa nada cuando se ejecuta. Se utiliza cuando se requiere por sintaxis una declaración pero
no se quiere ejecutar ningún comando o código. También se utiliza en lugares donde donde el
código irá finalmente, pero no ha sido escrita todavía (utilizándolo como un relleno temporal,
hasta que se escriba el código final).

87
Segundo ejemplo:

88
Como podemos ver la instrucción else está alineada con el for, su finalidad consiste que cuando
ha completado el bucle irá a ejecutar las instrucciones que hay después del else.

Si en el ciclo for hay una condición que cuando se cumple ejecuta la instrucción break, ignorará
las instrucciones que hay después del else.

Cuando ejecutemos la consola e introduzcamos un correo electrónico si este no tiene arroba


arroba será a False.

Si introducimos un correo con su correspondiente arroba nos dará True.

89
90
GENERADORES I (VIDEO 19)

• Generadores
o ¿Qué son?
o Funcionamiento
o ¿Qué utilidad tienen?
o ¿Cuál es su sintaxis?

Generadores ¿Qué son?

• Estructuras que extraen valores de una función y se almacenan en objetos iterables


(que se pueden recorrer).
• Estos valores se almacenan de uno en uno.
• Cada vez que un generador almacena un valor, esta permanece en un estado pausado
hasta que se solicita el siguiente. Esta característica es conocida como “suspensión de
estado”.

Generadores ¿Qué utilidad tienen?

• Son más eficientes que las funciones tradicionales.


• Muy útiles con listas de valores infinitos.
• Bajo determinados escenarios, será muy útil que un generador devuelva los valores de
uno en uno.

Generador. Sintaxis

Def generaNumeros():

Yield números

Ahora veremos un caso practico creando un función que después convertiremos a generador.

91
Este mismo ejemplo usando un generador.

Podrás observar que el resultado es el mismo.

Ahora solo quiero imprimir los tres primeros elementos.

92
Este método ahorra recursos en el sistema.

93
GENERADORES II (VIDEO 20)

• Nueva instrucción yield from


• Utilidad: Simplificar el código de los generadores en el caso de utilizar bucles anidados.

El resultado:

¿Cómo podemos acceder a cada una de las letras que forman parte de los elementos?

94
El resultado:

Otra forma de hacerlo más simplificado:

95
96
EXCEPCIONES I (VIDEO 21)

• Excepciones
o ¿Qué es una excepción?
o ¿Cómo manejar excepciones?

• Las excepciones son errores que ocurren durante la ejecución del programa. La sintaxis
del código es correcta pero durante la ejecución ha ocurrido “algo inesperado”.

Partiendo de este código:

Nos encontramos con un código que no tiene errores, pero a la hora de ejecutarlos según los
valores que vayamos a introducir esto puede generar un error.

Primero lo vamos a ejecutar haciendo una suma.

97
Ahora vamos a realizar un división entre 0, esto genera número infinitos y provocará un error.

El programa cae nos muestra la línea que ha generado el error y no termina su ejecución.

La solución es hacer una captura o control de excepción.

Si realizamos estos cambios, le estamos diciendo con try que intenten ejecutar la siguiente
línea y si esta genera un error porque el usuario a introducido un valor incorrecto, salte a la
línea except con su respectivo error, muestre un mensaje y continúe con su ejecución.

98
99
EXCEPCIONES II (VIDEO 22)

• Capturas de varias excepciones


• Cláusula finally

Siguiendo con el programa anterior, queremos controlar que si el usuario en lugar de introducir
un numero introduce un texto veremos lo que pasa:

Observamos el siguiente mensaje. “ValueError”

Esto afecta a las siguientes líneas.

Para controla que el usuario no pone textos en lugar de número modificaremos el siguiente
código:

100
Cuando lo ejecutemos e introduzcamos un texto el lugar de un número observaremos el
siguiente mensaje:

Y preguntará de nuevo has que introduzcamos los valores correctos.

Vamos con otro ejemplo:

Hemos creado una función para dividir dos números, con lo comentado anterior aquí se pueden
generar dos errores por parte del usuario, introducir texto en lugar de números o hacer una
división entre 0.

101
Ahora si introducimos un numero incorrecto:

Si dividimos entre 0.

Y si introducimos todos los datos correctamente.

Imagina que tienes un código que podría tener muchos errores, necesitaríamos introducir
muchas excepciones.

102
Definimos except sin especificar el tipo de error, si introducimos un mensaje este será mas
genérico y menos información dará al usuario.

Ejecutamos el proyecto:

Hemos introducido un valor incorrecto.

División por 0.

Introducidos los valores correctamente.

103
Con la instrucción finally le estamos diciendo que si no se comenten errores, es decir que ignora
los except, ejecute lo que se encuentra en finally, de esta forma nos aseguramos de que al no
haber ningún error imprima el mensaje.

Al eliminar los except el programa no mostrará los mensajes, pero al estar la función finally
mostrará el mensaje “Cálculo finalizado” y después mostrará los errores.

Si borramos el finally y dejamos el try esto genera un error, ya que el try necesita un except o
un finally.

104
105
EXCEPCIONES III (VIDEO 23)

• Lanzamiento de excepciones
o Instrucción Raise
o Creación de excepciones propias (más adelante en el curso cuando veamos la
POO)

Partiendo del siguiente ejemplo:

Si lo ejecutamos

El problema está cuando el usuario introduce una edad negativa.

106
Como programador puedes generar errores al ejecutar un programa, para ello utilizaremos la
función raise que le podemos asignar el tipo de error y su correspondiente mensaje.

Como verás en el ejemplo en este caso ponemos una edad negativa y hemos puesto una
condición de que si la edad es menor de 0 genere el error.

Si el programa cambiamos el -15 por 15 verás el no hay error.

También podemos cambiar el tipo de error, por ejemplo ZeroDivisionError.

Si lo cambias en el código e introduces de nuevo una edad negativa, el tipo de error que
generará será de este tipo.

107
A provocar este tipo de error hace que si hubiere más líneas de programación estas no se
ejecutarían.
La fusión raise no admite nombre de error propios por ejemplo MiPropioError, ya que antes
habría que definirla.
En el siguiente proyecto vamos a calcular la raíz cuadrada de un número, pero si este número
es negativo nos tiene que dar un error.

Vamos a ejecutar el programa e introduciremos un número positivo:

El programa funciona y el flujo llega hasta el final del programa.


Ahora vamos a introducir un número negativo.

108
Ahora se genera el error que hemos definido, con el mensaje que hemos introducido y el
programa no llega al final de flujo.

La línea 10 es la que genera el error porque no se puede hacer la raíz cuadrado de un número
negativo y en la línea 5 es la que provocamos el error con un condicionante y un determinado
mensaje.

En este programa si introducimos un número positivo.

Si introducimos un número negativo.

El programa se ejecuta hasta el final.

109
110
POO I (PROGRAMACIÓN ORIENTADA A OBJETOS) (VIDEO 24)

• ¿Qué es la POO?
o Ventajas de este paradigma de la programación.

• Programación Orientada a procedimientos:


o Algunos ejemplos de lenguajes: Fortran, Cobol, Basic, etc.
• Desventajas
o Unidades de código muy grandes en aplicaciones complejas.
o En aplicaciones complejas el código resultaba difícil de descifrar.
o Poco reutilizable.
o Si existe fallo en alguna línea del código, es muy probable que el programa caiga.
o Aparición frecuente del código espagueti.
o Difícil de depurar por otros programadores en caso de necesidad o error.

111
Programación Orientada a objetos

• ¿En qué consiste?


o Trasladar la naturaleza de los objetos de la vida real al código de programación.
• ¿Cuál es la naturaleza de un objeto de la vida real?
o Los objetos tienen un estado, un comportamiento (¿Qué puede hacer?), y una
propiedades.
• Pongamos un ejemplo: El objeto coche.
o ¿Cuál es el estado de un coche? Un coche puede estar parado, circulando,
aparcado, etc.
o ¿Qué propiedades tiene un coche? Un coche tiene un color, un peso, un
tamaño, etc.
o ¿Qué comportamiento tiene un coche? Un coche puede arrancar, frenar,
acelerar, girar, etc.

Objeto ¿Qué es?

• Objeto:
o Tiene propiedades (atributos):
▪ Color
▪ Peso
▪ Alto
▪ Largo
o Tiene un comportamiento (¿Qué es capaz de hacer?
▪ Arrancar
▪ Frenar
▪ Girar
▪ Acelerar

• Programación Orientada a objetos:


o Algunos ejemplos de lenguajes, C++, Java, [Link], etc.
• Ventajas:
o Programas divididos en “trozos”, “partes”, “módulos” o “clases”. Modulación.
o Muy reutilizable. Herencia.
o Si existe fallo en alguna línea de código el programa continuará con su
funcionamiento. Tratamiento de Excepciones.
o Encapsulamiento.

112
Vocabulario de la POO

• Clase
• Objeto
• Ejemplar de clase. Instancia de clase. Ejemplarizar una clase. Instanciar una clase.
• Modularización.
• Encapsulamiento / encapsulación.
• Herencia
• Polimorfismo

113
POO II (VIDEO 25)

• Conceptos y términos de la POO

Vocabulario de la POO

• Clase
• Objeto
• Ejemplar de clase. Instancia de clase. Ejemplarizar una clase. Instanciar una clase.
• Modularización.
• Encapsulamiento / encapsulalción.
• Herencia
• Polimorfismo

Clase: Modelo donde se redactan las características comunes de un grupo de objetos.

En este caso pueden ser el chasis y las ruedas, es frecuente que varios fabricantes utilicen el
mismo chasis y las mismas ruedas.

La clase podría ser el chasis y las ruedas.

Algo común de los coches es que tienen 4 ruedas.

INSTANCIA

• Ejemplar perteneciente a una clase.

114
Estos coches al ser de dos fabricantes distintos comparten el chasis y las ruedas.

Objeto es sinónimo de instancia y de ejemplar.

MODULARIZACIÓN

115
En un equipo de música tenemos los módulos, que por sí solos funcionan.

Tu podrías llevarte un módulo del equipo de música y conectarlo con otro equipo de música que
le faltara este módulo.

Encapsulación: la Clase 1 no sabe nada del funcionamiento de la Clase 2, de este modo no es


accesible de una clase a otra.

Métodos de acceso: consigues conectar unas clases a otras para que funcionen como una unidad
o equipo.

• Objeto:
o Accediendo a propiedades de objeto desde código (pseudocódigo):
▪ [Link]=”rojo”
▪ [Link]=1500
▪ [Link]=2000
▪ [Link]=900
o Accediendo a comportamiento de objeto desde código (pseudocódigo):
▪ [Link]()
▪ [Link]()
▪ [Link]()
▪ [Link]()

nomenclatura del punto: [Link]=”rojo”

116
117
POO III (VIDEO 26)

• Traslado a código los conceptos de la POO vistos anteriormente.

Vamos a construir en código lo que será una clase.

Este será el resultado:

Nuestra clase Coche() tiene 4 propiedades y dos comportamientos, arranca y estado.

118
119
POO IV (VIDEO 27)
• Traslado a código los conceptos de la POO vistos anteriormente.

Este será el resultado:

120
Eliminamos las líneas que nos sobran, este será el resultado:

Constructor: es un método que le da el estado inicial a los objetos.

121
El resultado no cambia.

Ahora queremos cambiar el numero de ruedas de miCoche2

Si imprimimos el segundo coche nos dirá que tiene 5 ruedas, para impedir que se puedan realizar
estos tipos de cambios vamos a ver encapsulación para proteger este valor y no se pueda
modificar desde fuera de la clase.

122
Una vez encapsulado __ruedas si intentamos cambiar el valor, este no cambiará, en la línea 38
le decimos que miCoche2 tiene 5 ruedas, pero cuando consultamos el estado de miCoche2 este
será el resultado:

123
Ponemos dos guiones bajos en cada una de las variables de la clase y si queremos modificar la
propiedad __enmarcha lo haremos dentro de la clase y desde fuera no se podrá modificar.

124
125
POO V (VIDEO 28)

• Encapsulación de método
o ¿Qué es?
o ¿Por qué utilizar la encapsulación?

class Coche():
def __init__(self):

self.__largoChasis=250
self.__anchoChasis=120
self.__ruedas=4
self.__enmarcha=False

def arrancar(self,arrancamos):
self.__enmarcha=arrancamos
if(self.__enmarcha):
chequeo=self.__chequeo_interno()
if(self.__enmarcha and chequeo ):
return "El coche está en marcha"
elif(self.__enmarcha and chequeo==False):
return("Algo ha ido mal en el chequeo. No podemos arrancar.")
else:
return "El coche está parado"

def estado(self):
print("El coche tiene ", self.__ruedas, " ruedas, un ancho de ",
self.__anchoChasis, " y un largo de ", self.__largoChasis)

def __chequeo_interno(self):
print("Realizando chequeo interno.")
[Link]="ok"
[Link]="ok"
[Link]="cerradas"
if([Link]=="ok" and [Link]=="ok" and [Link]=="cerradas"):
return True
else:
return False

miCoche=Coche()
print([Link](True))
[Link]()
print("----------A continuación creamos el segundo obeto----------")
miCoche2=Coche()
print([Link](False))
[Link]()

126
Este será el resultado:

En este ejemplo el coche antes de ponerlo en marcha hace un chequeo interno.

127
POO VI. HERENCIA (VIDEO 29)

• La herencia
o ¿Qué es?
o ¿Para qué sirve?
o ¿Cómo hacer que las clases hereden?

128
La clase1 clase padre es superclase. La clase 2 es clase subclase y a su vez es superclase de la
clase 3, clase 4 y clase 5.

¿Para qué sirve la herencia?

• Para reutilizar código en caso de crear objetos similares.

129
Vamos a crear una clase principal que heredarán otras clases.

La clase Moto() hereda las clases y métodos de la clase Vehiculos().

130
131
POO VII HERENCIA II (VIDEO 30)

• Herencia:
o Sobre escritura de métodos
o Herencia simple y múltiple

Este será el resultado:

Ahora la clase Moto tiene todas las propiedades y métodos de Vehiculo() además de sus
propias propiedades y métodos.

132
Si no llamamos al método caballito al ejecutar observaremos que dicho método no se
imprime.

Esto es lo que se conoce como sobreescritura de métodos.

133
Este será el resultado:

Aquí tenemos los parámetros y el estado de la furgoneta.

134
Herencias múltiples:

Hemos creado una nueva clase llamada VElectricos().

Pones pass porque está vacía pero le asignamos dos clases, a esto le llamamos herencia múltiple.

Para que funcione correctamente le hemos de poner los parámetros en orden de cuando
definimos la clase, primero los parámetros de Vehiculo y luego los de VElectricos, este último
está vacío.

135
POO VIII. HERENCIAS III (VIDEO 31)

• Herencia:
o Super()
o Isinstance()

La función super() va a llamar al método de la clase padre.

Este será el resultado:

Principio de sustitución: “es siempre un/a” en nuestro ejemplo un empleado es siempre una
persona.

isinstance(): nos va a decir si un objeto es una instancia de una clase determinada.

136
Este será el resultado:

No está diciendo que Manuel pertenece a la clase Empleado.

Si queremos saber si Manuel también pertenece a la clase Persona.

Este será el resultado:

137
También pertenece a la clase Persona.

Con referencia al ejemplo anterior vamos a aplicarlo lo que hemos comentado.

138
Hemos realizado los cambios el ejemplo anterior.

139
POO IX. POLIMORFISMO (VIDEO 32)

Un objeto puede cambiar de forma dependiendo del contexto que se utiliza, al cambiar de forma
también cambia de comportamiento.

Hemos creado tres clase, en cada una de ellas un método con el mismo nombre.

Si definimos un primer objeto con la clase Moto() y un segundo objeto con la clase Coche(), al
ejecutar el método cada objeto ejecutará el método a la clase que pertenece.

140
Hemos creado tres tipos de clases en cada una hay un método con el mismo nombre.

Para hacer que el método desplazamientoVehiculo elija el método de la clase que deseemos
esta se la pasaremos con parámetros.

En este ejemplo creamos un objeto miVehiculo de tipo Camion, cuando llamemos al método
desplazamientoVehiculo con el parámetro miVehiculo que a su vez es de tipo camión ejecutará
el método que hay en dicha clase.

Si cambiamos miVehiculo=Moto()

141
Este será el resultado:

142
Para hacer un repaso de todo lo aprendido hasta ahora te propongo que copies el siguiente
proyecto:

class Persona:
def __init__(self, nombre,apellidos,edad):
[Link]=nombre
[Link]=apellidos
[Link]=edad
def MostarPersona(self):
print("Nmbre: ",[Link])
print("Apellidos: ",[Link])
print("Edad: ",[Link])

class Empleado:
def __init__(self, numero, sueldo, departamento, categoria):
[Link]=numero
[Link]=sueldo
[Link]=departamento
[Link]=categoria

def AñadirPersona(self,persona):
[Link]=persona

def MostrarEmpleado(self):
print("--------------------Empleado--------------------")

143
print("Numero de empleado: ", str([Link]))
[Link]()
print("--------------------Empleado--------------------")

def obtenerNumero(self):
return [Link]

class Empresa:
def __init__(self):
[Link]=[]

def NumeroEmpleados(self):
return len([Link])

def AñadirEmpleado(self,empleado):
[Link]=[Link]+[empleado]

def MostrarEmpresa(self):
print("##################################")
for item in [Link]:
[Link]()
print("##################################")

def BorrarEmpleado(self,numero):
encontrado=False
posicionaBorrar=-1
for item in [Link]:
posicionaBorrar +=1
if [Link]()==numero:
encontrado=True
break
if encontrado:
del [Link][posicionaBorrar]
print("Empleado borrado correctamente.")
else:
print("¡Empleado no encontrado!")

def MostrarMenu():
print(""" Menú
1) Añadir empleado a empresa
2) Mostrar empleados de empresa
3) Borrar empleado
4) ¿Número de empleados?
5) Salir""")

def AñadirEmpleadoEmpresa(empresa):
numero=input("Introuzca el número de empleado:")
personanombre=input("Introduzca el nombre del empleado: ")

144
personaapellidos=input("Introduzca los apellidos del empleado: ")
personaedad=input("Introduzca la edad del empleado: ")
sueldo=input("Introduzca el sueldo del empleado: ")
departamento=input("A que departameto está asignado el empleado: ")
categoria=input("Que categoría profesional tiene el empleado: ")

persona=Persona(personanombre,personaapellidos,personaedad)
empleado=Empleado(numero, sueldo, departamento, categoria)
empresa.AñadirEmpleado(empleado)
empleado.AñadirPersona(persona)
return empresa

def MostrarEmpresa(empresa):
[Link]()

def BorrarEmpleado(Empresa):
numero=input("Introduce el número de trabajador a borrar: ")
[Link](numero)

def NumeroEmpleados(empresa):
print("El número de empleados en la empresa es: ",[Link]())

fin=False
empresa=Empresa()

while not fin:


MostrarMenu()
opcion=int(input("Seleccione una opcion: "))
if(opcion==1):
empresa=AñadirEmpleadoEmpresa(empresa)
elif(opcion==2):
MostrarEmpresa(empresa)
elif(opcion==3):
BorrarEmpleado(empresa)
elif(opcion==4):
NumeroEmpleados(empresa)
elif(opcion==5):
fin=True

print("¡Fin del proyecto!")

Después comprueba el resultado.

145
MÉTODOS DE CADENA (VIDEO 33)
• Uso de métodos de cadenas.
• Objetos String

upper(): Convierte en mayúsculas las letras de un string.

lower(): Convierte en minúsculas las letras de un string.

capitalize(): En un string poner la primera letra en mayúsculas.

count(): Cuenta cuantas veces aparece una letra o una cadena en un texto.

find(): Representa la posición donde aparece un carácter o un grupo de caracteres.

isdigit(): devuelve un voleano, True o False dice si el valor introducido es un dígito un valor
numérico o no.

isalum(): Comprobar si son alfanuméricos.

isalpha(): Comprobar si solo hay letras, los espacios no cuentan.

split(): Separa palabras por palabra utilizando espacio.

strip(): Borras espacios sobrante al principio y al final.

replace(): Cambia una letra o palabra por otra.

rfind(): Representa la posición donde aparece el carácter o un grupo de caracteres desde atrás.

Mas información en la siguiente url: [Link]

146
Vamos a ver unos ejemplos:

Este será el resultado:

Para comprobar si el valor introducido en un digito o es un texto:

147
Vamos a ejecutar introduciendo un texto.

Ahora vamos a introducir un número.

En el siguiente ejemplo vamos a comprobar si introducimos un valor numérico, sino es así irá
preguntando hasta que introduzcas un valor numérico.

Si ejecutamos este será el resultado:

148
Ahora vamos a realizar la siguiente práctica.

149
150
151
MÓDULOS (VIDEO 34)

• Qué son los módulos, utilidad y cración.


• ¿Qué son?
o Un archivo con extensión .py .pyc (Python compilado) o archivo escrito en C
para CPython, que posee su propio espacio de nombre y que puede contener
variables, funciones, clases e incluso otros módulos.
• ¿Para qué sirven?
o Para organizar y reutilizar el código (modularización y reutilización)

Modularización: En lugar de hacer un proyecto con un código de muchas líneas, hacer


pequeños códigos que luego unificaremos en el programa.

• ¿Cómo se crear un módulo?


o Tan sencillo como crear un archivo con extensión .py (o pyc o archivo C) y
guardarlo donde nos interese.

Para ver con más claridad vamos a crear una carpeta llamada “modulos” donde guardo los
proyectos de Python.

Vamos a crear un nuevo proyecto que guardaremos en la carpeta modulos con el nombre de
funciones_matematicas.py con el siguiente código:

152
Ahora en la misma carpeta vamos a crear un nuevo proyecto llamado uso_funciones.py.

Al ejecutar este proyecto obtendremos el siguiente resultado:

¿Cómo podemos evitar de tener que escribir el módulo?

Este será el resultado:

153
Pero para que puedan funcionar el resto de funciones vamos a realizar lo siguiente:

Este será el resultado:

La diferencia de hacerlo de una forma u otra en la optimización de espacio en memoria, si vas a


utilizar pocos recursos lo correcto es usar el primer ejemplo, pero si vas a utilizar gran parte de
ello el segundo ejemplo es mejor.

Ahora vamos a realizar un ejemplo con clases y herencias.

Creamos un nuevo proyecto llamado modulo_vehiculos.py que agregaremos el siguiente


código:

154
Recuerda de guardarlo en la carpeta de “modulos” que hicimos para este capítulo.
Ahora realizamos un proyecto nuevo llamado “uso_vehiculos.py”

Ejecutaremos para ver el resultado:

155
Si cambiamos la ubicación del modulo cuando ejecutemos de nuevo el interprete de Python no
encuentra el archivo.
Python por defecto va a buscar el módulo en la misma carpeta donde se encuentra el proyecto
que lo llama.

156
PAQUETES (VIDEO 35)

• Que son los paquetes, utilidad y creación


• ¿Qué son?
o Directorios donde se almacenarán módulos relacionados entre sí
• ¿Para qué sirven?
o Para organizar y reutilizar los módulos
• ¿Cómo se crea un paquete?
o Tan sencillo como crear una carpeta con un archivo __init__.py

Lo primero que vamos a realizar es crear una carpeta donde guardamos nuestros proyectos de
Python llamada cálculos.

En ella hemos de guardar un archivo vacío con el nombre de __init__.py

157
Si miramos el contenido de la carpeta:

Vamos a crear un nuevo proyecto llamado cálculos_generales.py

Esto es lo que hay en la carpeta “calculos”.

Ahora vamos a crear un nuevo proyecto que irá a donde guardamos los proyectos, es decir
fuera de la carpeta calculos con el nombre “Uso_modulos.py”.

158
Vamos a escribir los siguiente:

Este será el resultado:

Ahora vamos a importar todos los módulos:

Este será el resultado:

159
La carpeta _pycache__ se genera automáticamente, en ella podremos observar:

Para que la pueda interpretar como un paquete de Python.

Ahora dentro de la carpeta cálculos vamos a crear una nueva carpeta llamada basicos

160
Para que este funcione habrá que copiar en ella el archivo __init__.py

Crearemos una carpeta redondeo_potencia y también le copiaremos el archivo.

Vamos a crear un módulo en básicos llamado operaciones_basicas.py

Este será el texto que irá:

161
Vamos a crear un nuevo proyecto en la carpeta redondeo_potencia con el nombre
[Link]

Este será el código:

Esta es la estructura que tenemos:

Dentro de básicos hay:

Y dentro de redondeo_potencia hay:

Ahora vamos a modificar un proyecto llamado Uso_modulos.py que se encuentre en la carpeta


Python, es decir fuera de la carpeta cálculos.

Este será el resutado:

162
163
PAQUETES DISTRIBUIBLES (VIDEO 36)
• ¿Cómo crear paquetes distribuibles y reutilizables

• 1.- Crear paquete


• 2.-. Instalar paquete

164
Vamos a ejecutar Sublime Text del menú View seleccionaremos Side Bar y de este Show Open
Files.

Hemos activado a la izquierda como un navegador de archivos.

Vamos a arrastrar la carpeta del curso en el apartado OPEN FILES.

Vamos a crear un archivo [Link] en la carpeta Curso Python.

165
Botón derecho del ratón sobre la carpeta Curso Python y de este New File.

Ahora Ctrol + s para grabar.

Daremos como nombre [Link] seguido del botón Guardar.

166
Ctrol + s para guardar.

Desde CMD accederemos a la carpeta de Curso Python

Vamos a escribir lo siguiente:

Pulsamos enter.

Si vamos al explorador entramos en la carpeta Curso Python y nos ha creado dos carpetas, una
lamada [Link]-info y otra llamada dist.

167
Si abrimos la carpeta dist

Observaremos un archivo comprimido, este es el que deberíamos de suministrar a las


personas interesadas.

Si lo descomprimimos:

Si abrimos la carpeta paquetecalculos-0.0.0

168
Ahora para instalarlo desde CMD.

Pulsamos enter y empieza la instalación.

cd dist → para acceder a la carpeta dist

pip3 install paquetecaldulos-0.0.0 → hacemos enter.

Ya empieza la instalación.

Ahora abrimos el archivo Uso_modulos.py que estaba en la carpeta modulos, esta como la
movimos de su anterior ubicación al ejecutar daba error.

169
Este será el resultado:

Como podrás observar ahora sí que funciona.

Cerramos todos y ahora vamos a copiar este archivo en descargas y de esta nueva ubicación lo
vamos a abrir.

Lo vamos a ejecutar.

Y también funciona.

Funciona desde cualquier lugar, este paquete es capar de leerlo desde donde estés.

Forma parte del Python de nuestro sistema operativo.

170
Si queremos desinstalar el paquete abrimos de nuevo CMD.

No hace falta ir a ningún directorio en concreto.

Pulsamos enter.

Contestamos con una y de yes.

Nos informa que el paquete ya se ha desinstalado.

Si ahora ejecutamos el proyecto anterior que funcionaba correctamente, ahora nos dará un
mensaje de error.

171
172
ARCHIVOS EXTERNOS I (VIDEO 37)
• Cómo trabajar con ficheros externos de texto con el módulo io
• Objetivo: persistencia de datos
• Dos alternativas
o Manejo de archivos externos.
o Trabajo con BBDD

• Fases necesarias para guardar información en archivos externos:

Para ello tendremos que trabajar con el módulo estándar io.

Vamos a crear un nuevo proyecto llamado Manejo_archivos.py que guardaremos en nuestra


carpeta de trabajo.

173
Lo ejecutamos.

Vemos que no ha realizado nada, pero si nos vamos a nuestra carpeta de trabajo:

Ha creado el archivo, si lo abrimos observaremos que está vacío.

174
Con el método write escribimos la frase y con el método close cerramos el archivo.

Ejecutamos:

Vemos que no ha hecho nada, pero si miramos el contenido del archivo [Link] veremos que
tiene una frase.

Abrimos el texto en modo lectura, leemos el contenido del archivo, cerramos el archivo y por
último imprimimos su contenido.

175
El método readlines() lee la información línea a línea y lo almacena en una lista.

Si lo ejecutamos

Vemos como lo trata de una lista.

¿Cómo acceder a la primera línea:

Si ejecutamos:

176
Abrir archivo para agregar información.

Ejecutamos:

No vemos nada, pero si abrimos el archivo [Link]

Veras como le hemos agregado el contenido.

177
178
ARCHIVOS EXTERNOS II (VIDEO 38)
• ¿Cómo trabajar con ficheros externos de texto con el módulo io
o Punteros de texto

Recordando el capitulo anterior vamos a leer con contenido de un archivo de texto.

Este será el resultado:

Si abrimos el archivo de texto verás que el contenido es el mismo.

Si no le decimos nada el puntero se posición al principio del texto.

Cuando leemos el fichero el cursor se pone al final del texto, si queremos leer de nuevo el texto
como el cursor está al final este no muestra nada.

179
¿Cómo podemos modificar la posición de un puntero? Con el método seek()

Antes de imprimir por segunda vez nos iremos de nuevo al principio del texto seek(0)

Este será el resultado:

Vamos a imprimir desde la posición 11

Este será el resultado:

180
Con la función read() podemos poner un valor e imprimirá hasta el valor que le asignemos.

Este será el resultado:

Ahora como la posición de puntero está en el 11 si realizamos un segundo print este imprimirá
desde la posición 11 hasta el final.

181
Primer read y segundo read.

Ahora queremos imprimir desde la mitad del texto hasta el final.

Len(archivo_texto.read())/2 → nos retorna el valor que será la posición intermedia del texto, el
puntero se posicionar justo a la mitad del texto.

Cuando ejecutemos este será el resultado:

También nos podemos posicionar en líneas.

El cursor se sitúa al final de la primera línea y luego imprime el resto.

182
Si queremos abrir un archivo de escritura y lectura le agregaremos los parámetros “r+”

Como por defecto cuando abrimos un archivo, el puntero se encuentra al principio del texto y
le damos una instrucción write este texto sustituirá al texto que había.

Si imprimimos utilizando la función readlines(), nos devuelve una lista con sus respectivos saltos
de línea representados con la \n.

183
En este ejemplo vamos a modificar la segunda línea del archivo de texto desde el exterior.

Si ejecutamos veremos los cambios del archivo de texto.

184
185
SERIALIZACIÓN I (VIDEO 39)

• Serialización de colecciones, objetos.

• Pickle
o Método dump(): volcado de datos al fichero binario externo.
o Método load(): carga de los datos del fichero binario externo.

Vamos a crear un proyecto nuevo llamado trabajo_serializacion.py.

Lo ejecutamos:

186
Ahora veremos en nuestra carpeta de trabajo el archivo “lista_nombres”.

Este no lo podremos abrir.

Ahora lo queremos rescatar y leer la información.

Ejecutamos:

187
188
SERIALIZACION II (VIDEO 40)
• Serialización de objetos
Vamos a crear un nuevo proyecto llamado “Serializar [Link]”.
Aprovecharemos parte del código “módulo vehí[Link]” que copiaremos al nuevo proyecto.

Vamos a realizar las correspondientes modificaciones:

Ejecutamos.

189
Ahora vamos a buscar el fichero “losCoches”.

Ahora vamos a rescatar la información que hay en este fichero:

Al final de este proyecto agregamos el siguiente código.

Lo ejecutamos:

La información tiene mucho que desear.

190
La línea print(c) la cambiaremos por print ([Link]) ya que aprovecharemos este método.

Ejecutamos, este será el resultado:

191
En este proyecto hemos hecho la escritura y la lectura en el mismo, pero podríamos haber
realizado uno para escribir y otro para leer.

Para que este funcione hemos de agregar la clase, ya que la variable c que es de este tipo no lo
reconocería, abrimos el fichero en lectura binario y así podremos leer la información.

192
193
GUARDADO PERMANENTE (VIDEO 41)

• Guardar datos de forma permanente en ficheros

Vamos a crear un nuevo proyecto llamado [Link]

Si lo ejecutamos observaremos el siguiente mensaje:

Vamos a agregar más código:

194
Este será el resultado:

Ahora el siguiente objetico es que esta información se grabara en un fichero externo.

import pickle

class Persona:
def __init__(self, nombre, genero, edad):
[Link]=nombre
[Link]=genero
[Link]=edad
print("Se ha creado una persona nueva con el nombre de ", [Link])

def __str__(self):
return "{} {} {}".format([Link], [Link], [Link])

class listaPersonas:
personas=[]

def __init__(self):
listaDePersonas=open("ficheroExterno", "ab+") #Agregar información binaria
[Link](0)

try:
[Link]=[Link](listaDePersonas)
print("Se cargaron {} personas del fichero
externo".format(len([Link])))
except:
print("El fichero está vacío")
finally:
[Link]()
del(listaDePersonas)

def agregarPersonas(self,p):
[Link](p)
[Link]()

195
def mostrarPersonas(self):
for p in [Link]:
print(p)

def guardarPersonasEnFicheroExterno(self):
listaDePersonas=open("ficheroExterno", "wb")
[Link]([Link], listaDePersonas)
[Link]()
del(listaDePersonas)

miLista=listaPersonas()

persona=Persona("Sandra","Femenino",29)

[Link](persona)

Este será el resultado:

Agregamos

196
Este será el resultado:

Muestra 4 porque se ha ejecutado 4 veces.

Vamos a comprobar el fichero externo.

Este fichero ya contiene información.


Lo vamos a borrar.
Ejecutamos de nuevo.

Ahora ejecutaremos nuestro programa cambiando los datos de la persona.

197
Si lo ejecutamos de nuevo.

Vamos a agregar una tercera.

Ejecutamos

198
199
INTERFACES GRÁFICAS (VIDEO 42)

• Creación de interfaces gráficas


o Librería Tkinter

¿Qué son las interfaces gráficas?

Son ventanas en las que los usuarios pueden interactuar con ellas.

• También denominadas GUI, son intermediarios entre el programa y el usuario.


Formadas por un conjunto de gráficos como ventanas, botones, menús, casilla de
verificación, etc.
• Librerías con las que trabajar cara crear GUI:
o Tkinter
o WxPython
o PyQT
o PyGTK
• Tkinter es un “puente” entre Python y la librería TCL/TK
• Si trabajas en Linux la podrás instalar con la siguiente instrucción

$ sudo apt-get install python3-tk, lo realizaremos desde la consola.

Estructura de ventana con Tkinter.

200
En este capitulo vamos a ver como se construye la ventana, lo que es la raíz.

Dentro de nuestra carpeta de trabajo hemos creado una nueva carpeta llamada gráfico, para
guardar los proyectos de interfaces gráficas.

Nuestro primer proyecto se llamará “primera_interface.py”.

Guardamos y ejecutamos

201
mainloop() : es un bucle infinito, este tiene que esta siempre al final.

Ahora vamos agregar un título a la ventana:

Este será el resultado:

Vamos a evitar que el usuario pueda redimensionar una ventana.

202
Ejecutamos

No nos deja modificar el ancho ni el alto, además el botón de maximizar y restaurar están
deshabilitados.
Si lo cambiamos por raí[Link](1,0), podremos modificar a lo ancho pero no a lo alto.
También es correcto raí[Link](True,False).
Vamos a cambiar el icono que aparece por defecto que es una pluma.
Tenemos que tener un nuestro directorio de trabajo un archivo de tipo .ico
También podemos preguntar a Google por conversores .ico

203
Este será el resultado:

Para modificar el tamaño de la ventana:

Este será el resultado:

204
Cambiar el color de fondo.

Este será el resultado:

Si nos vamos a la carpeta donde tenemos el proyecto.

205
Y hacemos doble clic en dicho proyecto.

Se nos abre la ventana pero con la consola detrás.

Para que la consola no se abra vamos a cambiar la extensión py por pyw, la w viene de Window.

206
Hacemos doble clic en él.

Ya se abre sin la consola.

207
208
INTERFACE GRÁFICAS II (VIDEO 43)

• Creación de interfaces gráficos


o Librería Tkinter. Manejo de Frames

En este capítulo vamos a ver cómo crear Frames.

209
Este será el resultado cuando lo ejecutemos:

La raíz se adapta al tamaño del Frame.

Si redimensionamos la raíz veremos la diferencia.

210
El parámetro side puede ser igual a left, right, top y bottom.

En el ejemplo anterior este será el resultado:

El parámetro anchor maneja los puntos cardinales: n ,ne, e, se, s, sw, w, nw, o center.

211
Este será el resultado:

Para hacer el rellanado utilizaremos el parámetro fill, que puede tener los siguiente parámetros:
x, y, both y none.

212
Este será el resultado:

213
Para poder redimensionar hacia abajo.

Si queremos que se expanda en las dos direcciones utilizaremos both.

214
Este será el resultado:

También podemos definir bordes.

215
Este será el resultado:

También hay un tipo de borde llamado sunken.

216
Podemos cambiar el icono del cursor.

Cuando lo ejecutemos y nuestro cursos pase por encima del Frame, este cambiará.

Otro tipo de cursor, pirate.

Tolo lo que hemos aplicado al Frame con el método config se lo podemos aplicar a la raíz.

217
Ejemplos:

[Link](bg=”blue”)

[Link](bd=45)

[Link](cursor=”hand2)

218
INTERFACES GRÁFICAS III (VIDEO 44)
• Creación de interfaces gráficas
o Liberia Tkinter. Widget Label

¿Qué son los Label?

• Wigets utilizados para mostrar texto o imágen.


• Tiene como única finalidad mostrar texto, no se puede interactuar con él
(borrar, arrastrar, etc)

Sintaxis

• variableLabel=Label(contenedor, opciones)

Vamos a realizar un nuevo proyecto llamado [Link]

Este será el resultado:

Hemos dado dimensiones en miFrame pero al empaquetar miLabel este se ajusta al texto, para
que esto no suceda realizaremos lo siguiente:

219
Este será el resultado:

Esta dos líneas las podremos simplificar:

miLabel=Label(miFrame, text="Hola alumnos de Python" )

[Link](x=100, y=200)

En una sola línea.

Label(miFrame, text=”Hola alumnos de Python).place(x=100,y=200)

220
Este será el resultado:

221
Este será el resultado:

Si en lugar de utilizar texto queremos utilizar una imagen para ello trabajaremos con imágenes
png y gif que son las que admite Python.

222
Este será el resultado:

223
224
INTERFACES GRÁFICAS IV (VIDEO 45)
• Creación de interfaces gráficas
o Liberia Tkinter. Widget Entry

Partimos de un nuevo proyecto llamado [Link]

Hemos creado nuestro primer cuadro de texto, este será el resultado:

Ahora vamos a modificar el tamaño de la ventana, crearemos un Frame llamado miFrame le


diremos que el CuadroTexto de tipo Entry pertenece a miFrame y por último con la función place
le ubicaremos una posición.

225
Este será el resultado:

Coordenadas del place

El siguiente paso será crear una etiqueta al lado del cuadro de texto:

Este será el resultado:

226
El método grid(), crea como una tabla donde podremos colocar nuestros objetos con mayor
facilidad.

Los parámetros son row que hace referencia a la fila y columna que hace referencia a la columna.

0,0

1,1

Este será el resultado:

Si modificamos el tamaño de la ventana, este será el resultado:

Intenta agregar una etiqueta y cuadro de texto para los apellidos, en la siguiente página
encontrarás el resultado:

227
Este será el resultado.

Ahora vamos a crear otro cuadro de texto y etiqueta para dirección.

Este será el resultado:

228
Ahora vamos a modificar el texto Dirección por dirección de casa:

Este será el resultado:

Para poder alinear los objetos utilizaremos la propiedad sticky, y los valores que admite son los
puntos cardinales.

nw n ne
w e
sw s se

Este sería el resultado:

229
pady(vertical), padx(horizontal): nos ayudará a separar elementos uno verticalmente y el otro
horizontalmente.

Este será el resultado:

Ahora también se lo ponemos a los cuadros de texto:

230
Este será el resultado:

Con el método config podemos cambiar el color de los textos de las cajas de texto.

Este será el resultado:

231
Para modificar la alineación del texto utilizaremos el método justify.

Este será el resultado:

También admite right.

Como utilizar un campo Password.

Vamos agregar debajo del nombre un campo password.

232
Este será el resultado:

233
234
INTERFACES GRÁFICAS V (VIDEO 46)
• Creación de interfaces gráficas
o Librería Tkinter. Widgets text y Button

Text: Wigets utilizados para introducir texto largo.

Button: Botones para interactuar con la interfaz

Partiendo del proyecto anterior vamos a agregar el siguiente código:

Este será el resultado:

235
Vamos a darle una dimensiones más razonables.

Este será el resultado:

Vamos a crear una barra de desplazamiento vertical, para ello construiremos un objeto scrollbar
y decirlo que pertenece al texto que nosotros le especifiquemos.

Agregamos el correspondiente código:

236
Este será el resultado:

Vamos a mejorar el scrollbar.

Este será el resultado:

237
Para que el posicionar funcione correctamente vamos a realizar lo siguiente:

Este será el resultado:

238
Ahora vamos a agregar un botón con el método Button.

Este será el resultado:

Vamos a agregar instrucciones en el botón.

239
Agrega las siguientes modificaciones:

Este será el resultado cuando presionemos el botón:

240
Para obtener información de un cuadro de texto utilizaremos la función get.

241
INTERFACES GRÁFICAS VI (VIDEO 47)
• Creación de interfaces gráficas
o Interfaz gráfica calculadora

Vamos a realizar un nuevo proyecto llamado [Link]

Este será el resultado:

Vamos a diseñar la pantalla.

242
Este será el resultado:

Vamos a realizar la primera fila de botones:

Este será el resultado:

Como podrás observar la pantalla no está centrada.

243
Este será el resultado:

Ahora vamos a realizar la fila 2 de botones

Este será el resultado:

Vamos a realizar la tercera fila

Este será el resultado:

244
Ahora vamos a realizar la fila 4

Este será el resultado:

Vamos a modificar la imagen que se encuentra en la parte superior izquierda que es una pluma
por otra imagen.

Este será el resultado:

245
El siguiente paso será que al pulsar un botón la información aparezca en pantalla.

246
INTERFACES GRÁFICAS VII (VIDEO 48)
• Creación de interface gráficas
o Funcionalidad calculadora

Ahora lo primero que vamos a realizar es que al pulsar el botón 4 aparezca en pantalla el
número 4.

En el apartado de pantalla definimos la variable numeroPantalla de tipo StringVar().

El siguiente paso es asociar pantalla con la variable numeroPantalla.

Definimos una función llamada numeroPulsado() para asignar a la variable que tenemos
asignada a la pantalla el valor “4”

247
Desde el boton4 llamamos a la función numeroPulsado.

Si ejecutamos el proyecto y pulsamos al número 4 este será el resultado:

Si pulsamos varias veces al número cuatro, solo muestra 1 como lo vamos a solucionar.

El método get() lo que hace es recoger la información que hay en pantalla.

Si ejecutamos el proyecto y pulsamos varias veces al botón 4 este será el resultado:

Ahora que tenemos que hacer para que esto funcione con el resto de números.

248
La función númeroPulsado(num): le tendremos que pasar un parámetro.

Desde el boton4 llamaremos a la función pero pasándole el parámetro 4.

El problema que nos vamos a encontrar ahora es que al ejecutar el programa sin haber pulsado
el número 4 este ya aparece en pantalla.

Si pulsamos el botón4 este no hace absolutamente nada.

En el momento a una función le agregamos un parámetro este la ejecuta automáticamente sin


que nosotros la hubieras llamado.

Para eso tenemos que usar las funciones lambda.

Ahora si ejecutamos el proyecto en pantalla no saldrá ningún número y cuando pulsemos el


botón 4 este ya aparecerá las veces que pulsemos el botón.

249
Ahora esta instrucción la copiaremos en todos los botones cambiando a su número.

Una vez agregado el código vamos a ejecutar el proyecto:

250
Verás que le 0 no puede aparecer al principio, esto lo controlaremos en el siguiente capítulo:

Otra opción es que cuando se ejecute la calculadora que muestre el número 0 por defecto.

Cuando le demos a un operador de división, multiplicación , resta o suma que la pantalla se


borre para admitir el siguiente conjunto de números.

251
INTERFACES GRÁFICAS VIII (VIDEO 49)
• Creación de interfaces gráficas
o Funcionalidad calculadora

Cuando introducimos un valor a la calculadora y le damos al + e introducimos otro valor se


borra el valor inicial para introducir el segundo.

Vamos a crear una variable global que pueda ser accesible desde todas las partes del programa
y la vamos a llamar operación.

Esta variable global almacenará la operación que queremos realizar, suma, resta, multiplicación
o división.

Ahora vamos a crear la función operación.

Desde el botón suma llamaremos a la función:

252
En la función suma() definimos la variable global operación:

Ahora queremos que sume para ello vamos a crear una variable llamada resultado y de tipo
global.

253
La llamada de suma hay que pasarle parámetros.

Ahora vamos a comprobar si podemos sumar con la calculadora.

Ahora al pulsar en el botón igual aparezca en pantalla la suma de lo que llevo en este momento.

Ahora vamos a probar la calculadora:

254
La calculadora suma bien con el igual pero se le damos de nuevo al signo igual este nos vuelve a
sumar.

Así al pulsar dos veces al botón igual, en la segunda vez este no sumara.

Prueba la calculadora realizando sumas y comprobando el igual.

255
INTERFACES GRÁFICAS IX (VIDEO 50)
A continuación el código completo que a aportado el profe:

from tkinter import *


raiz=Tk()
miFrame=Frame(raiz)
[Link]()
operacion=""
reset_pantalla=False
resultado=0

#-------------pantalla---------------------------------------
numeroPantalla=StringVar()
pantalla=Entry(miFrame, textvariable=numeroPantalla)
[Link](row=1, column=1, padx=10, pady=10, columnspan=4)
[Link](background="black", fg="#03f943", justify="right")

#-------------------pulsaciones teclado--------------------------
def numeroPulsado(num):
global operacion
global reset_pantalla
if reset_pantalla!=False:
[Link](num)
reset_pantalla=False
else:
[Link]([Link]() + num)

#----------------funcion suma----------------------------------
def suma(num):
global operacion
global resultado
global reset_pantalla
resultado+=int(num) #resultado=resultado+int(num)
operacion="suma"
reset_pantalla=True
[Link](resultado)

#---------------funcion resta------------------------------
num1=0
contador_resta=0
def resta(num):
global operacion
global resultado
global num1
global contador_resta

256
global reset_pantalla
if contador_resta==0:
num1=int(num)
resultado=num1
else:
if contador_resta==1:
resultado=num1-int(num)
else:
resultado=int(resultado)-int(num)
[Link](resultado)
resultado=[Link]()
contador_resta=contador_resta+1
operacion="resta"
reset_pantalla=True

#-------------funcion multiplicacion---------------------
contador_multi=0
def multiplica(num):
global operacion
global resultado
global num1
global contador_multi
global reset_pantalla
if contador_multi==0:
num1=int(num)
resultado=num1
else:
if contador_multi==1:
resultado=num1*int(num)
else:
resultado=int(resultado)*int(num)
[Link](resultado)
resultado=[Link]()
contador_multi=contador_multi+1
operacion="multiplicacion"
reset_pantalla=True

#-----------------funcion division---------------------

contador_divi=0
def divide(num):
global operacion
global resultado
global num1
global contador_divi
global reset_pantalla
if contador_divi==0:

257
num1=float(num)
resultado=num1
else:
if contador_divi==1:
resultado=num1/float(num)
else:
resultado=float(resultado)/float(num)
[Link](resultado)
resultado=[Link]()
contador_divi=contador_divi+1
operacion="division"
reset_pantalla=True

#----------------funcion el_resultado----------------
def el_resultado():
global resultado
global operacion
global contador_resta
global contador_multi
global contador_divi

if operacion=="suma":
[Link](resultado+int([Link]()))
resultado=0
elif operacion=="resta":
[Link](int(resultado)-int([Link]()))
resultado=0
contador_resta=0
elif operacion=="multiplicacion":
[Link](int(resultado)*int([Link]()))
resultado=0
contador_multi=0
elif operacion=="division":
[Link](int(resultado)/int([Link]()))
resultado=0
contador_divi=0

#-------------fila 1---------------------------------------------

boton7=Button(miFrame, text="7", width=3, command=lambda:numeroPulsado("7"))


[Link](row=2, column=1)
boton8=Button(miFrame, text="8", width=3, command=lambda:numeroPulsado("8"))
[Link](row=2, column=2)
boton9=Button(miFrame, text="9", width=3, command=lambda:numeroPulsado("9"))
[Link](row=2, column=3)
botonDiv=Button(miFrame, text="/", width=3,
command=lambda:divide([Link]()))
[Link](row=2, column=4)

258
#-------------fila 2---------------------------------------------

boton4=Button(miFrame, text="4", width=3, command=lambda:numeroPulsado("4"))


[Link](row=3, column=1)
boton5=Button(miFrame, text="5", width=3, command=lambda:numeroPulsado("5"))
[Link](row=3, column=2)
boton6=Button(miFrame, text="6", width=3, command=lambda:numeroPulsado("6"))
[Link](row=3, column=3)
botonMult=Button(miFrame, text="x", width=3,
command=lambda:multiplica([Link]()))
[Link](row=3, column=4)

#-------------fila 3---------------------------------------------

boton1=Button(miFrame, text="1", width=3, command=lambda:numeroPulsado("1"))


[Link](row=4, column=1)
boton2=Button(miFrame, text="2", width=3, command=lambda:numeroPulsado("2"))
[Link](row=4, column=2)
boton3=Button(miFrame, text="3", width=3, command=lambda:numeroPulsado("3"))
[Link](row=4, column=3)
botonRest=Button(miFrame, text="-", width=3,
command=lambda:resta([Link]()))
[Link](row=4, column=4)

#-------------fila 4---------------------------------------------

boton0=Button(miFrame, text="0", width=3, command=lambda:numeroPulsado("0"))


[Link](row=5, column=1)
botonComa=Button(miFrame, text=",", width=3, command=lambda:numeroPulsado("."))
[Link](row=5, column=2)
botonIgual=Button(miFrame, text="=", width=3, command=lambda:el_resultado())
[Link](row=5, column=3)
botonSum=Button(miFrame, text="+", width=3,
command=lambda:suma([Link]()))
[Link](row=5, column=4)

[Link]()

259
• Creación de interfaces gráficas
o Botones de radio. Radiobuttons
• Botones de selección para preguntas de respuesta única.

Vamos a crear un nuevo proyecto llamado [Link]

Este será el resultado:

Como podréis comprobara aparecen los dos seleccionados por defecto y no me los deja
seleccionar.

260
Si comprobamos el resultado podrás observar que este funciona.

¿Cómo poder rescatar los valores?

Este será el resultado después de agregar una etiqueta:

261
Vamos a ver que cuando ejecutemos el proyecto va a imprimir en consola el valor de la opción
que activemos.

Vamos a crear una nueva etiqueta para poder ver los valores en la propia ventana.

262
Este será el resultado:

Si queremos agregar más opciones:

263
Este será el resultado y seleccionamos la tercera opción:

264
265
INTERFACES GRÁFICAS X (VIDEO 51)
• Creación de interfaces gráficas
o Botones de selección. CheckButtons

La diferencia de estos botones casillas de selección con respecto a los botones del capitulo
anterior es que puede haber más de uno seleccionado o ninguno, cosa que el anterior no lo
permitía.

Vamos a partir de un nuevo proyecto llamado [Link]

Este será el resultado:

266
Vamos a agregar una imagen para recordar capítulos anteriores.

Este será el resultado:

Antes de los botones vamos a poner una etiqueta que diga “Elige destinos:”

267
Creamos un objeto de imagen, creamos un frame que depende de root y la nueva etiqueta que
contiene la imagen la vinculamos con frame en lugar de root, así como los Checkbuttons.
Este será el resultado:

Vamos a agregar funcionalidad a los Checkbuttons.

268
Definimos tres variables.
Creamos una función llamada opcionesViaje(), que controlará las casillas que hemos activado y
según lo activado le asignaremos un valor a la variable textoFinal.
A los botones le asignamos las variables, los valores que adquieren cuando están actrivos o no
y por último llamamos a la función opcionesViaje.
Este será el resultado si activamos las tres opciones:

269
270
INTERFACES GRÁFICAS XI (VIDEO 52)

• Creación de interfaces gráficas


o Menús
• Barra en la parte superior con opciones de sub-menú.

Partiendo de un proyecto nuevo llamado [Link]

Este será el resultado:

271
Podemos modificar el ancho de la ventana colocándonos en los extremos y arrastrar o modificar
el ancho de la ventana.

Este será el resultado:

272
Ahora vamos a agregar los elementos de submenú.

Vamos a crear los submenús de Archivo.

Nos colocaremos debajo de archivoMenu y agregaremos los siguientes 5 submenus.


Este será el resultado:

273
Vamos a quitar la línea discontinua que aparece en el submenú.

Tearoff=0, cuando ejecutemos este será el resultado:

Si queremos separar grupo de opciones en el submenú se hace con una barra horizontal
continua.
Queremos separar el submenú Guardar como… con Cerrar.

274
Nos situaremos donde queremos insertar la barra separadora y agregaremos .add_separator().
Este será el resultado:

Vamos a crear los submenús de Edición y Ayuda

Este será el resultado:

275
En el próximo capítulo ya le daremos inactividad.

276
INTERFACES GRÁFICAS XII (VIDEO 53)

• Creación de interfaces gráficas


o Ventanas emergentes

Vamos a continuar con el proyecto anterior.

277
Tenemos que importar messagebox con la librería tkinder.

Creamos una función llamada infoAdicional().

Que llamaremos desde el submenú “Acerca de…” y llamamos a la función.

Este será el resultado:

Ahora vamos a cambiar el icono que aparecen en la ventana emergente, así como su sonido.

278
Ahora vamos a crear una ventana de aviso con respeto al submenú licencia.

Creamos una nueva función en este caso [Link] que es un mensaje de aviso.

Llamamos a la función, este será el resultado:

279
Con la opción del submenú Salir vamos a crear una ventana en la que el usuario podrá confirmar
con más de un botón.

Este tipo de [Link] le podemos pasar un dato en este caso a la variable valor
si seleccionamos el botón si retorna un yes y si seleccionamos el botón no retorna un no.

Por este motivo comparamos si valor es igual a “yes” si es así saldremos de la aplicación, en
cambio si seleccionamos el botón se mantendrá en ella.

280
Llamamos a la función salirAplicación desde el submenú “Salir”

Este será el resultado, primero pulsaremos el botón No y luego al botón Sí.

281
Si lo cambiamos por [Link] funciona igual lo único que retorna un valor de
True o False.

Este será el resultado:

Para el submenú “Cerrar” vamos a crear una ventana que diga Cerrar o Intentar.

Vamos a crear la función.

282
Desde el submenú correspondiente vamos a llamar a la función.

Ahora cuando ejecutemos la aplicación del submenú Cerrar.

283
Si le damos a Reintentar no saldremos de la aplicación, solo se cerrará la ventana emergente,
pero si le damos al botón Cancelar, saldremos de la aplicación.

284
INTERFACES GRÁFICAS XIII (VIDEO 54)

• Creación de interfaces gráficas


o Ventanas emergentes. Abrir archivos.

Vamos a realizar un nuevo proyecto con el nombre Prueba_File_Chooser.py

Si ejecutamos el proyecto este será el resultado:

Seleccionamos el botón Abrir fichero.

285
El print nos devuelve la ruta:

Cuando abrimos la ventana de abrir archivos, este por defecto abre la carpeta Documentos, si
queremos especificar un origen diferente:

Al ejecutar el programa y seleccionar el botón este abrirá la ruta especificada.

Podemos especificar que tipos de archivos nos tiene que mostrar esta ventana.

286
Al abrir la ventana de búsqueda de ficheros le hemos dicho que solo busque archivos de Excel.

Si abrimos el cuadro combinado podremos decirle que busque archivos de texto.

287
Ahora queremos que además busque todos los archivos.

288
289
BBDD I (VIDEO 55)
• Creación BBDD
o Conexión con BBDD
o Inserción de registros en BBDD

SGDB y Python

• SQL Server
• Oracle
• MySql
• SQLite
• PostgresSQL
• Etc.

Vamos a ver MySql y SQLite.

¿Qué es SQLite?

• Sistema de gestión de BBDD relacional.


• Escrito en C, es de código abierto.
• Forma parte integral del programa.
• Se guarda como un único fichero en host.

290
Ventajas Inconvenientes

• Ocupa muy poco espacio en disco y • Mo admite clausulas anidadas


memoria. (where)
• Muy eficiente y rápido. • No existen usuarios (no acceso
• Multiplataforma. simultáneo por parte de varios
• Sin administración / Configuración usuarios a la vez)
• Dominio público. Sin costo • Falta de clave foránea cuando se crea
en modo consola.

Pasos a seguir para conectar con BBDD

1. Abrir – Crear conexión


2. Crear puntero
3. Ejecutar query (consulta) SQL
4. Manejar los resultados de la query (consulta)
a. Insertar, Leer, Actualizar, Borrar (Create, Read, Update, Delete)
5. Cerrar puntero
6. Cerrar conexión

Vamos a empezar un nuevo proyecto llamado [Link] en una nueva carpeta llamada
BBDD.

Si ahora ejecutamos el proyecto observaremos que nos ha creado la base de datos.

Ahora está completamente vacía.

Vamos a crear nuestra primera tabla.

291
Guardamos y ejecutamos.

Podemos observar que ahora el fichero ya no está vacío.

Hay una tabla aun que esta está vacía.

Desde la siguiente url: [Link] podremos descargar un visor SQLite.

Desde la pestaña Dowload la podremos descaragar.

Yo me he descargado el PortableApp.

Una vez descargada la aplicación la guardas en una carpeta y desde la carpeta la instalas.

292
Verás que ha creado una carpeta, entramos en ella.

Ejecutamos [Link].

Si abrimos una base de datos podremos ver la estructura.

También podemos arrastras la base de datos al visor, esta te la mostrará automáticamente.

293
Con la pestaña Hoja de datos podremos ver los registros.

¿Cómo insertamos información en la tabla?

Lo primero que tenemos que realizar es eliminar o comentar la línea de crear tabla, ya que si no
lo hiciéramos, nos daría error diciendo que dicha tabla ya existe.

En [Link] insertamos los artículos, pero para que esto tenga efecto hemos de
confirmar con [Link]().

Guardamos y ejecutamos.

294
Podrás observar que no ha pasado nada, pero si consultamos la base de datos con el visor, este
será el resultado:

Nos confirma que hemos agregado un registro.

295
BBDD II (VIDEO 56)

• Inserción de varios registros.


• Recuperación de varios registros.
Vamos a reutilizar el código del proyecto anterior.

Para insertar varios registros a la vez, lo primero que vamos a realizar es una variable de tipo
tupla, donde especificaremos tres registros.
Para añadir varios registros utilizaremos [Link] con la sintaxis que se muestra
en el código, (?,?,?) cada interrogante por campo que tiene la tabla, y por último el nombre de
la variable de tipo tupla.
Guardamos y ejecutamos, veremos que no ha realizado nada pero ahora con el visor SQLite
vamos a comprobar si se han agregado dichos registros.

296
Observamos que así ha sido.

Ahora la pregunta es como accedemos a esta información.

Recuerda Ctrol + S guardar y Ctrol + B ejecutar en la consola.

En este ejemplo se muestra cada registro en una fila distinta.

Ahora solo queremos consultar por el primer campo:

297
Para poner el nombre del campo junto con el artículo:

En el próximo capitulo trataremos las claves principales.

298
299
BBDD III (VIDEO 57)

• Claves principales en BBDD

La primera columna los valores no pueden ser repetido ya que es un campo clave.

Observarás una pequeña llave con CODIGO_ARTICULO, nos indica que es un campo clave.

300
Si vamos a Hoja de datos veremos los artículos:

Veremos los artículos que hemos añadido.

Ahora vamos a agregar un nuevo registro.

Vamos a comprobar con el visor si hemos agregado este registro.

301
Así es hemos agregado el artículo con código AR05.

Si por error repetimos el mismo código esto nos generará un error.

[Link]: UNIQUE constraint failed: PRODUCTOS.CODIGO_ARTICULO

Porque ya existe un registro con este campo clave, no se puede repetir.

302
Este registro no ha sido agregado a la BBDD.

Vamos a borrar la base de datos para realizar otro proyecto y que el campo clave se inserte
automáticamente sin la necesidad de ponerlo nosotros y evitar campos clave repetidos.

Para que se ingrese el campo clave automáticamente al crear la tabla escribiemos:


ID INTEGER PRIMARY KEY AUTOINCREMENT
En la línea 22 cambiamos el primer ? por NUL de esta manera le estamos diciendo que lo
introduzca automáticamente.

Observamos que ha creado el campo ID y ha número automáticamente.

303
Si observamos la estructura veremos que es campo clave ID INTEGER.

304
BBDD IV (VIDEO 58)

• Cláusula UNIQUE
• Operaciones CRUD

La cláusula UNIQUE nos va a impedir repetir la información en un campo en toda la tabla.


Supongamos que no podemos tener dos artículos con el mismo nombre.
Borramos la base de datos, para que no nos diga que dicha base de datos existe.

Le estamos diciendo que no duplique ningún registro con el mismo NOMBRE_ARTICULO.


Ejecutamos el proyecto, verás que no ha hecho nada, pero hemos creado de nuevo el fichero
“GestionProductos”.
Lo vamos a leer con el lector SQLite.

305
Observamos como esta campo es UNIQUE y ya no lo podremos duplicar.

Vamos a borrar de nuevo la base de datos.

Hemos duplicado “Pantalón” en principio esto tiene que dar error.

Nos está diciendo que el campo NOMBRE_ARTICULO es UNIQUE.

Ha creado la base de datos pero está vacía.

306
Borramos de nuevo la base de datos.

Si un artículo se llama Pantalón y otro Pantalones ya son datos diferentes.

Ejecutamos el proyecto y vemos el contenido de la tabla.

307
Ha agregado los 5 registros.

Operaciones CRUD.

Queremos consultar aquellos registros cuya SECCION=’Confección’ usaremos el parámetro


WHERE, cuando ejecutemos verás que hay dos registros.

UPDATE= Actualización de registros.

Queremos actualizar el precio de la Pelota que tiene un precio de 20 € y queremos que tenga
un precio de 35 €.

308
Ejecutamos y consultamos la base de datos.

El precio de la Pelota ya es de 35 €.
Ahora vamos a borrar registros utilizaremos DELETE.

Guardamos, ejecutamos y consultamos la base de datos con el visor.

309
El registro número 5 ya se ha eliminado.

310
PRACTICA GUIADA I (VIDEO 59)

• Aplicación gráfica CRUD

Vamos a realizar el siguiente proyecto paso a paso.

El video explica como tiene que ser el proyecto.

311
PRÁCTICA GUIADA II (VIDEO 60)
Vamos a crear una nueva carpeta a la que le llamaremos Práctica guiada.

Vamos a crear un nuevo proyecto llamado CRUD [Link]

Importamos las librerías y definimos la ventana gráfica.

Vamos a empezar por el menú de la parte superior.

312
Vamos a crear las cajas de textos:

313
Este será el resultado:

314
El siguiente paso será agregar los Label.

315
316
PRACTICA GUIADA III (VIDEO 61)
Vamos a crear las etiquetas:

Este será el resultado:

317
Ahora vamos a crear los botones inferiores:

Este será el resultado:

318
En el próximo capítulo de daremos funcionalidad al submenú Conectar de la barra superior
apartado BBD.

319
PRÁCTICA GUIADA (VIDEO 62)

• Conexión a BBDD
• Salir de la aplicación

Vamos a crear la siguiente función:

Ahora tenemos que llamar a la función:

Ahora vamos a ejecutar el programa.

320
Seleccionaremos Conectar.

Si le danos de nuevo nos tiene que decir que esta base de datos ya existe.

Ahora con el visor SQLite vamos a ver si ha creado la correspondiente tabla.

321
Se a creado la tabla correctamente.

Vamos a crear la función para salir de la aplicación.

Realizamos la siguiente función salirAplicacion().

Llamamos a la función, guardamos y ejecutamos.

322
Le decimos que no.

Volvemos a ejecutar Salir y en este caso le contestamos que sí.

323
PRACTICA GUIADA V (VIDEO 63)
• Limpiar campos
• Insertar registros

Ahora vamos a crear la función limpiarCampos().

324
Guardamos y ejecutamos:

Ahora del menú Borrar seleccionaremos Borrar campos.

Se borran todos los campos.

325
Ahora vamos a crear otra función para agregar los registros en la base de datos que tanto tiene
que funcionar por parte del menú como con su respectivo botón en la parte inferior.

Vamos a llamar la función.

326
Ahora lo mismo sobre el botón Create.

Ejecutamos:

327
Del menú CRUD seleccionaremos Crear.

Ahora con el visor LQLite vamos a comprobar y el registro se ha añadido.

328
Ahora vamos a añadir un segundo registro desde el botón Create.

329
Vamos a comprobar se hemos añadido este nuevo registro.

330
PRÁCTICA GUIADA VI (VIDEO 64)
• Leer registros
• Actualizar registros

Vamos a crear la función leer.

Ahora vamos ha llamar la función desde el menú superior y el botón de la parte inferior.

331
Vamos a guardar y a ejecutar.

Este será el resultado:

332
Ahora del menú seleccionaremos Borrar y de este borrar campos.

Desde el botón ejecutamos la misma función.

333
Ahora vamos a crear la función actualizar().

Ahora vamos a llamar la función desde la barra menú y del correspondiente botón.

Guardaos y ejecutamos.

Primero introducimos el Id del usuario, en nuestro ejemplo tenemos 2, pondremos el 1.

334
Ahora vamos a cambiar la dirección.

Ahora tu lo puedes probar con los menús.

335
336
PRÁCTICA GUIADA VII (VIDEO 65)
• Borrar registros
• Consultas parametrizadas

Vamos a crear la función eliminar().

Ahora tanto en el menú como botón correspondiente tienen que llamar a la función.

337
Guardamos y ejecutamos, vamos a eliminar el registro 1, lo primero habrá que leerlo para a
posteriori eliminarlo.

Vamos al visor SQLite para comprobar que dicho registro se ha eliminado.

338
Observamos que el registro 1 ya no está.
Vamos a crear las dos ventanas emergentes del apartado Ayuda.

Ahora las vamos a llamar.

339
Aquí está todo el código:
from tkinter import *
from tkinter import messagebox
import sqlite3

#-----Funciones----

def conexionBBDD():
miConexion=[Link]("Usuarios")
miCursor=[Link]()
try:
[Link]('''
CREATE TABLE DATOSUSUARIOS(
ID INTEGER PRIMARY KEY AUTOINCREMENT,
NOMBRE_USURIO VARCHAR(50),
PASSWORD VARCHAR(50),
APELLIDO VARCHAR(10),
DIRECCION VARCHAR(50),
COMENTARIOS VARCHAR(100))
''')
[Link]("BBDD", "BBDD creada con éxito")

except:
[Link]("¡Atención!", "La BBDD ya existe")

def salirAplicacion():
valor=[Link]("Salir", "¿Deseas salir de la aplicación?")
if valor=="yes":
[Link]()

def limpiarCampos():
[Link]("")
[Link]("")
[Link]("")
[Link]("")
[Link]("")
[Link](1.0,END)

340
def crear():
miConexion=[Link]("Usuarios")
miCursor=[Link]()
[Link]("INSERT INTO DATOSUSUARIOS VALUES(NULL, '"+ [Link]()+
"','" + [Link]()+
"','" + [Link]()+
"','" + [Link]()+
"','" + [Link]("1.0",END)+ "')")
[Link]()
[Link]("BBDD", "Registro insertado con éxito")

def leer():
miConexion=[Link]("Usuarios")
miCursor=[Link]()
[Link]("SELECT * FROM DATOSUSUARIOS WHERE ID=" + [Link]())
elUsuario=[Link]()
for usuario in elUsuario:
[Link](usuario[0])
[Link](usuario[1])
[Link](usuario[2])
[Link](usuario[3])
[Link](usuario[4])
[Link](1.0, usuario[5])
[Link]()

def actualizar():
miConexion=[Link]("Usuarios")
miCursor=[Link]()
[Link]("UPDATE DATOSUSUARIOS SET NOMBRE_USURIO='" +
[Link]() +
"', PASSWORD='" + [Link]() +
"', APELLIDO='" + [Link]() +
"', DIRECCION='" + [Link]() +
"', COMENTARIOS='" + [Link]("1.0",END) +
"' WHERE ID="+ [Link]())

[Link]()
[Link]("BBDD", "Registro Actualizado con éxito")

def eliminar():
miConexion=[Link]("Usuarios")
miCursor=[Link]()
[Link]("DELETE FROM DATOSUSUARIOS WHERE ID="+ [Link]())
[Link]()
[Link]("BBDD", "Registro borrado con éxito")

341
def licencia():
[Link]("LICENCIA", "Esta licenccia es de\n Pere Manel")

def acercade():
[Link]("Acerca de...",
"Base de datos para el\n control de contactos")

root=Tk()
barraMenu=Menu(root)
[Link](menu=barraMenu, width=300, height=300)

# -----Barra de menú-----

bbddMenu=Menu(barraMenu, tearoff=0)
bbddMenu.add_command(label="Conectar", command=conexionBBDD)
bbddMenu.add_command(label="Salir", command=salirAplicacion)

borrarMenu=Menu(barraMenu, tearoff=0)
borrarMenu.add_command(label="Borrar campos", command=limpiarCampos)

crudMenu=Menu(barraMenu, tearoff=0)
crudMenu.add_command(label="Crear", command=crear)
crudMenu.add_command(label="Leer", command=leer)
crudMenu.add_command(label="Actualizar", command=actualizar)
crudMenu.add_command(label="Borrar", command=eliminar)

ayudaMenu=Menu(barraMenu, tearoff=0)
ayudaMenu.add_command(label="Licencia", command=licencia)
ayudaMenu.add_command(label="Acerca de...", command=acercade)

barraMenu.add_cascade(label="BBDD", menu=bbddMenu)
barraMenu.add_cascade(label="Borrar", menu=borrarMenu)
barraMenu.add_cascade(label="CRUD", menu=crudMenu)
barraMenu.add_cascade(label="Ayuda", menu=ayudaMenu)

#-----Comienzo de campos-----

miFrame=Frame(root)
[Link]()

miId=StringVar()
miNombre=StringVar()
miApellido=StringVar()
miPass=StringVar()
miDireccion=StringVar()

342
cuadroID=Entry(miFrame, textvariable=miId)
[Link](row=0, column=1, padx=10, pady=10)

cuadroNombre=Entry(miFrame, textvariable=miNombre)
[Link](row=1, column=1, padx=10, pady=10)
[Link](fg="red", justify="right")

cuadroPass=Entry(miFrame, textvariable=miPass)
[Link](row=2, column=1, padx=10, pady=10)
[Link](show="?")

cuadroApellido=Entry(miFrame, textvariable=miApellido)
[Link](row=3, column=1, padx=10, pady=10)

cuadroDireccion=Entry(miFrame, textvariable=miDireccion)
[Link](row=4, column=1, padx=10, pady=10)

textoComentario=Text(miFrame, width=16, height=5)


[Link](row=5, column=1, padx=10, pady=10)
scrollVert=Scrollbar(miFrame, command=[Link])
[Link](row=5, column=2, sticky="nsew")
[Link](yscrollcommand=[Link])

#----Aquí comienzan las etiquetas-----

idLabel=Label(miFrame, text="Id:")
[Link](row=0, column=0, sticky="e", padx=10, pady=10)

nombreLabel=Label(miFrame, text="Nombre:")
[Link](row=1, column=0, sticky="e", padx=10, pady=10)

passLabel=Label(miFrame, text="Password:")
[Link](row=2, column=0, sticky="e", padx=10, pady=10)

apellidoLabel=Label(miFrame, text="Apellido:")
[Link](row=3, column=0, sticky="e", padx=10, pady=10)

direccionLabel=Label(miFrame, text="Dirección:")
[Link](row=4, column=0, sticky="e", padx=10, pady=10)

comentariosLabel=Label(miFrame, text="Comentarios:")
[Link](row=5, column=0, sticky="ne", padx=10, pady=10)

#-----Aquí los botones----

miFrame2=Frame(root)
[Link]()

343
botonCrear=Button(miFrame2, text="Create", command=crear)
[Link](row=1, column=0, sticky="e", padx=10, pady=10)

botonLeer=Button(miFrame2, text="Read", command=leer)


[Link](row=1, column=1, sticky="e", padx=10, pady=10)

botonActualizar=Button(miFrame2, text="Update", command=actualizar)


[Link](row=1, column=2, sticky="e", padx=10, pady=10)

botonBorrar=Button(miFrame2, text="Delete", command=eliminar)


[Link](row=1, column=3, sticky="e", padx=10, pady=10)

[Link]()

Ahora vamos a comentar que son consultas parametrizadas.

Con tres comillas al principio y luego al final pasamos una parte de texto a comentario, es decir
a la hora de ejecutarlo lo ignorará y la podré recuperar cuando quiera.

344
Guardamos y ejecutamos.

Este es el código:

def crear():
miConexion=[Link]("Usuarios")
miCursor=[Link]()
datos=[Link](), [Link](),[Link](), [Link](),
[Link]("1.0",END)
[Link]("INSERT INTO DATOSUSUARIOS VALUES(NULL,?,?,?,?,?)",(datos))

El recuadro es una línea.

345
Comprobamos si se añadió el registro.

También abría que hacerlo con el actualizar.

Este es el código:

def actualizar():
miConexion=[Link]("Usuarios")
miCursor=[Link]()
datos=[Link](), [Link](), [Link](), [Link](),
[Link]("1.0",END)
[Link]("UPDATE DATOSUSUARIOS SET NOMBRE_USURIO=?, PASSWORD=?,
APELLIDO=?,DIRECCION=?, COMENTARIOS=? "+ "WHERE ID=" +
[Link](),(datos))

Cada recuadro es una línea.

346
347
FUNCIONES LAMBDA (VIDEO 66)
• Qué son las funciones lambda y cuál es su utilidad

Vamos a crear un nuevo proyecto llamado practica_lambda.py.


Sirve para resumir una función normal expresión lambda en Python.

Hemos creado una función que calcula el área de un triángulo que después con un print
recuperamos la información.
Si queremos repetir varias veces esta función le vamos a asignar a esta función dos variables.

Este será el resultado:

348
¿Cómo podemos resumir más con una función lambda?

Vamos a comentar el anterior código.

Una función lambda podemos realizar cálculos no nos permitirán hacer bucles.

Para recuperar la función lambda se muestra en las siguientes líneas.


También es correcto:

349
Este será el resultado:

Esta función se llama función anónima porque no tiene nombre y la podemos utilizar las veces
que sea necesario.
También se denominan funciones “on then go”, “on demand” o “online”.
Otro ejemplo:

350
En este ejemplo vemos dos formas distintas de calcular un valor al cubo.

Otro ejemplo:

También se utilizar la función lambda para imprimir determinados formatos.

351
FUNCIÓN FILTER (VIDEO 67)
• Función Filter y utilidad
• Verifica que los elementos de una secuencia cumplen una condición, devolviendo un
iterador con los elementos que cumplan dicha condición.
Vamos a crear un nuevo proyecto llamado practica_filter.py

Hemos creado una función llamada numero_par(num) que admite un parámetro que
comprobamos si un número es divisible por 2, es decir par, si es así nos retorna un True.
A continuación creamos una lista de números.
Ahora para utilizar la función Filter, tenemos que decirle que imprima una lista utilizando la
función filter, si numero_par retorna un True imprime el número y si no, no lo imprime.
Este será el resultado cuando ejecutemos el código:

Aquí veremos como se puede simplificar el código utilizando la función lambda.

352
Sí ejecutamos obtendremos el mismo resultado:

Vamos a utilizar filter para filtrar objetos.

Este será el resultado:

Hemos creado una clase llamada Empleados con los campos nombre, cargo y salario.

Con def __str__(self): le decimos con que formato de salida quiero que salgan los datos.

Creamos una listaEmpleados que contiene 5 empleados.

A la variable salarios altos le pasamos aquellos empleados que cobran más de 50000.

Al final con ayuda de un for imprimimos aquellos empelados que cobran más de 50000.

353
354
FUNCIÓN MAP. (VIDEO 68)
• Función Map y utilidad
• Aplica una función a cada elemento de una lista iterable (listas, tuplas, etc.)
devolviendo una lista con los resultados.

Vamos a crear un nuevo proyecto llamado practica_map.py y copiaremos pare del código del
proyecto anterior.

Queremos poner una comisión para aquellos sueldos que son bajos.

En la función calculo_comision(empleado) hacemos que el sueldo de cada empleado se


incremente un 3%.

355
Con la instrucción señalada le estamos diciendo que en una nueva variable asigne a la lista los
mismos empleados pero con un sueldo incrementado al 3%.

Con el for hacemos la consulta de todos los empleados.

Este será el resultado:

Ya hemos incrementado el sueldo mensual un 3%.

Ahora queremos que esta comisión solo sea para los sueldos menores de 3000 €.

Con la condición hacemos que la comisión solo sea para los salarios menores o igual a 3000.

Este será el resultado:

356
Como podrás observar los sueldos mayores a 3000 no se han tocado.

357
EXPRESIONES REGULARES I (VIDEO 69)
• Qué son las expresiones regulares: sintaxis y ejemplos sencillos.
• ¿Qué son?
o Las expresiones regulares son una secuencia de caracteres que forman un
patrón de búsqueda?

Expresiones regulares o regex

• ¿Para qué sirven?


o Para el trabajo y procesamiento de texto.
• Ejemplos:
o Buscar un texto que se ajusta a un formato determinado (correo electrónico).
o Buscar si existe o no una cadena de caracteres dentro de un texto.
o Etc.

Vamos a crear un nuevo proyecto llamado practica_regex.py


Queremos encontrar la palabra aprender dentro de la variable cadena

Si guardamos y ejecutamos:

La ejecución nos devuelve un objeto llamado SER_Match, que el span es de 8 a 16 y que lo ha


encontrado.
Si el texto no está:

358
Cuando ejecutemos.

Para que nos diga si ha encontrado el texto o no vamos a realizar el siguiente código:

Este será el resultado:

Vamos a ver para que sirve .star(), .end() y .span()

359
Si ejecutamos este será el resultado:

Vamos a buscar una palabra que se repite en una frase.

print([Link](textoBuscar, cadena))

Para ello utilizamos el parámetro findall,

este será el resultado:

Nos devuelve una lista con el numero de veces que aparece la palabra “Python”.

Si queremos saber cuantas veces aparece la palabra Python utilizaremos la función len.

print(len([Link](textoBuscar, cadena)))

Si ejecutamos, este será el resultado.

360
Aparece 2 veces.

361
EXPRESIONES REGULARES II (VÍDEO 70)
• Expresiones regulares. Metacaracteres (caracteres comodín)
o Anclas y clases de caracteres
Vamos a comenzar por las Anclas.

Hemos creado una lista con 4 personas, con el ciclo for hacemos un recorrido por toda la lista y
queremos encontrar aquellas personas que su nombre empieza por Sandra, con el
condicionante le estamos diciendo que si encuentra a alguna Sandra me imprima el nombre
completo. Este será el resultado:

Agregamos a una nueva Sandra.

362
Este será el resultado:

Ahora queremos buscar a todas aquellas personas que su apellido termina por Martín.

Si ejecutamos este será el resultado:

Para saber los dominios que tengo con terminación es.

363
Este será el resultado:

Los dominios que empiezan por ftp.

Este será el resultado:

364
También podemos buscar caracteres que se encuentran en este texto estos irán entre corchetes.

Nos devolverá aquellos dominios que tengan el carácter ‘ñ’.

Ejecutamos.

Vamos a realizar una búsqueda para encontrar los niños y las niñas.

365
Si ejecutamos.

Queremos buscar la palabra camión que puede estar escrita con acento o sin acento.

366
Si ejecutamos.

367
EXPRESIONES REGULARES III (VÍDEO 71)
• Expresiones regulares.
o Rangos

Los rangos nos permiten buscar por un rango de caracteres o un rango de números.

Queremos buscar nombres que empiezan por O,P,Q,R,S,T esto es igual al rango O-T

Si lo ejecutamos.

Queremos ver todos los nombres que terminan con el rango o-t.

368
Este será el resultado:

Queremos ver los códigos Ma1, Ma2 y Ma3.

Este será el resultado:

369
Queremos buscar los códigos de Madrid que no sea Ma1, Ma2 ni Ma3

Negado

Este será el resultado:

Queremos los de Ma1, Ma2, Ma3, MaA y MaB dos rangos.

Este será el resultado:

370
Queremos ver aquellos códigos que tengan un . o dos :.

Este sería el resultado:

371
372
EXPRESIONES REGULARES IV (VÍDEO 72)
• Funciones del módulo re
o Match y search

Queremos buscar si al principio del valor de una variable contiene el nombre de Sandra.

Ejecutamos.

Si se lo preguntamos por la variable nombre2 que no contiene el nombre de Sandra.

373
Y ejecutamos.

Si queremos que no diferencie entre minúsculas y mayúsculas utilizaremos IGNORECASE

Ejecutamos.

374
Como utilizar el carácter comodín con el punto

Sustituye la primera letra del nombre, ejecutamos tanto con el nombre1 y el nombre3 dirá
“Hemos encontrado el nombre”.

Queremos que busque una cadena que tiene números.

375
Ejecutamos.

En este segundo caso:

Ejecutamos.

Y en el tercer ejemplo.

376
Ejecutamos.

La función search busca en toda la cadena de texto.

377
En la cadena3 empieza por una letra la función match como solo busca al principio nos decía
que no había encontrado números, pero la función search busca en toda la cadena, lo vamos a
probar con la variable cadena3 que empieza por letras.

Ejecutamos.

La función search es muy útil en cadenas de texto muy largas si hay un patrón a seguir.

378
379
DECORADORES I (VIDEO 73)

• Qué son los decoradores


o Funcionamiento y sintaxis

Decoradores. ¿Qué son)

• Funciones que a su vez añaden funcionalidades a otras funciones.


o Por eso se las denomina “decoradores”, porque “decoran” alas funciones. Les
añaden funcionalidades.
• Estructura de un decorador:
o 3 funciones (A,B y C) donde A recibe como parámetro a B para devolver C.
o Un decorador devuelve una función

Estructura:

def función_decorador(función):
def función_interna():
# código de la función interna
return función_interna

Vamos a realizar un nuevo proyecto llamado Ejemplo_decoradores.py.

380
La función decoradora hace que otras funciones sean completadas con más operaciones ya
que la función en enviada a la función decoradora que esta la ejecuta con el resto de código
que esta tiene.

Una función de suma la ejecutamos utilizando la función decoradora y la función resta la


ejecutamos directamente, cuando ejecutemos veremos las diferencias.

Función que pasa por la función decoradora

No pasa por la función decoradora

Ahora vamos a decorar la función resta.

Este será el resultado:

381
382
DECORADORES II (VIDEO 74)
• Decoradores con parámetros

Este será el resultado.

Podemos agregar más parámetros:

383
Ejecutamos

No importa el número de argumentos que tenga la función, los admite todos.

Cuando pasamos a la función potencia 2 argumentos que llevan su clave para ello lo vamos a
realizar de la siguiente forma:

384
Este será el resultado:

385
386
FUNCIONES DECORADORAS II (CORRECCIÓN) (VIDEO 74b)

En el capítulo anterior se olvidó decorar la función que trabajaba y la ejecutó sin más, en este
vídeo explica el proceso final.

387
DOCUMENTACIÓN (VIDEO 75)

• Documentar nuestros programas.

¿Qué es?

• Incluir comentarios en clases, métodos, módulos, etc.

¿Para qué?

• Para ayudar en el trabajo en equipo. Especialmente útil en aplicaciones complejas.

Vamos a realizar un nuevo proyecto llamado Ejemplo_documentacion.py

En una función podemos agregar un comentario para posibles recordatorios que irán entre
tres comillas dobles, este comentario no se ejecuta, pero si en un momento determinado
queremos imprimir este comentario realizaremos la línea que hemos marcado.

Le estamos diciendo que emprima el comentario de la función areaCuadrado, si ejecutamos


este será el resultado:

388
También podemos utilizar la función help pasándole como parámetro la función.

Este será el resultado:

Agregamos un nuevo comentario en función areaTriangulo.

389
Con la función help hacemos referencia a la función areaTraingulo, este será el resultado:

Vamos a crear una clase llamada Areas y que dichas funciones pertenezcan a dicha clase.

390
Como la función areaTriangulo está dentro de la clase Areas, para pedir ayuda habrá que
especificar la clase seguido de un punto y después la función.

Este será el resultado:

Si queremos obtener todas las ayudas de la clase Areas, no hace falta especificar las funciones.

391
Este será el resultado:

Vamos a agregar un comentario para la clase.

392
Ahora tenemos un comentario de clase y un comentario en cada función.

Al ejecutar observaremos la siguiente información:

393
Observamos la documentación del apartado clase, así como la documentación de cada función
que está comprendida en la clase.

En el módulo [Link] hemos agregado un comentario.

Este será el resultado:

394
395
DOCUMENTACIÓN Y PRUEBAS (VIDEO 76)
• Utilizar la documentación para realizar pruebas
o Módulo doctest

Vamos a realizar un proyecto nuevo llamado ejemplo_doctest.py

Hemos creado una función y entre “””, agregamos un comentario, seguido de >>> escribimos
la función y le pasamos los parámetros, en la línea inferior escribimos el resultado.

Importamos la librería doctest y ejecutamos [Link](), si ahora ejecutamos la


aplicación y no observamos ningún mensaje, nos está indicando que la función funciona
correctamente.

Vamos a ejecutar.

Ahora vamos a provocar un error diciendo que el valor a retornar será un 8.0 en lugar de un 9.0

396
Cuando ejecutemos este será el resultado:

Nos está diciendo que el resultado esperado 8.0 no es correcto y que nos devuelve 9.0.

En el siguiente ejemplo la función nos retorna un string, para comprobar si esta función
funcionará correctamente lo realizaremos de la siguiente forma:

397
Si modificamos algo del string este nos dará error, vamos a ejecutar:

No ha salido ningún mensaje, esto quiere decir que funciona correctamente.

398
En este ejemplo le estamos pasando varios test en este caso 3, vamos a ejecutar.

Al no salir ningún mensaje quiere decir que funciona correctamente.

Vamos a provocar que la segunda tenga error, ejecutamos:

399
Nos indica la línea que contiene el error que hemos indicado con una flecha.

Vamos a realizar una función que controlará el número de arroba y su posición en un correo
electrónico para comprobar su error.

Ejecutamos:

Funciona correctamente.

400
Vamos a realizar varias pruebas, este será el resultado:

Funciona correctamente.

Hemos cambiado el 1 por el 0, para ver que al no funcionar bien la condición cuando ejecutemos
el programa, este nos dará un error.

401
Esto nos demuestra que la función no controla que solo puede haber una @.

402
DOCUMENTACIÓN Y PRUEBAS II (VÍDEO 77)
• Utilizar la documentación para realizar pruebas
o Módulo doctest

Vamos a realizar un nuevo proyecto llamado ejemplo_doctest_2.py

Vamos a crear una función que retorne la raíz cuadrada de aquellos valores introducidos en la
lista.

Este será el resultado:

Los valores que devuelve son double.

403
Anidar
expresiones

En este ejemplo hemos realizado una prueba en la encontramos un bucle, la opción … (tres
puntos) es como si hiciéramos un sangrado hacia la derecha, para decirles que la línea

… [Link](i) pertenece al ciclo for.

Al ciclo for le estamos pasando una serie de valores 4, 9, 16.

Al final esta función retorna una serie de valores calculando la raíz cuadrada de tipo double, por
eso se representan 2.0, 3.0, 4.0

Si al ejecutar la aplicación esta no retorna ningún mensaje, significa que todo funciona
correctamente.

Vamos a comprobar que un numero negativo para la raiz cuadrada da error .

404
Si ejecutamos observaremos el siguiente error.

Seleccionaremos todo este texto y lo guardaremos en el portapapeles.

405
Pasamos a comentario el print.

Y agregamos las dos últimas líneas si no las tenemos.

Del texto que le hemos pegado, seleccionado en rojo, solo nos interesa la primera línea y la
última porque en las demás pueden haber variaciones, las eliminamos he insertamos tres
puntos, como diciendo que el texto intermedio sea el que sea.

406
Si ahora guardamos y ejecutamos y no aparece ningún mensaje, es que estamos controlando
que se está produciendo un error de tipo ValueError: math domain error.

Guardamos y ejecutamos:

407
408
GENERAR EJECUTABLES. FIN DE CURSO. (VIDEO 78)
• Creación de ejecutable
o Final de curso… No del todo
Según el tipo de sistema que estemos trabajando el ejecutable será un EXE si trabajamos en
Windows, TGZ si trabajamos en Linux, DNG si trabajamos con Mac, etc.
Vamos a coger un proyecto que ya realizamos en su tiempo, en nuestro caso la calculadora.

Vamos a instalar pyinstaler, esto lo realizaremos desde la consola de Windows.

409
Ya hemos instalado el pyinstaller.

Ahora tenemos que ir al directorio donde tenemos la consola.

El siguiente paso será hacer ejecutable la aplicación

Le damos a Enter.

Entramos en la carpeta dist.

410
Abrimos la carpeta practicaCalculadora

Observamos el ejecutable.

411
La vamos a ejecutar:

Nos aparece con la consola por detrás.

Si queremos que se ejecute sin la consola por detrás, realizaremos la instalación de la siguiente
forma:

412
Ahora nos vamos a la carpeta dist

La abrimos.
Ejecutamos la calculadora y ya aparece sin el fondo de la consola.

413
Para poder hacer un único archivo ejecutable.

Nos vamos a la consola:

Enter

Ahora vamos a la carpeta dist.

Ya solo tenemos un archivo ejecutable.

Es un poco más pesado.

Para que aparezca el icono que tu quieras en tu aplicación en la carpeta donde tienen el proyecto
Python copia un archivo ico.

414
Pyinstaller - -windowed - -onefile - -icon=./[Link] [Link]

Enter.

Ya tenemos nuestra aplicación con nuestro icono.

415
Contenido
TEMARIO (VIDEO 1) ....................................................................................................................... 1
INTRODUCCIÓN (VIDEO 2) ............................................................................................................ 2
Características. .......................................................................................................................... 2
Instalación Python ..................................................................................................................... 2
SINTAXIS BÁSICA I (VIDEO3) .......................................................................................................... 7
SINTAXIS BÁSICA II Tipos, operadores y variables (VIDEO 4) ...................................................... 15
Variable ................................................................................................................................... 16
Operadores.............................................................................................................................. 17
Variables .................................................................................................................................. 17
Condiciones ............................................................................................................................. 19
SINTAXIS III FUNCIONES I (VIDEO 5) ............................................................................................ 20
SINTAXIS BÁSICA IV FUNCIONES II (VIDEO 6) .............................................................................. 28
SINTAXIS BÁSICA V. LAS LISTAS (VIDEO 7)................................................................................... 31
SINTAXIS BÁSICA VI. LAS TUPLAS (VIDEO 8) ................................................................................ 37
SINTAXIS BÁSICA VII. LOS DICCIONARIOS (VIDEO 9) ................................................................... 42
CONDICIONALES I (VIDEO 10) ..................................................................................................... 49
CONDICIONALES II (VIDEO 11) .................................................................................................... 53
CONDICIONES III (VIDEO 12) ....................................................................................................... 59
CONDICIONALES IV (VIDEO 13) ................................................................................................... 64
BUCLES I. FOR (VIDEO 14) ........................................................................................................... 68
Bucles ...................................................................................................................................... 68
BUCLES II BUCLE FOR (VIDEO 15) ............................................................................................ 69
BUCLES II BUCLE FOR (VIDEO 16) ................................................................................................ 75
BUCLES IV. BUCLE WHILE (VIDEO 17) .......................................................................................... 82
While (Sintaxis)............................................................................................................................ 82
BUCLES V. CONTINUE, PASS Y ELSE (VIDEO 18) .......................................................................... 86
Pass.............................................................................................................................................. 87
GENERADORES I (VIDEO 19) ........................................................................................................ 91
GENERADORES II (VIDEO 20) ....................................................................................................... 94
EXCEPCIONES I (VIDEO 21) .......................................................................................................... 97
EXCEPCIONES II (VIDEO 22) ....................................................................................................... 100
EXCEPCIONES III (VIDEO 23) ...................................................................................................... 106
POO I (PROGRAMACIÓN ORIENTADA A OBJETOS) (VIDEO 24) ................................................. 111
POO II (VIDEO 25) ...................................................................................................................... 114
POO III (VIDEO 26) ..................................................................................................................... 118

416
POO IV (VIDEO 27)..................................................................................................................... 120
POO V (VIDEO 28)...................................................................................................................... 126
POO VI. HERENCIA (VIDEO 29) .................................................................................................. 128
POO VII HERENCIA II (VIDEO 30) ............................................................................................... 132
POO VIII. HERENCIAS III (VIDEO 31) .......................................................................................... 136
POO IX. POLIMORFISMO (VIDEO 32)......................................................................................... 140
MÉTODOS DE CADENA (VIDEO 33) ........................................................................................... 146
MÓDULOS (VIDEO 34) ............................................................................................................... 152
PAQUETES (VIDEO 35) ............................................................................................................... 157
PAQUETES DISTRIBUIBLES (VIDEO 36) ...................................................................................... 164
ARCHIVOS EXTERNOS I (VIDEO 37) ........................................................................................... 173
ARCHIVOS EXTERNOS II (VIDEO 38) .......................................................................................... 179
SERIALIZACIÓN I (VIDEO 39) ...................................................................................................... 186
SERIALIZACION II (VIDEO 40) ..................................................................................................... 189
GUARDADO PERMANENTE (VIDEO 41) ..................................................................................... 194
INTERFACES GRÁFICAS (VIDEO 42)........................................................................................... 200
INTERFACE GRÁFICAS II (VIDEO 43) .......................................................................................... 209
INTERFACES GRÁFICAS III (VIDEO 44)........................................................................................ 219
INTERFACES GRÁFICAS IV (VIDEO 45) ....................................................................................... 225
INTERFACES GRÁFICAS V (VIDEO 46) ........................................................................................ 235
INTERFACES GRÁFICAS VI (VIDEO 47) ....................................................................................... 242
INTERFACES GRÁFICAS VII (VIDEO 48) ...................................................................................... 247
INTERFACES GRÁFICAS VIII (VIDEO 49) ..................................................................................... 252
INTERFACES GRÁFICAS IX (VIDEO 50)........................................................................................ 256
INTERFACES GRÁFICAS X (VIDEO 51)......................................................................................... 266
INTERFACES GRÁFICAS XI (VIDEO 52)........................................................................................ 271
INTERFACES GRÁFICAS XII (VIDEO 53)....................................................................................... 277
INTERFACES GRÁFICAS XIII (VIDEO 54)...................................................................................... 285
BBDD I (VIDEO 55) ..................................................................................................................... 290
BBDD II (VIDEO 56) .................................................................................................................... 296
BBDD III (VIDEO 57) ................................................................................................................... 300
BBDD IV (VIDEO 58) ................................................................................................................... 305
PRACTICA GUIADA I (VIDEO 59) ................................................................................................ 311
PRÁCTICA GUIADA II (VIDEO 60) ............................................................................................... 312
PRACTICA GUIADA III (VIDEO 61) .............................................................................................. 317
PRÁCTICA GUIADA (VIDEO 62) .................................................................................................. 320

417
PRACTICA GUIADA V (VIDEO 63) ............................................................................................... 324
PRÁCTICA GUIADA VI (VIDEO 64) .............................................................................................. 331
PRÁCTICA GUIADA VII (VIDEO 65) ............................................................................................. 337
FUNCIONES LAMBDA (VIDEO 66) ............................................................................................. 348
FUNCIÓN FILTER (VIDEO 67) ..................................................................................................... 352
FUNCIÓN MAP. (VIDEO 68) ....................................................................................................... 355
EXPRESIONES REGULARES I (VIDEO 69) .................................................................................... 358
EXPRESIONES REGULARES II (VÍDEO 70) ................................................................................... 362
EXPRESIONES REGULARES III (VÍDEO 71) .................................................................................. 368
EXPRESIONES REGULARES IV (VÍDEO 72) .................................................................................. 373
DECORADORES I (VIDEO 73)...................................................................................................... 380
DECORADORES II (VIDEO 74)..................................................................................................... 383
FUNCIONES DECORADORAS II (CORRECCIÓN) (VIDEO 74b) ..................................................... 387
DOCUMENTACIÓN (VIDEO 75) .................................................................................................. 388
DOCUMENTACIÓN Y PRUEBAS (VIDEO 76) ............................................................................... 396
DOCUMENTACIÓN Y PRUEBAS II (VÍDEO 77) ............................................................................ 403
GENERAR EJECUTABLES. FIN DE CURSO. (VIDEO 78) ................................................................ 409

418

También podría gustarte