Curso de Python
Curso de Python
DESDE 0
• 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)
Características.
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.
Activaremos la opción Add Python 3.8 to PATH, para que desde la línea de comando tengamos
acceso a dicha aplicación.
3
Empieza la instalación.
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
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 (#).
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.
9
Ejecutamos el siguiente archivo:
10
Vamos a configurarlo para trabajar con Python.
11
Hacemos Enter.
12
Ahora de Tools, seleccionaremos SublimeREPL, de este seleccionaremos Python y por último
Python.
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.
16
Operadores
Variables
Ejemplo de nombres de variables, Nombre, nombre, nombre3, mi_nombre.
17
Utilizando las tres comillas.
18
Condiciones
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
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
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.
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.
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.
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.
24
Ahora escribe el siguiente código:
# funciones predefinidas
def mensaje():
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
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.
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.
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
• 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.
31
Si queremos acceder a un elemento de la lista que no existe, nos generará un error.
Print(miLista[7]) → al ser un elemento que no existe nos dará error con el siguiente mensaje:
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().
33
Pueden haber varios elementos con el mismo nombre pero la función index retorna el numero
del primer valor que encuentra.
Como este valor se encuentra veremos que en nuestra consola imprime un True si el elemento
no existe imprime un False:
34
Hemos eliminado Sandra de la lista.
35
36
SINTAXIS BÁSICA VI. LAS TUPLAS (VIDEO 8)
• Las tuplas
Sintaxis de la tuplas
Ejemplo de Tuplas.
37
En la posición 3 hay un 1, recuerda que empieza por la posición 0.
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.
39
Tupla con un único elemento, tupla unitaria.
Desempaquetado de tupla:
40
41
SINTAXIS BÁSICA VII. LOS DICCIONARIOS (VIDEO 9)
• 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.
La sintaxis:
42
Agregar más elementos a un diccionario.
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:
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]}}
45
Si queremos saber la longitud de diccionario utilizaremos len().
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á:
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:
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.
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
Ejecutamos la consola: Del menú Tools, seleccionaremos SublimeREPL, de este Python y por
último Python – RUN current file.
53
La línea 8 se ejecutará siempre ya que esta se encuentra fuera del if.
Queremos controlar que si el usuario introduce una edad superior a 100 que nos aparezca un
mensaje de Edad incorrecta.
54
Ejecutamos la consola:
55
Vamos a realizar los siguiente ejercicios:
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
Cada vez que presionemos Ctrol + Alt + R ejecutaremos Python – Run current file.
59
Para cerrar consola Ctrol + W.
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.
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”.
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”
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.
Ejecutamos la consola:
65
Python es case senstitive es decir diferencia las mayúsculas de las minúsculas es para que lo
escribáis igual.
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.
Bucles
Determinados Indeterminados
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.
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.
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
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.
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.
Ahora vamos a realizar un proyecto en el que nos preguntará por una dirección de correo y
que la pueda evaluar.
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.
Tipo range:
72
Si cambiamos por i veremos el valor en cada bucle.
73
74
BUCLES II BUCLE FOR (VIDEO 16)
75
Soluciones:
Yo lo he resuelto así:
76
Yo lo he resulto así:
77
Yo lo he resuelto así:
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:
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.
83
¿Cómo hacer para que un bucle no sea infinito?
84
Vamos a introducir un valor negativo y luego otro positivo.
85
BUCLES V. CONTINUE, PASS Y ELSE (VIDEO 18)
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.
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.
89
90
GENERADORES I (VIDEO 19)
• Generadores
o ¿Qué son?
o Funcionamiento
o ¿Qué utilidad tienen?
o ¿Cuál es su sintaxis?
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.
92
Este método ahorra recursos en el sistema.
93
GENERADORES II (VIDEO 20)
El resultado:
¿Cómo podemos acceder a cada una de las letras que forman parte de los elementos?
94
El resultado:
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”.
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.
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.
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)
Siguiendo con el programa anterior, queremos controlar que si el usuario en lugar de introducir
un numero introduce un texto veremos lo que pasa:
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:
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.
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:
División por 0.
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)
Si lo ejecutamos
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 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.
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.
109
110
POO I (PROGRAMACIÓN ORIENTADA A OBJETOS) (VIDEO 24)
• ¿Qué es la POO?
o Ventajas de este paradigma de la programación.
111
Programación Orientada a objetos
• Objeto:
o Tiene propiedades (atributos):
▪ Color
▪ Peso
▪ Alto
▪ Largo
o Tiene un comportamiento (¿Qué es capaz de hacer?
▪ Arrancar
▪ Frenar
▪ Girar
▪ Acelerar
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)
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
En este caso pueden ser el chasis y las ruedas, es frecuente que varios fabricantes utilicen el
mismo chasis y las mismas ruedas.
INSTANCIA
114
Estos coches al ser de dos fabricantes distintos comparten el chasis y las ruedas.
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.
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]()
116
117
POO III (VIDEO 26)
118
119
POO IV (VIDEO 27)
• Traslado a código los conceptos de la POO vistos anteriormente.
120
Eliminamos las líneas que nos sobran, este será el resultado:
121
El resultado no cambia.
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:
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.
129
Vamos a crear una clase principal que heredarán otras clases.
130
131
POO VII HERENCIA II (VIDEO 30)
• Herencia:
o Sobre escritura de métodos
o Herencia simple y múltiple
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.
133
Este será el resultado:
134
Herencias múltiples:
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()
Principio de sustitución: “es siempre un/a” en nuestro ejemplo un empleado es siempre una
persona.
136
Este será el resultado:
137
También pertenece a la clase Persona.
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()
145
MÉTODOS DE CADENA (VIDEO 33)
• Uso de métodos de cadenas.
• Objetos String
count(): Cuenta cuantas veces aparece una letra o una cadena en un texto.
isdigit(): devuelve un voleano, True o False dice si el valor introducido es un dígito un valor
numérico o no.
rfind(): Representa la posición donde aparece el carácter o un grupo de caracteres desde atrás.
146
Vamos a ver unos ejemplos:
147
Vamos a ejecutar introduciendo un texto.
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.
148
Ahora vamos a realizar la siguiente práctica.
149
150
151
MÓDULOS (VIDEO 34)
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.
153
Pero para que puedan funcionar el resto de funciones vamos a realizar lo siguiente:
154
Recuerda de guardarlo en la carpeta de “modulos” que hicimos para este capítulo.
Ahora realizamos un proyecto nuevo llamado “uso_vehiculos.py”
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)
Lo primero que vamos a realizar es crear una carpeta donde guardamos nuestros proyectos de
Python llamada cálculos.
157
Si miramos el contenido de la carpeta:
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:
159
La carpeta _pycache__ se genera automáticamente, en ella podremos observar:
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
161
Vamos a crear un nuevo proyecto en la carpeta redondeo_potencia con el nombre
[Link]
162
163
PAQUETES DISTRIBUIBLES (VIDEO 36)
• ¿Cómo crear paquetes distribuibles y reutilizables
164
Vamos a ejecutar Sublime Text del menú View seleccionaremos Side Bar y de este Show Open
Files.
165
Botón derecho del ratón sobre la carpeta Curso Python y de este New File.
166
Ctrol + s para guardar.
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
Si lo descomprimimos:
168
Ahora para instalarlo desde CMD.
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:
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.
170
Si queremos desinstalar el paquete abrimos de nuevo CMD.
Pulsamos enter.
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
173
Lo ejecutamos.
Vemos que no ha realizado nada, pero si nos vamos a nuestra carpeta de trabajo:
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
Si ejecutamos:
176
Abrir archivo para agregar información.
Ejecutamos:
177
178
ARCHIVOS EXTERNOS II (VIDEO 38)
• ¿Cómo trabajar con ficheros externos de texto con el módulo io
o Punteros de 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)
180
Con la función read() podemos poner un valor e imprimirá hasta el valor que le asignemos.
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.
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.
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.
184
185
SERIALIZACIÓN I (VIDEO 39)
• Pickle
o Método dump(): volcado de datos al fichero binario externo.
o Método load(): carga de los datos del fichero binario externo.
Lo ejecutamos:
186
Ahora veremos en nuestra carpeta de trabajo el archivo “lista_nombres”.
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.
Ejecutamos.
189
Ahora vamos a buscar el fichero “losCoches”.
Lo ejecutamos:
190
La línea print(c) la cambiaremos por print ([Link]) ya que aprovecharemos este método.
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)
194
Este será el resultado:
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)
Agregamos
196
Este será el resultado:
197
Si lo ejecutamos de nuevo.
Ejecutamos
198
199
INTERFACES GRÁFICAS (VIDEO 42)
Son ventanas en las que los usuarios pueden interactuar con ellas.
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.
Guardamos y ejecutamos
201
mainloop() : es un bucle infinito, este tiene que esta siempre al final.
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:
204
Cambiar el color de fondo.
205
Y hacemos doble clic en dicho proyecto.
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.
207
208
INTERFACE GRÁFICAS II (VIDEO 43)
209
Este será el resultado cuando lo ejecutemos:
210
El parámetro side puede ser igual a left, right, top y bottom.
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.
214
Este será el resultado:
215
Este será el resultado:
216
Podemos cambiar el icono del cursor.
Cuando lo ejecutemos y nuestro cursos pase por encima del Frame, este cambiará.
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
Sintaxis
• variableLabel=Label(contenedor, opciones)
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:
[Link](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
225
Este será el resultado:
El siguiente paso será crear una etiqueta al lado del cuadro de texto:
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
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.
228
Ahora vamos a modificar el texto Dirección por dirección de casa:
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
229
pady(vertical), padx(horizontal): nos ayudará a separar elementos uno verticalmente y el otro
horizontalmente.
230
Este será el resultado:
Con el método config podemos cambiar el color de los textos de las cajas de texto.
231
Para modificar la alineación del texto utilizaremos el método justify.
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
235
Vamos a darle una dimensiones más razonables.
Vamos a crear una barra de desplazamiento vertical, para ello construiremos un objeto scrollbar
y decirlo que pertenece al texto que nosotros le especifiquemos.
236
Este será el resultado:
237
Para que el posicionar funcione correctamente vamos a realizar lo siguiente:
238
Ahora vamos a agregar un botón con el método Button.
239
Agrega las siguientes modificaciones:
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
242
Este será el resultado:
243
Este será el resultado:
244
Ahora vamos a realizar la fila 4
Vamos a modificar la imagen que se encuentra en la parte superior izquierda que es una pluma
por otra imagen.
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.
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 pulsamos varias veces al número cuatro, solo muestra 1 como lo vamos a solucionar.
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.
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.
249
Ahora esta instrucción la copiaremos en todos los botones cambiando a su número.
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.
251
INTERFACES GRÁFICAS VIII (VIDEO 49)
• Creación de interfaces gráficas
o Funcionalidad calculadora
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.
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 al pulsar en el botón igual aparezca en pantalla la suma de lo que llevo en este momento.
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.
255
INTERFACES GRÁFICAS IX (VIDEO 50)
A continuación el código completo que a aportado el profe:
#-------------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---------------------------------------------
258
#-------------fila 2---------------------------------------------
#-------------fila 3---------------------------------------------
#-------------fila 4---------------------------------------------
[Link]()
259
• Creación de interfaces gráficas
o Botones de radio. Radiobuttons
• Botones de selección para preguntas de respuesta única.
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.
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:
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.
266
Vamos a agregar una imagen para recordar capítulos anteriores.
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:
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)
271
Podemos modificar el ancho de la ventana colocándonos en los extremos y arrastrar o modificar
el ancho de la ventana.
272
Ahora vamos a agregar los elementos de submenú.
273
Vamos a quitar la línea discontinua que aparece en el submenú.
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:
275
En el próximo capítulo ya le daremos inactividad.
276
INTERFACES GRÁFICAS XII (VIDEO 53)
277
Tenemos que importar messagebox con la librería tkinder.
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.
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”
281
Si lo cambiamos por [Link] funciona igual lo único que retorna un valor de
True o False.
Para el submenú “Cerrar” vamos a crear una ventana que diga Cerrar o Intentar.
282
Desde el submenú correspondiente vamos a llamar a la función.
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)
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:
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.
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.
¿Qué es SQLite?
290
Ventajas Inconvenientes
Vamos a empezar un nuevo proyecto llamado [Link] en una nueva carpeta llamada
BBDD.
291
Guardamos y ejecutamos.
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].
293
Con la pestaña Hoja de datos podremos ver los registros.
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:
295
BBDD II (VIDEO 56)
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.
297
Para poner el nombre del campo junto con el artículo:
298
299
BBDD III (VIDEO 57)
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:
301
Así es hemos agregado el artículo con código AR05.
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.
303
Si observamos la estructura veremos que es campo clave ID INTEGER.
304
BBDD IV (VIDEO 58)
• Cláusula UNIQUE
• Operaciones CRUD
305
Observamos como esta campo es UNIQUE y ya no lo podremos duplicar.
306
Borramos de nuevo la base de datos.
307
Ha agregado los 5 registros.
Operaciones CRUD.
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.
309
El registro número 5 ya se ha eliminado.
310
PRACTICA GUIADA I (VIDEO 59)
311
PRÁCTICA GUIADA II (VIDEO 60)
Vamos a crear una nueva carpeta a la que le llamaremos Práctica guiada.
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:
317
Ahora vamos a crear los botones inferiores:
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
320
Seleccionaremos Conectar.
Si le danos de nuevo nos tiene que decir que esta base de datos ya existe.
321
Se a creado la tabla correctamente.
322
Le decimos que no.
323
PRACTICA GUIADA V (VIDEO 63)
• Limpiar campos
• Insertar registros
324
Guardamos y ejecutamos:
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.
326
Ahora lo mismo sobre el botón Create.
Ejecutamos:
327
Del menú CRUD seleccionaremos Crear.
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
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.
332
Ahora del menú seleccionaremos Borrar y de este borrar campos.
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.
334
Ahora vamos a cambiar la dirección.
335
336
PRÁCTICA GUIADA VII (VIDEO 65)
• Borrar registros
• Consultas parametrizadas
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.
338
Observamos que el registro 1 ya no está.
Vamos a crear las dos ventanas emergentes del apartado Ayuda.
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)
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)
miFrame2=Frame(root)
[Link]()
343
botonCrear=Button(miFrame2, text="Create", command=crear)
[Link](row=1, column=0, sticky="e", padx=10, pady=10)
[Link]()
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))
345
Comprobamos si se añadió el registro.
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))
346
347
FUNCIONES LAMBDA (VIDEO 66)
• Qué son las funciones lambda y cuál es su utilidad
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.
348
¿Cómo podemos resumir más con una función lambda?
Una función lambda podemos realizar cálculos no nos permitirán hacer bucles.
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:
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:
352
Sí ejecutamos obtendremos el mismo 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.
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.
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%.
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.
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?
Si guardamos y ejecutamos:
358
Cuando ejecutemos.
Para que nos diga si ha encontrado el texto o no vamos a realizar el siguiente código:
359
Si ejecutamos este será el resultado:
print([Link](textoBuscar, cadena))
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)))
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:
362
Este será el resultado:
Ahora queremos buscar a todas aquellas personas que su apellido termina por Martín.
363
Este será el resultado:
364
También podemos buscar caracteres que se encuentran en este texto estos irán entre corchetes.
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:
369
Queremos buscar los códigos de Madrid que no sea Ma1, Ma2 ni Ma3
Negado
370
Queremos ver aquellos códigos que tengan un . o dos :.
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.
373
Y ejecutamos.
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”.
375
Ejecutamos.
Ejecutamos.
Y en el tercer ejemplo.
376
Ejecutamos.
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)
Estructura:
def función_decorador(función):
def función_interna():
# código de la función interna
return función_interna
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.
381
382
DECORADORES II (VIDEO 74)
• Decoradores con parámetros
383
Ejecutamos
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)
¿Qué es?
¿Para qué?
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.
388
También podemos utilizar la función help pasándole como parámetro la función.
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.
Si queremos obtener todas las ayudas de la clase Areas, no hace falta especificar las funciones.
391
Este será el resultado:
392
Ahora tenemos un comentario de clase y un comentario en cada función.
393
Observamos la documentación del apartado clase, así como la documentación de cada función
que está comprendida en la clase.
394
395
DOCUMENTACIÓN Y PRUEBAS (VIDEO 76)
• Utilizar la documentación para realizar pruebas
o Módulo doctest
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.
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:
398
En este ejemplo le estamos pasando varios test en este caso 3, vamos a ejecutar.
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 crear una función que retorne la raíz cuadrada de aquellos valores introducidos en la
lista.
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
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.
404
Si ejecutamos observaremos el siguiente error.
405
Pasamos a comentario el print.
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.
409
Ya hemos instalado el pyinstaller.
Le damos a Enter.
410
Abrimos la carpeta practicaCalculadora
Observamos el ejecutable.
411
La vamos a ejecutar:
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.
Enter
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.
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