Curso de Python
Curso de Python
.
Curso de Python
Crea tus propias aplicaciones
Jose Vicente Carratala
.
.
Tabla de contenido

1.-Introducción a Python

13b777

1.1.-Breve historia de la informática

b2b1fa

1.2.-Historia de Python

ccea7f

1.3.-Popularización de Python

1337ff

1.4.-Python en la actualidad

d89480

2.-Fundamentos de Python

6b51cb

2.1.-Comentarios

aa8ac4

2.2.-Entradas y salidas

2c1eff

2.3.-Operadores

8bbfef

2.4.-Estructuras de datos

a77729

2.5.-Estructuras de control del flujo de la ejecución

1b5a61

2.6.-Funciones

7cccfe

2.7.-Programación orientada a objetos

35ecfe

2.8.-Librerías

240404

2.9.-Persistencia

046aba

3.-Ejercicio práctico

0a6df6

3.1.-Inicio

272020

3.2.-MEnu

723ad7

3.3.-Eleccion de registros

853c2e

3.4.-Menu en funcion

df5062

3.5.-Salir del programa

1fe322

3.6.-Insertar un registro

06ea6e

3.7.-Conexión con SQLite

7e8959

3.8.-Insertar registro

3cba96

3.9.-Listado de registros

601d4c

3.10.-Eliminar

014930

3.11.-Actualizar registros

1647bf

3.12.-Extracción en funciones

c1e4d7

3.13.-Resto de funciones

c37c19

3.14.-Funciones a librerías

bfe102

3.15.-Datos en actualizacion

9a11c7

3.16.-No sobreescribir si está en blanco

b15047

4.-Tkinter

1a600d

4.1.-Ejercicio Ventana

b8523d

4.2.-Ejercicio Contenedores

cc67ec

4.3.-Controles de formulario

be7e27

5.-Ejercicio Tkinter calculadora

af8825

5.1.-Creando la ventana

680a3c

5.2.-Imagen titulo

9aa27f

5.3.-Etiquetas y campos

b4ed31

5.4.-Boton calcular

8ac1b6

5.5.-Total en Label

e5de93

5.6.-Mainloop

1df019

5.7.-autopytoexe

a0b77d

6.-Tkinteravanzado

5209d2

6.1.-Grid

eb3e18

6.2.-Widgets

eca014

7.-Ejercicio agenda Tkinter

43e528

7.1.-Ventana agenda

29343a

7.2.-Menu

405911

7.3.-Marcos

74a8eb

7.4.-Gestionar marcos

b2cbdb

7.5.-Nuevo registro

93271c

7.6.-Recojo datos

799e3f

7.7.-Inserción en base de datos

fc3cf3

7.8.-Eliminar

014930

7.9.-Listado

5c8b43

7.10.-Actualizar

b8cb40

8.-Sistema

3356ca

8.1.-Librería OS

f17179

8.2.-PIL

4b7c85

8.3.-Recursivo

00f9b4

9.-Comunicacion de red

abe566

9.1.-Requests

760cf7

9.2.-crawler

dfdefc

9.3.-crear un bot

417237

9.4.-flask

957646

9.5.-Ubuntu

b4604f

10.-Graficas

ab57f3

10.1.-matplotlib

b46640

10.2.-guardararchivo

478266

10.3.-subplots

7bcee7

10.4.-numpy

2f21cb

10.5.-panel de control

da7e73

10.6.-TKinter

f2bdda

10.7.-Sonidos

198afe

10.8.-Flask

dd6789

1.-Introducción a Python

1.1.-Breve historia de la informática

1.2.-Historia de Python

Ejercicio del curso:

acomment.txt


La historia de Python es interesante y llena de acontecimientos importantes que han llevado a su éxito como uno de los lenguajes de programación más populares del mundo. A continuación, te presento un resumen de los hitos clave en la evolución de Python:


1. Concepción y creación: Python fue concebido a finales de los años 80 por Guido van Rossum, un programador holandés. Comenzó a trabajar en el proyecto en diciembre de 1989 mientras trabajaba en el Centro de Matemáticas y Ciencias de la Computación (CWI) en los Países Bajos. El nombre "Python" fue inspirado por la afición de Guido a la serie de televisión británica "Monty Python's Flying Circus".


2. Versión 0.9.0: La primera versión pública de Python, la 0.9.0, fue lanzada en febrero de 1991. Aunque esta versión era rudimentaria, ya incluía algunas de las características fundamentales que definen Python hasta el día de hoy, como funciones, módulos y excepciones.


3. Versión 1.0: Python alcanzó la versión 1.0 en enero de 1994. En esta versión, se pulieron muchas características, y el lenguaje se estabilizó considerablemente.


4. Python 2.x: A lo largo de los años siguientes, Python continuó evolucionando con mejoras y actualizaciones. La rama principal de desarrollo se mantuvo en la serie 2.x, con diversas versiones, siendo Python 2.7 la última de esta serie, lanzada en julio de 2010.


5. Python 3.x: En diciembre de 2008, se lanzó Python 3.0, una versión importante que trajo consigo cambios significativos y mejoras en el lenguaje. Sin embargo, estos cambios también resultaron en la incompatibilidad con el código escrito en la serie 2.x, lo que generó una transición más lenta hacia Python 3.x. A lo largo de los años, la comunidad trabajó para actualizar bibliotecas y código existente para ser compatible con Python 3.


6. Popularidad creciente: A medida que pasaba el tiempo, Python ganó popularidad gracias a su legibilidad, simplicidad y facilidad de uso. Su comunidad activa, junto con una amplia gama de bibliotecas y frameworks, atrajo a desarrolladores de diversas áreas, incluyendo la ciencia de datos, inteligencia artificial, desarrollo web y automatización, entre otros.


7. Lanzamientos periódicos: Python comenzó a seguir un ciclo de lanzamiento periódico, con actualizaciones importantes cada 18-24 meses, lo que aseguró una evolución continua y una mejor planificación para la comunidad de desarrolladores.


8. Python en la actualidad: Hasta mi última actualización en septiembre de 2021, Python seguía siendo uno de los lenguajes de programación más populares y utilizados en todo el mundo. La versión más reciente era Python 3.9, y la comunidad de Python continuaba trabajando en mejoras y en el desarrollo de Python 3.10, el siguiente hito importante.


En resumen, Python ha recorrido un largo camino desde su creación a fines de los 80. Ha crecido hasta convertirse en un lenguaje de programación versátil y poderoso, utilizado en una amplia variedad de aplicaciones y proyectos en todo el mundo. Su diseño simple y legible, junto con una comunidad comprometida, han sido factores clave en su éxito continuo.


1.3.-Popularización de Python

1.4.-Python en la actualidad

2.-Fundamentos de Python

Explicación



2.1.-Comentarios

Explicación


En Python, los comentarios son líneas de código que se utilizan para proporcionar explicaciones, aclaraciones o anotaciones dentro del código fuente. Estos comentarios son ignorados por el intérprete de Python y no afectan el funcionamiento del programa. Los comentarios son útiles para que los desarrolladores puedan entender mejor el código y para documentar su funcionamiento.


En Python, hay dos formas principales de escribir comentarios:


1. Comentarios de una línea: Se utilizan para escribir comentarios breves en una sola línea. Se indican con el símbolo de almohadilla (#) y todo lo que viene después de este carácter se considera comentario.


Ejemplo:


python

# Este es un comentario de una línea

variable = 42 # Otro comentario en la misma línea



2. Comentarios de varias líneas: Se utilizan cuando se necesita escribir comentarios más extensos que ocupan varias líneas. Python no tiene un formato de comentario de bloque como algunos otros lenguajes de programación, pero se puede lograr mediante varias líneas de comentarios de una sola línea.


Ejemplo:


python

"""

Este es un comentario de varias líneas.

Puede extenderse por varias líneas sin problema.

Es útil para documentar funciones o bloques de código.

"""

variable = 42



Es importante utilizar comentarios de manera adecuada y mantenerlos actualizados a medida que el código evoluciona. Los comentarios claros y concisos ayudan a otros desarrolladores a entender el propósito y el funcionamiento del código, lo que facilita el mantenimiento y la colaboración en proyectos.


2.1.1.-Única linea

Explicación


Los comentarios de una sola línea en Python son utilizados para incluir información adicional o explicativa en el código. Estos comentarios son ignorados por el intérprete de Python durante la ejecución del programa y sirven para hacer el código más legible y comprensible para los programadores.


Para crear un comentario de una línea en Python, se utiliza el símbolo numeral #. Todo lo que sigue después del # en la misma línea es considerado un comentario y no tiene efecto en la ejecución del programa. Por ejemplo:


python

# Este es un comentario de una línea en Python

x = 5 # Asignamos el valor 5 a la variable x



Los comentarios de una sola línea son útiles para explicar rápidamente el propósito de una línea o sección de código, documentar cambios o hacer anotaciones que ayuden a comprender el código a otros programadores o a uno mismo en el futuro. Es importante usar comentarios de manera efectiva para mejorar la legibilidad y mantenibilidad del código.


Ejercicio del curso:

Comentario de una única linea.py


Claro, puedo explicar el código que has proporcionado:


python

# esto es un comentario de una única línea



Este código es un ejemplo de un comentario de una sola línea en Python. Los comentarios en Python comienzan con el símbolo de almohadilla (#). Todo lo que viene después del símbolo de almohadilla en la misma línea se considera un comentario y se ignora por completo por el intérprete de Python al momento de ejecutar el código.


En este caso específico, el comentario simplemente contiene texto explicativo que dice: "esto es un comentario de una única línea". Estos comentarios son útiles para proporcionar aclaraciones o anotaciones dentro del código fuente para que los desarrolladores puedan entender mejor el código.


Los comentarios no afectan el funcionamiento del programa y son únicamente para fines de documentación y claridad en el código.


/Fundamentos de Python/Comentarios/Única linea/Comentario de una única linea.py

1 # esto es un comentario de una única linea





2.1.2.-Error

Explicación


En Python, los comentarios son líneas de código que se utilizan para proporcionar explicaciones, aclaraciones o anotaciones dentro del código fuente. Estos comentarios son ignorados por el intérprete de Python y no afectan el funcionamiento del programa. Los comentarios son útiles para que los desarrolladores puedan entender mejor el código y para documentar su funcionamiento.


En Python, hay dos formas principales de escribir comentarios:


1. Comentarios de una línea: Se utilizan para escribir comentarios breves en una sola línea. Se indican con el símbolo de almohadilla (#) y todo lo que viene después de este carácter se considera comentario.


Ejemplo:


python

# Este es un comentario de una línea

variable = 42 # Otro comentario en la misma línea



2. Comentarios de varias líneas: Se utilizan cuando se necesita escribir comentarios más extensos que ocupan varias líneas. Python no tiene un formato de comentario de bloque como algunos otros lenguajes de programación, pero se puede lograr mediante varias líneas de comentarios de una sola línea.


Ejemplo:


python

"""

Este es un comentario de varias líneas.

Puede extenderse por varias líneas sin problema.

Es útil para documentar funciones o bloques de código.

"""

variable = 42



Es importante utilizar comentarios de manera adecuada y mantenerlos actualizados a medida que el código evoluciona. Los comentarios claros y concisos ayudan a otros desarrolladores a entender el propósito y el funcionamiento del código, lo que facilita el mantenimiento y la colaboración en proyectos.


Ejercicio del curso:

error.py


Claro, puedo explicar el código que proporcionaste:


python

# esto es un comentario de una única línea

Pero cuidado, porque esto ya no es un comentario



Este código muestra un ejemplo de comentarios en Python. El primer comentario es una línea que comienza con el símbolo de almohadilla (#). Como ya mencioné anteriormente, todo lo que viene después del símbolo de almohadilla en la misma línea se considera un comentario y se ignora por completo cuando se ejecuta el código.


Entonces, la línea # esto es un comentario de una única línea se trata como un comentario y no afectará el funcionamiento del programa.


Sin embargo, a partir de la segunda línea, el texto no comienza con el símbolo de almohadilla (#), por lo tanto, ya no es un comentario. Esto significa que esta línea de texto se considerará código y será procesada por el intérprete de Python al momento de ejecutar el programa.


En resumen, los comentarios en Python son útiles para proporcionar aclaraciones y notas dentro del código fuente y solo deben comenzar con el símbolo de almohadilla (#). Cualquier texto que no comience con # se considerará código y será procesado por el intérprete.


/Fundamentos de Python/Comentarios/Error/error.py

1 # esto es un comentario de una única linea
2 Pero cuidado, porque esto ya no es un comentario





2.1.3.-Comentarios multilinea

Explicación


En Python, no existe una sintaxis específica para comentarios multilínea como en algunos otros lenguajes de programación. Sin embargo, se puede simular un comentario multilínea utilizando triples comillas dobles """ o triples comillas simples '''. Estas cadenas de texto, aunque no asignadas a ninguna variable, son ignoradas por el intérprete de Python y pueden abarcar varias líneas, funcionando como bloques de comentarios.


python

"""

Este es un comentario

multilinea en Python.

Puede abarcar varias líneas

y se utiliza para documentar

bloques extensos de código.

"""



Del mismo modo, se puede usar triples comillas simples para lograr el mismo efecto:


python

'''

Este es otro ejemplo

de comentario multilinea

en Python.

Puede ser útil para explicar

funcionalidades extensas o

estructuras complejas.

'''



Aunque técnicamente son cadenas de texto, se emplean como comentarios debido a que no se asignan a ninguna variable y no tienen impacto en la ejecución del programa. Estos "comentarios" multilínea son útiles para documentar funciones, clases o secciones de código extensas, proporcionando claridad y contexto al código fuente.


Ejercicio del curso:

Comentarios multilinea.py


El código que has proporcionado es un ejemplo de un comentario de varias líneas en Python. En Python, los comentarios de varias líneas se pueden crear utilizando tres comillas simples (''') o tres comillas dobles (""") para abrir y cerrar el bloque de comentarios.


python

'''

Esto es un comentario

Y esto sigue siendo un comentario

Y puedo escribir tantas líneas como quiera

'''



En este caso, todo el texto entre las tres comillas simples es considerado un comentario y será ignorado por completo por el intérprete de Python cuando se ejecute el código. Los comentarios de varias líneas son útiles para incluir explicaciones más largas o documentación detallada en el código fuente.


A diferencia de los comentarios de una sola línea que comienzan con el símbolo de almohadilla (#) y solo abarcan una línea, los comentarios de varias líneas con comillas triples pueden extenderse a través de múltiples líneas sin necesidad de agregar el símbolo de almohadilla en cada línea.


En resumen, los comentarios de varias líneas en Python son una forma conveniente de incluir explicaciones detalladas dentro del código sin afectar el funcionamiento del programa.


/Fundamentos de Python/Comentarios/Comentarios multilinea/Comentarios multilinea.py

1 '''
2
3 Esto es un comentario
4 Y esto sigue siendo un comentario
5 Y puedo escribir tantas lineas como quiera
6
7 '''





2.1.4.-Error

Explicación


En Python, los comentarios son líneas de código que se utilizan para proporcionar explicaciones, aclaraciones o anotaciones dentro del código fuente. Estos comentarios son ignorados por el intérprete de Python y no afectan el funcionamiento del programa. Los comentarios son útiles para que los desarrolladores puedan entender mejor el código y para documentar su funcionamiento.


En Python, hay dos formas principales de escribir comentarios:


1. Comentarios de una línea: Se utilizan para escribir comentarios breves en una sola línea. Se indican con el símbolo de almohadilla (#) y todo lo que viene después de este carácter se considera comentario.


Ejemplo:


python

# Este es un comentario de una línea

variable = 42 # Otro comentario en la misma línea



2. Comentarios de varias líneas: Se utilizan cuando se necesita escribir comentarios más extensos que ocupan varias líneas. Python no tiene un formato de comentario de bloque como algunos otros lenguajes de programación, pero se puede lograr mediante varias líneas de comentarios de una sola línea.


Ejemplo:


python

"""

Este es un comentario de varias líneas.

Puede extenderse por varias líneas sin problema.

Es útil para documentar funciones o bloques de código.

"""

variable = 42



Es importante utilizar comentarios de manera adecuada y mantenerlos actualizados a medida que el código evoluciona. Los comentarios claros y concisos ayudan a otros desarrolladores a entender el propósito y el funcionamiento del código, lo que facilita el mantenimiento y la colaboración en proyectos.


Ejercicio del curso:

Error.py



/Fundamentos de Python/Comentarios/Error/Error.py

1 '''
2
3 Esto es un comentario
4 Y esto sigue siendo un comentario
5 Y puedo escribir tantas lineas como quiera
6
7 '''
8 Pero cuidado porque esto ya no es un comentario





2.2.-Entradas y salidas

Explicación


En el contexto de la programación, las entradas y salidas se refieren a la interacción entre un programa y el usuario, dispositivos de almacenamiento o cualquier otro sistema externo. En Python, existen varias formas de manejar las entradas (inputs) y salidas (outputs).


### Entradas (Inputs):


#### Entrada por Teclado (Input del Usuario):


La función input() se utiliza para recibir datos del usuario a través del teclado. Esta función muestra un mensaje opcional al usuario y espera a que se ingrese información desde la consola. Por ejemplo:


python

nombre = input("Por favor, introduce tu nombre: ")

print("Hola,", nombre, "! Bienvenido.")



#### Argumentos de Línea de Comandos:


Los programas Python pueden aceptar argumentos desde la línea de comandos al ser ejecutados. La biblioteca sys proporciona acceso a estos argumentos a través de sys.argv. Por ejemplo:


python

import sys


print("Los argumentos pasados son:", str(sys.argv))



### Salidas (Outputs):


#### Salida por Consola:


La función print() se usa para mostrar información en la consola. Puede mostrar texto, variables y otros datos formateados. Por ejemplo:


python

nombre = "Juan"

edad = 25

print("El nombre es:", nombre)

print("La edad es:", edad)



#### Escritura en Archivos:


Python permite escribir información en archivos utilizando diversas operaciones de escritura, como write() para escribir texto en un archivo específico.


python

with open('archivo.txt', 'w') as archivo:

archivo.write("Este es un ejemplo de texto que se escribe en un archivo desde Python.")



Estas son algunas de las formas más comunes de manejar las entradas y salidas en Python. La entrada puede provenir del usuario, archivos, bases de datos u otros programas, mientras que la salida puede ser mostrada en la consola, guardada en archivos u otros dispositivos de almacenamiento. Estas operaciones son fundamentales para la interacción de un programa con su entorno y los usuarios finales.En Python, las entradas y salidas son fundamentales para interactuar con el usuario y permitir que un programa tome datos de entrada, procese esa información y muestre resultados o mensajes al usuario. Aquí te explico cómo manejar las entradas y salidas en Python:


Entrada (Input):

Para solicitar datos al usuario, puedes utilizar la función input(). Esta función lee una línea de texto ingresada por el usuario desde la consola y devuelve esa cadena de texto como resultado. Puedes almacenar esta entrada en una variable para utilizarla posteriormente en tu programa.


Ejemplo:


python

nombre = input("Ingresa tu nombre: ")

print("Hola,", nombre)



En este ejemplo, la función input() solicita al usuario que ingrese su nombre, y luego, la variable nombre almacenará el texto ingresado por el usuario. Luego, el programa imprime un mensaje de saludo utilizando el nombre ingresado.


Salida (Output):

Para mostrar resultados, mensajes o datos al usuario, puedes utilizar la función print(). Esta función imprimirá el contenido que le pases como argumento en la consola.


Ejemplo:


python

nombre = "Juan"

edad = 30

print("Nombre:", nombre)

print("Edad:", edad)



En este ejemplo, utilizamos la función print() para mostrar el nombre y la edad en la consola. La función print() puede recibir múltiples argumentos separados por comas, y los imprimirá en la misma línea separados por espacios.


También puedes formatear la salida utilizando cadenas de formato, como el método format() o utilizando f-strings en Python 3.6+.


Ejemplo con format():


python

nombre = "María"

edad = 25

print("Nombre: {}, Edad: {}".format(nombre, edad))



Ejemplo con f-string:


python

nombre = "Carlos"

edad = 35

print(f"Nombre: {nombre}, Edad: {edad}")



En resumen, las entradas y salidas son esenciales para interactuar con el usuario y para mostrar resultados o mensajes en un programa Python. La función input() se utiliza para obtener entradas del usuario, mientras que la función print() se usa para mostrar salidas en la consola.


2.2.1.-Salidas

Ejercicio del curso:

acomment.py


En Python, la función print() se utiliza para mostrar salidas en la consola. Esta función toma uno o más argumentos y los muestra en la pantalla del usuario.


Sintaxis básica de print():

python

print(valor1, valor2, valor3, ..., valorN)



Donde valor1, valor2, ..., valorN son los valores que deseas mostrar en la consola. Estos valores pueden ser cadenas de texto, números, variables, resultados de expresiones, etc. Los valores separados por comas se mostrarán en la misma línea y se separarán por un espacio por defecto.


Ejemplo:


python

nombre = "Juan"

edad = 30

print("Hola,", nombre, "tienes", edad, "años.")



Este código producirá la siguiente salida en la consola:



Hola, Juan tienes 30 años.



Además de la sintaxis básica, Python ofrece varias formas para formatear la salida usando la función print():


1. Usando cadenas de formato con el método format():


python

nombre = "María"

edad = 25

print("Nombre: {}, Edad: {}".format(nombre, edad))



2. Usando f-strings (formatted string literals) en Python 3.6+:


python

nombre = "Carlos"

edad = 35

print(f"Nombre: {nombre}, Edad: {edad}")



3. Especificando el separador entre los valores mediante el argumento sep de la función print():


python

nombre = "Ana"

edad = 28

print("Nombre:", nombre, "Edad:", edad, sep="-")



Estos son solo algunos ejemplos de cómo puedes utilizar la función print() en Python para mostrar resultados y mensajes en la consola. La función print() es una herramienta valiosa para depurar, mostrar información relevante al usuario y comunicar el progreso o resultados de un programa.


Explicación


Las salidas en Python son la presentación de datos o información generada por un programa hacia un dispositivo externo, como la pantalla, un archivo, una impresora, entre otros. Estas salidas pueden mostrar resultados, mensajes, cálculos o cualquier tipo de información relevante para el usuario o para el procesamiento posterior.


### Salida por Consola:


La función print() es una de las formas más comunes de generar salidas en Python. Permite mostrar información en la consola. Puede imprimir texto, valores de variables, resultados de cálculos, entre otros. Por ejemplo:


python

nombre = "Alice"

edad = 30

print("El nombre es:", nombre)

print("La edad es:", edad)



El resultado en la consola sería:



El nombre es: Alice

La edad es: 30



### Escritura en Archivos:


Python permite escribir información en archivos utilizando diversas operaciones de escritura. Al abrir un archivo en modo escritura 'w' o modo añadir 'a', se puede utilizar el método write() para escribir texto o datos en dicho archivo. Por ejemplo:


python

with open('salida.txt', 'w') as archivo:

archivo.write("Este es un ejemplo de texto escrito en un archivo desde Python.")



### Salida Formateada:


Python ofrece métodos de formateo para presentar datos de manera específica. Por ejemplo, usando format() o f-strings (cadenas f) para una salida más legible y estructurada.


python

nombre = "Carlos"

edad = 28

print("El nombre es: {}. Edad: {}".format(nombre, edad))


# O usando f-strings (cadenas f) en Python 3.6 y versiones posteriores

print(f"El nombre es: {nombre}. Edad: {edad}")



### Salida de Resultados de Funciones o Cálculos:


Las funciones o cálculos pueden devolver resultados que pueden ser mostrados como salidas.


python

def suma(a, b):

return a + b


resultado = suma(5, 3)

print("El resultado de la suma es:", resultado)



Estas son algunas de las formas en las que Python permite generar salidas, ya sea para visualización en la consola, escritura en archivos o presentación de datos formateados. Estas salidas son fundamentales para comunicar información y resultados a los usuarios finales o a otros sistemas que consuman estos datos.


Ejercicio del curso:

print.py


Claro, puedo explicar el código que has proporcionado:


python

print("Hola mundo soy Jose Vicente")



Este código es una línea simple en Python que utiliza la función print() para mostrar el mensaje "Hola mundo soy Jose Vicente" en la consola.


La función print() es una función incorporada en Python que se utiliza para mostrar salidas en la consola. Toma uno o más argumentos y los muestra en la pantalla del usuario.


En este caso, el único argumento que se pasa a la función print() es la cadena de texto "Hola mundo soy Jose Vicente". Cuando se ejecuta este código, el resultado será:



Hola mundo soy Jose Vicente



Así que, básicamente, el código imprime el mensaje "Hola mundo soy Jose Vicente" en la consola. Es un ejemplo muy común y simple utilizado para familiarizarse con la función print() y comenzar a escribir programas en Python.


/Fundamentos de Python/Entradas y salidas/Salidas/print.py

1 print("Hola mundo soy Jose Vicente")





Ejercicio del curso:

ventana.py



/Fundamentos de Python/Entradas y salidas/Salidas/ventana.py

1 import tkinter as tk
2
3 raiz = tk.Tk()
4 etiqueta = tk.Label(raiz,text="Hola")
5 etiqueta.pack()





2.2.2.-Entradas

Explicación


Las entradas en Python se refieren a la forma en que un programa recibe datos, ya sea desde el usuario, archivos, dispositivos externos o cualquier otra fuente de información.


### Entradas desde el Usuario:


#### Función input():


La función input() permite al usuario introducir datos desde el teclado. Este método espera a que el usuario escriba algo y presione Enter. Por ejemplo:


python

nombre = input("Por favor, introduce tu nombre: ")

print("Hola,", nombre, "! Bienvenido.")



### Argumentos de Línea de Comandos:


Los programas Python pueden aceptar argumentos desde la línea de comandos al ser ejecutados. La biblioteca sys proporciona acceso a estos argumentos a través de sys.argv. Por ejemplo:


python

import sys


print("Los argumentos pasados son:", str(sys.argv))



### Entradas desde Archivos:


Python permite la lectura de información desde archivos externos utilizando diversas operaciones de lectura, como read() para leer todo el contenido de un archivo.


python

with open('entrada.txt', 'r') as archivo:

datos = archivo.read()

print(datos)



### Métodos específicos para Entradas:


Además de estas formas comunes de entrada, existen otras bibliotecas y métodos específicos en Python para obtener datos de dispositivos externos, bases de datos, sensores, APIs, entre otros. Por ejemplo, la biblioteca requests se usa para obtener datos de una API web.


python

import requests


respuesta = requests.get('https://api.example.com/data')

datos = respuesta.json()

print(datos)



Las entradas son esenciales para permitir que un programa reciba datos y realice operaciones basadas en esa información. Python ofrece varias herramientas y métodos para manejar diferentes tipos de entradas, lo que permite una amplia flexibilidad en el manejo de datos dentro de los programas.


Ejercicio del curso:

input.py



/Fundamentos de Python/Entradas y salidas/Entradas/input.py

1 nombre = input()
2 print("Que sepas que tu nombre es:"+nombre)





2.3.-Operadores

Explicación


Los operadores en Python son símbolos especiales o palabras reservadas que permiten realizar operaciones entre variables, valores y otros elementos en un programa. Estos operadores se utilizan para realizar operaciones matemáticas, de comparación, lógicas y de asignación.


### Tipos de Operadores en Python:


#### Operadores Aritméticos:


Estos operadores se utilizan para realizar operaciones matemáticas básicas.


-Suma (+) Suma dos valores.

-Resta (-) Resta el segundo valor del primero.

-Multiplicación (*) Multiplica dos valores.

-División (/) Divide el primer valor por el segundo.

-Módulo (%) Devuelve el resto de la división.

-Potencia (**) Eleva un número a una potencia.

-División entera (//) Devuelve la parte entera de la división.


#### Operadores de Comparación:


Estos operadores comparan dos valores y devuelven un resultado booleano (True o False).


-Igualdad (==) Comprueba si dos valores son iguales.

-Desigualdad (!=) Comprueba si dos valores son diferentes.

-Mayor que (>) Comprueba si el valor izquierdo es mayor que el valor derecho.

-Menor que (<) Comprueba si el valor izquierdo es menor que el valor derecho.

-Mayor o igual que (>=) Comprueba si el valor izquierdo es mayor o igual al valor derecho.

-Menor o igual que (<=) Comprueba si el valor izquierdo es menor o igual al valor derecho.


#### Operadores Lógicos:


Estos operadores se utilizan para realizar operaciones lógicas entre valores booleanos.


-AND (and) Devuelve True si ambos valores son True.

-OR (or) Devuelve True si al menos uno de los valores es True.

-NOT (not) Devuelve True si el valor es False, y viceversa.


#### Operadores de Asignación:


Estos operadores se utilizan para asignar valores a variables.


-Asignación (=) Asigna un valor a una variable.

-Asignación con suma (+=) Agrega el valor derecho al valor izquierdo y asigna el resultado a la variable izquierda. Por ejemplo, x += 5 es equivalente a x = x + 5.


#### Otros Operadores:


Además de los operadores mencionados, Python también incluye operadores de pertenencia (in, not in) para comprobar la pertenencia de un valor en una secuencia, y operadores de identidad (is, is not) para comprobar si dos variables apuntan al mismo objeto en memoria.


Los operadores en Python son fundamentales para realizar cálculos, comparaciones, asignaciones y controlar el flujo de un programa, lo que permite realizar diversas operaciones de manera eficiente y estructurada.


2.3.1.-Asignacion y encadenamiento

Explicación


En Python, el operador de asignación (=) se utiliza para asignar valores a variables, mientras que los operadores de encadenamiento (+=, -=, *=, /=, %=, **=, //=) permiten realizar una operación y asignar el resultado a la variable de forma abreviada.


### Operadores de Encadenamiento:


Estos operadores combinan una operación con la asignación del resultado a la misma variable. Son una forma abreviada de realizar operaciones aritméticas y actualizar el valor de la variable.


-`+=` Agrega el valor a la variable existente.

-`-=` Resta el valor de la variable existente.

-`*=` Multiplica el valor de la variable existente.

-`/=` Divide el valor de la variable existente.

-`%=` Asigna el módulo del valor existente.

-`**=` Asigna la potencia del valor existente.

-`//=` Asigna la división entera del valor existente.


Ejemplo:


python

x = 5

x += 3 # Equivalente a x = x + 3

print(x) # Output: 8


y = 10

y *= 2 # Equivalente a y = y * 2

print(y) # Output: 20



Estos operadores de encadenamiento permiten actualizar el valor de una variable de manera concisa combinando la operación con la asignación.


### Operador de Asignación (=):


El operador de asignación (=) asigna el valor a la variable en el lado izquierdo de la expresión.


Ejemplo:


python

a = 10 # Asigna el valor 10 a la variable a

nombre = "Alice" # Asigna el valor "Alice" a la variable nombre



Este operador es fundamental para almacenar valores en variables, lo que permite manipular y utilizar datos en un programa.


En resumen, el operador de asignación (=) se utiliza para asignar valores a variables, mientras que los operadores de encadenamiento combinan una operación con la asignación del resultado a la misma variable, lo que permite realizar operaciones y actualizar el valor de la variable de forma concisa.


Ejercicio del curso:

asignacion y encadenamiento.py



/Fundamentos de Python/Operadores/Asignacion y encadenamiento/asignacion y encadenamiento.py

1 nombre = input()
2 print("Que sepas que tu nombre es:"+nombre)





2.3.2.-Aritméticos

Explicación


Los operadores aritméticos en Python son símbolos especiales que se utilizan para realizar operaciones matemáticas entre variables, constantes y valores. Estos operadores permiten realizar cálculos aritméticos básicos y avanzados.


### Operadores Aritméticos:


#### Suma (+):

Se utiliza para sumar dos valores.


Ejemplo:

python

a = 5

b = 3

resultado = a + b # resultado será 8



#### Resta (-):

Se utiliza para restar el segundo valor del primero.


Ejemplo:

python

a = 10

b = 7

resultado = a - b # resultado será 3



#### Multiplicación (*):

Se utiliza para multiplicar dos valores.


Ejemplo:

python

a = 4

b = 6

resultado = a * b # resultado será 24



#### División (/):

Se utiliza para dividir el primer valor por el segundo.


Ejemplo:

python

a = 20

b = 5

resultado = a / b # resultado será 4.0 (división flotante)



#### Módulo (%):

Devuelve el resto de la división del primer valor por el segundo.


Ejemplo:

python

a = 13

b = 5

resultado = a % b # resultado será 3



#### Potencia (**):

Calcula el primer valor elevado a la potencia del segundo valor.


Ejemplo:

python

a = 2

b = 3

resultado = a b # resultado será 8 (2 elevado a la potencia de 3)



#### División Entera (//):

Devuelve la parte entera de la división del primer valor por el segundo.


Ejemplo:

python

a = 21

b = 5

resultado = a // b # resultado será 4



Estos operadores aritméticos son fundamentales en Python para realizar operaciones matemáticas básicas como suma, resta, multiplicación, división, potenciación, módulo y división entera. Permiten llevar a cabo cálculos complejos y son ampliamente utilizados en programas para procesar datos y realizar operaciones matemáticas.


Ejercicio del curso:

aritmeticos.py



/Fundamentos de Python/Operadores/Aritméticos/aritmeticos.py

1 print("Operador de suma:")
2 print(4+3)
3 print("Operador de resta:")
4 print(4-3)
5 print("Operador de multiplicación:")
6 print(4*3)
7 print("Operador de división:")
8 print(4/3)
9 print("Operador de resto entero de división:")
10 print(4%3)





2.3.3.-Comparacion

Explicación


Los operadores de comparación en Python son utilizados para comparar valores y devolver un resultado booleano (True o False) según la relación entre ellos.


### Operadores de Comparación:


#### Igualdad (==):

Comprueba si dos valores son iguales.


Ejemplo:

python

a = 5

b = 5

resultado = (a == b) # resultado será True



#### Desigualdad (!=):

Comprueba si dos valores son diferentes.


Ejemplo:

python

a = 7

b = 5

resultado = (a != b) # resultado será True



#### Mayor que (>):

Comprueba si el valor izquierdo es mayor que el valor derecho.


Ejemplo:

python

a = 10

b = 5

resultado = (a > b) # resultado será True



#### Menor que (<):

Comprueba si el valor izquierdo es menor que el valor derecho.


Ejemplo:

python

a = 3

b = 8

resultado = (a < b) # resultado será True



#### Mayor o igual que (>=):

Comprueba si el valor izquierdo es mayor o igual que el valor derecho.


Ejemplo:

python

a = 7

b = 7

resultado = (a >= b) # resultado será True



#### Menor o igual que (<=):

Comprueba si el valor izquierdo es menor o igual que el valor derecho.


Ejemplo:

python

a = 5

b = 10

resultado = (a <= b) # resultado será True



Estos operadores de comparación son utilizados para evaluar y comparar valores, siendo esenciales en estructuras de control como condicionales (if, else, elif) y bucles (while, for). Permiten tomar decisiones basadas en la relación entre diferentes valores y son fundamentales para la lógica de un programa.


Ejercicio del curso:

comparacion.py



/Fundamentos de Python/Operadores/Comparacion/comparacion.py

1 print("Operador de menor que:")
2 print(4<3)
3 print("Operador de mayor que:")
4 print(4>3)
5 print("Operador de menor o igual que:")
6 print(4<=3)
7 print("Operador de mayor o igual que:")
8 print(4>=3)
9 print("Operador de igualdad:")
10 print(4==3)
11 print("Operador de no igualdad:")
12 print(4!=3)





2.3.4.-Booleanos

Explicación


Los operadores booleanos en Python se utilizan para realizar operaciones lógicas entre expresiones o valores booleanos, y devuelven un resultado booleano (True o False). Estos operadores permiten combinar o modificar la lógica de las condiciones.


### Operadores Booleanos:


#### AND (and):

Devuelve True si ambas expresiones son True, de lo contrario devuelve False.


Ejemplo:

python

a = True

b = False

resultado = a and b # resultado será False



#### OR (or):

Devuelve True si al menos una de las expresiones es True, si ambas son False devuelve False.


Ejemplo:

python

a = True

b = False

resultado = a or b # resultado será True



#### NOT (not):

Devuelve True si la expresión es False, y viceversa.


Ejemplo:

python

a = True

resultado = not a # resultado será False



Estos operadores booleanos son utilizados principalmente en estructuras de control (como if, else, elif) para evaluar condiciones complejas. Permiten tomar decisiones basadas en múltiples condiciones o expresiones lógicas, y su resultado determina el flujo del programa.


También son útiles en la evaluación de expresiones booleanas en situaciones donde se necesita determinar la verdad o falsedad de combinaciones de valores booleanos o expresiones.


Ejercicio del curso:

booleanos.py



/Fundamentos de Python/Operadores/Booleanos/booleanos.py

1 print("Operador and:")
2 print(4==4 and 3==3)
3 print("Operador and:")
4 print(4==4 and 3==2)
5 print("Operador or:")
6 print(4==4 or 3==2)
7 print("Operador or:")
8 print(4==3 or 3==2)
9





2.4.-Estructuras de datos

Explicación


Los contenedores de datos en Python son estructuras que permiten almacenar y organizar colecciones de valores o elementos. Estos contenedores facilitan la manipulación, acceso y gestión de datos en un programa.


### Algunos Contenedores de Datos Comunes en Python:


#### Listas (list):

Las listas son colecciones ordenadas y modificables de elementos. Pueden contener diferentes tipos de datos y permiten duplicados.


Ejemplo:

python

mi_lista = [1, 2, 3, "cuatro", "cinco"]



#### Tuplas (tuple):

Las tuplas son colecciones ordenadas e inmutables de elementos. Al igual que las listas, pueden contener diferentes tipos de datos.


Ejemplo:

python

mi_tupla = (10, 20, 30, "cuarenta")



#### Conjuntos (set):

Los conjuntos son colecciones desordenadas y no admiten elementos duplicados. Se utilizan para operaciones matemáticas de conjuntos.


Ejemplo:

python

mi_conjunto = {1, 2, 3, 4, 5}



#### Diccionarios (dict):

Los diccionarios son colecciones de pares clave-valor. Permiten almacenar datos asociados a una clave y son útiles para buscar, recuperar y manipular datos de manera eficiente.


Ejemplo:

python

mi_diccionario = {"nombre": "Juan", "edad": 30, "ciudad": "Madrid"}



#### Strings (str):

Aunque no son técnicamente contenedores, las cadenas de texto (str) en Python son secuencias inmutables de caracteres y se pueden acceder como una colección de caracteres.


Ejemplo:

python

mi_cadena = "Hola, mundo!"



Estos contenedores de datos en Python se utilizan para almacenar y organizar información de manera estructurada, permitiendo realizar diversas operaciones como agregar, eliminar, acceder y modificar elementos según las necesidades del programa. La elección del contenedor adecuado depende del tipo de datos que se esté manejando y de las operaciones que se deseen realizar sobre ellos.


2.4.1.-Variables

Explicación


Las variables en Python son etiquetas o nombres simbólicos que se utilizan para representar valores o datos almacenados en la memoria de un programa. Son como contenedores que guardan información y pueden ser referenciadas o modificadas a lo largo del código.


### Características de las Variables en Python:


#### Declaración de Variables:

En Python, no es necesario declarar explícitamente el tipo de variable antes de asignarle un valor. Simplemente se asigna un valor a un nombre de variable y Python deduce automáticamente el tipo de datos.


Ejemplo:

python

nombre = "Alice" # Se asigna el valor "Alice" a la variable nombre

edad = 25 # Se asigna el valor 25 a la variable edad



#### Asignación de Valores:

Se utiliza el operador de asignación (=) para asignar un valor a una variable.


python

x = 10 # Se asigna el valor 10 a la variable x



#### Convención de Nombres:

Las variables en Python siguen ciertas convenciones de nombres. Se recomienda utilizar nombres descriptivos, comenzando con una letra o un guion bajo (_). Pueden contener letras, números y guiones bajos, pero no pueden comenzar con un número.


Ejemplo:

python

mi_variable = 42 # Ejemplo de una variable con nombre descriptivo



#### Reasignación de Variables:

Se pueden reasignar valores a las variables en cualquier momento durante la ejecución del programa.


Ejemplo:

python

x = 5

x = x + 1 # x ahora tiene el valor 6 después de la reasignación



#### Tipos de Datos Dinámicos:

En Python, las variables son de tipo dinámico, lo que significa que pueden contener diferentes tipos de datos en diferentes momentos del programa.


python

variable = 10 # variable es de tipo entero

variable = "Hola" # variable ahora es una cadena de texto



Las variables en Python son fundamentales para almacenar y manipular datos en un programa. Proporcionan flexibilidad y facilidad de uso al permitir que los valores sean referenciados y modificados a lo largo del código, facilitando la creación de programas dinámicos y versátiles.


2.4.1.1.-Variables

Explicación



Ejercicio del curso:

Variables.py



/Fundamentos de Python/Estructuras de datos/Variables/Variables/Variables.py

1 edad = 45
2 print("Que sepas que mi edad es de: "+str(edad))





2.4.1.2.-Identificadores

Explicación



Ejercicio del curso:

Identificadores.py



/Fundamentos de Python/Estructuras de datos/Variables/Identificadores/Identificadores.py

1 edad = 45
2 print("Que sepas que mi edad es de: "+str(edad))
3 edad2 = 46
4 e2dad = 47
5 #1edad = 48
6 #mi edad = 49
7 mi_edad = 49
8 miedad = 49
9 miEdad= 49





2.4.1.3.-Constantes

Explicación



Ejercicio del curso:

constantes.py



/Fundamentos de Python/Estructuras de datos/Variables/Constantes/constantes.py

1 PI = 3.1416
2 print("El valor de PI es: "+str(PI))
3
4 PI = 4
5 print("El valor de PI es: "+str(PI))





2.4.1.4.-Abreviados

Explicación



Ejercicio del curso:

abreviados.py



/Fundamentos de Python/Estructuras de datos/Variables/Abreviados/abreviados.py

1 edad = 45
2 #edad++
3 print("Operador abreviado de incremento:")
4 edad += 1 #equivale a edad = edad + 1
5 print("Tu edad ahora es de: "+str(edad))
6
7 print("Operador abreviado de decremento:")
8 edad -= 1
9 print("Tu edad ahora es de: "+str(edad))
10
11 print("Operador abreviado de multiplicación:")
12 edad *= 2
13 print("Tu edad ahora es de: "+str(edad))
14
15 print("Operador abreviado de división:")
16 edad /= 2
17 print("Tu edad ahora es de: "+str(edad))





2.4.2.-Listas

Explicación


Las listas en Python son colecciones ordenadas y mutables de elementos, donde los elementos pueden ser de diferentes tipos de datos, como números, cadenas, booleanos, otras listas e incluso objetos más complejos. Las listas se definen utilizando corchetes [] y los elementos se separan por comas.


### Características de las Listas en Python:


#### Creación de una Lista:

Se pueden crear listas con elementos separados por comas y encerrados entre corchetes [].


Ejemplo:

python

mi_lista = [1, 2, 3, 4, 5] # Lista de números enteros



#### Acceso a Elementos:

Los elementos de una lista se acceden mediante índices (posiciones). Los índices comienzan en 0 para el primer elemento y se accede a ellos utilizando corchetes [].


Ejemplo:

python

mi_lista = [10, 20, 30, 40, 50]

print(mi_lista[0]) # Salida: 10 (primer elemento)

print(mi_lista[2]) # Salida: 30 (tercer elemento)



#### Modificación de Elementos:

Las listas son mutables, lo que significa que se pueden modificar después de su creación. Se puede cambiar, agregar o eliminar elementos de una lista.


Ejemplo:

python

mi_lista = [1, 2, 3]

mi_lista[1] = 10 # Modifica el segundo elemento a 10

mi_lista.append(4) # Agrega el número 4 al final de la lista

mi_lista.remove(3) # Elimina el número 3 de la lista



#### Funciones y Métodos de Listas:

Python ofrece una variedad de métodos y funciones incorporadas para trabajar con listas, como append(), insert(), remove(), pop(), extend(), index(), count(), sort(), reverse() y más.


Ejemplo:

python

mi_lista = [3, 1, 4, 2, 5]

mi_lista.sort() # Ordena la lista de forma ascendente

print(mi_lista) # Salida: [1, 2, 3, 4, 5]



#### Longitud de una Lista:

La función len() se utiliza para obtener la longitud (cantidad de elementos) de una lista.


Ejemplo:

python

mi_lista = [10, 20, 30, 40, 50]

longitud = len(mi_lista) # longitud será 5



Las listas son estructuras de datos versátiles y poderosas en Python que permiten almacenar y manipular colecciones de elementos de manera flexible. Son ampliamente utilizadas debido a su capacidad para almacenar diferentes tipos de datos y su facilidad de uso en la manipulación de información en programas.


2.4.2.1.-Listas

Explicación



Ejercicio del curso:

listas.py



/Fundamentos de Python/Estructuras de datos/Listas/Listas/listas.py

1 agenda = "Jose Vicente"
2 print("La agenda es: "+agenda)
3 agenda = "Juan"
4 print("La agenda es: "+agenda)





2.4.2.2.-Listas ahora si

Explicación



Ejercicio del curso:

listas ahora si.py



/Fundamentos de Python/Estructuras de datos/Listas/Listas ahora si/listas ahora si.py

1 agenda = []
2
3 #agenda[0] = "Jose Vicente"
4 agenda.append("Jose Vicente")
5 print("La agenda es: ")
6 print(agenda)
7 agenda.append("Juan")
8 print("La agenda es: ")
9 print(agenda)
10 agenda.append("Jorge")
11 print("La agenda es: ")
12 print(agenda)
13





2.4.2.3.-Pop

Explicación



Ejercicio del curso:

pop.py



/Fundamentos de Python/Estructuras de datos/Listas/Pop/pop.py

1 agenda = []
2
3 #agenda[0] = "Jose Vicente"
4 agenda.append("Jose Vicente")
5 print("La agenda es: ")
6 print(agenda)
7 agenda.append("Juan")
8 print("La agenda es: ")
9 print(agenda)
10 agenda.append("Jorge")
11 print("La agenda es: ")
12 print(agenda)
13 print("Ahora quito un elemento")
14 agenda.pop()
15 print(agenda)
16 print("Ahora quito el primer elemento")
17 agenda.pop(0)
18 print(agenda)
19





2.4.2.4.-Sobre escribir

Explicación



Ejercicio del curso:

Sobreescribir.py



/Fundamentos de Python/Estructuras de datos/Listas/Sobre escribir/Sobreescribir.py

1 agenda = []
2
3 #agenda[0] = "Jose Vicente"
4 agenda.append("Jose Vicente")
5 print("La agenda es: ")
6 print(agenda)
7 agenda.append("Juan")
8 print("La agenda es: ")
9 print(agenda)
10 agenda.append("Jorge")
11 print("La agenda es: ")
12 print(agenda)
13 print("Sobre escribo un elemento")
14 agenda[0] = "Julia"
15 print(agenda)





2.4.2.5.-Longitud de la lista

Explicación



Ejercicio del curso:

Longitud de la lista.py



/Fundamentos de Python/Estructuras de datos/Listas/Longitud de la lista/Longitud de la lista.py

1 agenda = []
2
3 #agenda[0] = "Jose Vicente"
4 agenda.append("Jose Vicente")
5 print("La agenda es: ")
6 print(agenda)
7 agenda.append("Juan")
8 print("La agenda es: ")
9 print(agenda)
10 agenda.append("Jorge")
11 print("La agenda es: ")
12 print(agenda)
13 print("Sobre escribo un elemento")
14 agenda[0] = "Julia"
15 print(agenda)
16 print("Longitud de la lista:")
17 print(len(agenda))





2.4.2.6.-Multidimensionales

Explicación



Ejercicio del curso:

Multidimensionales.py



/Fundamentos de Python/Estructuras de datos/Listas/Multidimensionales/Multidimensionales.py

1 agenda = []
2 agenda.append(["Jose Vicente","micorreo","1235"])
3 agenda.append(["Juan","micorreo","1235"])
4 agenda.append(["Julia","micorreo","1235"])
5 print(agenda)





2.4.3.-Tuplas

Explicación


Las tuplas en Python son estructuras de datos similares a las listas, pero a diferencia de estas, las tuplas son inmutables, lo que significa que una vez creadas, no pueden ser modificadas. Se definen utilizando paréntesis () y contienen una secuencia ordenada de elementos que pueden ser de diferentes tipos de datos.


### Características de las Tuplas en Python:


#### Creación de una Tupla:

Las tuplas se crean encerrando elementos entre paréntesis () y separándolos por comas.


Ejemplo:

python

mi_tupla = (1, 2, 3, 4, 5) # Tupla de números enteros



#### Acceso a Elementos:

Los elementos de una tupla se acceden utilizando índices (posiciones) al igual que en las listas, ya que las tuplas son estructuras indexadas.


Ejemplo:

python

mi_tupla = (10, 20, 30, 40, 50)

print(mi_tupla[0]) # Salida: 10 (primer elemento)

print(mi_tupla[2]) # Salida: 30 (tercer elemento)



#### Inmutabilidad:

Una vez creada, una tupla no puede ser modificada. Esto significa que no se pueden agregar, eliminar o cambiar elementos después de la creación de la tupla.


Ejemplo:

python

mi_tupla = (1, 2, 3)

mi_tupla[1] = 10 # Esto generará un error ya que las tuplas son inmutables



#### Utilidad de las Tuplas:

Las tuplas son útiles cuando se necesita una colección de elementos que no debe cambiar a lo largo del programa. También se utilizan para devolver múltiples valores desde una función.


Ejemplo:

python

def obtener_coordenadas():

x = 10

y = 20

return x, y


coordenadas = obtener_coordenadas()

print(coordenadas) # Salida: (10, 20)



#### Asignación de Tuplas:

Las tuplas pueden ser asignadas a variables individuales mediante desempaquetado de tuplas.


Ejemplo:

python

mi_tupla = (1, 2, 3)

a, b, c = mi_tupla # a será 1, b será 2 y c será 3



Las tuplas, al ser inmutables, son eficientes en términos de rendimiento y se utilizan cuando se necesita un conjunto de datos que no debe cambiar. Se usan para proteger los datos de ser modificados accidentalmente y también son útiles en situaciones donde la integridad de los datos es crítica.


2.4.3.1.-Tuplas

Ejercicio del curso:

tupla.py



/Fundamentos de Python/Estructuras de datos/Tuplas/Tuplas/tupla.py

1 lista = ["Jose Vicente",45,"info@josevicentecarratala.com"]
2 tupla = ("Jose Vicente",45,"info@josevicentecarratala.com")
3
4 lista.append("Jose Vicente")
5 #tupla.append("Jose Vicente")
6 print(lista)
7 print(tupla)





2.4.3.2.-Coordenadas

Ejercicio del curso:

coordenada.py



/Fundamentos de Python/Estructuras de datos/Tuplas/Coordenadas/coordenada.py

1 coordenada = [45,56,78]
2 print(coordenada)
3 coordenadatupla = (45,56,78)
4 print(coordenadatupla)
5 print("Lo convierto en una lista")
6 listatemporal = list(coordenadatupla)
7 listatemporal[0] = 0
8 print(listatemporal)
9 nuevatupla = tuple(listatemporal)
10 print(nuevatupla)





2.4.3.3.-En linea

Ejercicio del curso:

enlinea.py



/Fundamentos de Python/Estructuras de datos/Tuplas/En linea/enlinea.py

1 coordenada = [45,56,78]
2 print(coordenada)
3 coordenadatupla = (45,56,78)
4 print(coordenadatupla)
5 print("Lo convierto en una lista")
6 listatemporal = list(coordenadatupla)
7 listatemporal[0] = 0
8 print(listatemporal)
9 nuevatupla = tuple(listatemporal)
10 print(nuevatupla)





2.4.4.-Diccionarios

Explicación


Los diccionarios en Python son estructuras de datos que almacenan pares de clave-valor, permitiendo asociar un valor (dato) a una clave (identificador único). Se definen mediante llaves {} y contienen elementos en pares clave-valor separados por comas, donde cada clave debe ser única y los valores pueden ser de cualquier tipo de dato.


### Características de los Diccionarios en Python:


#### Creación de un Diccionario:

Los diccionarios se crean utilizando llaves {} y especificando pares clave-valor separados por comas.


Ejemplo:

python

mi_diccionario = {"nombre": "Alice", "edad": 30, "ciudad": "Madrid"}



#### Acceso a Elementos por Clave:

Los elementos en un diccionario se acceden utilizando las claves, no los índices, ya que los diccionarios no están ordenados.


Ejemplo:

python

mi_diccionario = {"nombre": "Alice", "edad": 30, "ciudad": "Madrid"}

print(mi_diccionario["edad"]) # Salida: 30 (valor asociado a la clave "edad")



#### Modificación de Valores:

Los valores de un diccionario pueden ser modificados a través de su clave.


Ejemplo:

python

mi_diccionario = {"nombre": "Alice", "edad": 30}

mi_diccionario["edad"] = 25 # Modifica el valor asociado a la clave "edad"



#### Agregar y Eliminar Elementos:

Se pueden agregar nuevos elementos o eliminar elementos existentes en un diccionario utilizando métodos como update(), pop(), del, entre otros.


Ejemplo:

python

mi_diccionario = {"nombre": "Alice", "edad": 30}

mi_diccionario["ciudad"] = "Madrid" # Agrega un nuevo elemento

del mi_diccionario["edad"] # Elimina el elemento con la clave "edad"



#### Métodos y Funciones de Diccionarios:

Python ofrece una serie de métodos y funciones incorporadas para trabajar con diccionarios, como keys(), values(), items(), update(), pop(), clear(), entre otros.


Ejemplo:

python

mi_diccionario = {"nombre": "Alice", "edad": 30, "ciudad": "Madrid"}

claves = mi_diccionario.keys() # Obtiene las claves del diccionario

valores = mi_diccionario.values() # Obtiene los valores del diccionario



Los diccionarios son útiles cuando se necesita asociar datos a claves únicas, como en el caso de guardar información relacionada y acceder a ella de manera eficiente mediante identificadores únicos. Su flexibilidad y eficiencia para la búsqueda de valores a través de claves los hacen fundamentales en el desarrollo de aplicaciones en Python.


2.4.4.1.-Diccionario

Explicación



Ejercicio del curso:

diccionario.py



/Fundamentos de Python/Estructuras de datos/Diccionarios/Diccionario/diccionario.py

1 diccionario = {
2 "nombre":"Jose Vicente",
3 "email":"info@josevicentecarratala.com",
4 "telefono":"12345"
5 }
6 print(diccionario)
7 print(diccionario['nombre'])





2.4.4.2.-Diccionario con lista

Explicación



Ejercicio del curso:

diccionarioconlista.py



/Fundamentos de Python/Estructuras de datos/Diccionarios/Diccionario con lista/diccionarioconlista.py

1 agenda = []
2 agenda.append({
3 "nombre":"Jose Vicente",
4 "email":"info@josevicentecarratala.com",
5 "telefono":"12345"
6 })
7 agenda.append({
8 "nombre":"Juan",
9 "email":"info@juan.com",
10 "telefono":"12345"
11 })
12 agenda.append({
13 "nombre":"Jorge",
14 "email":"info@jorge.com",
15 "telefono":"12345"
16 })
17 print(agenda)





2.5.-Estructuras de control del flujo de la ejecución

Explicación


Las estructuras de control en Python son bloques de código que permiten controlar el flujo de ejecución del programa, permitiendo tomar decisiones, repetir acciones o ejecutar bloques de código en función de ciertas condiciones.


### Estructuras de Control Comunes en Python:


#### Condicionales (if, elif, else):

Las estructuras condicionales permiten ejecutar bloques de código si se cumple una condición específica. Se utilizan las palabras clave if, elif (opcional) y else (opcional).


Ejemplo:

python

x = 10

if x > 5:

print("x es mayor que 5")

elif x == 5:

print("x es igual a 5")

else:

print("x es menor que 5")



#### Bucles (for, while):

Los bucles permiten ejecutar repetidamente un bloque de código mientras se cumpla una condición (while) o sobre una secuencia de elementos (for).


##### Bucle while:

python

contador = 0

while contador < 5:

print(contador)

contador += 1



##### Bucle for:

python

mi_lista = [1, 2, 3, 4, 5]

for elemento in mi_lista:

print(elemento)



#### Control de Bucles (break, continue):

Las palabras clave break y continue se utilizan para controlar el flujo dentro de bucles.


- break: Sale del bucle por completo cuando se cumple una condición.

- continue: Salta a la siguiente iteración del bucle, omitiendo el resto del código dentro del bucle.


Ejemplo:

python

for i in range(10):

if i == 3:

continue # Salta la iteración cuando i es igual a 3

if i == 7:

break # Sale del bucle cuando i es igual a 7

print(i)



#### Comprehension de Listas:

Una forma compacta de crear listas basadas en iteraciones o condiciones.


Ejemplo:

python

pares = [x for x in range(10) if x % 2 == 0] # Lista de números pares del 0 al 9



#### Manejo de Excepciones (try, except, finally):

Las estructuras try, except y finally se utilizan para manejar excepciones y errores durante la ejecución del código.


Ejemplo:

python

try:

resultado = 10 / 0

except ZeroDivisionError:

print("Error: División por cero")

finally:

print("Bloque finally siempre se ejecuta")



Estas estructuras de control son fundamentales en Python para controlar el flujo del programa, permitiendo tomar decisiones, repetir acciones y manejar excepciones, lo que proporciona una mayor flexibilidad y control en el desarrollo de aplicaciones.


2.5.1.-Estructuras de bucle

Explicación


En Python, existen principalmente dos estructuras de bucle: for y while. Estos bucles permiten repetir la ejecución de un bloque de código según ciertas condiciones o hasta que una condición específica se cumpla.


### Bucle for:


El bucle for se utiliza para iterar sobre una secuencia (como listas, tuplas, diccionarios o cadenas de texto) o un iterador.


#### Sintaxis del bucle for:

python

for elemento in secuencia:

# Código a ejecutar para cada elemento



#### Ejemplo de bucle for con una lista:

python

mi_lista = [1, 2, 3, 4, 5]

for elemento in mi_lista:

print(elemento)



### Bucle while:


El bucle while se utiliza para ejecutar un bloque de código repetidamente mientras una condición sea verdadera.


#### Sintaxis del bucle while:

python

while condicion:

# Código a ejecutar mientras la condición sea verdadera



#### Ejemplo de bucle while:

python

contador = 0

while contador < 5:

print(contador)

contador += 1



### Palabras Clave break y continue:


- break: Se utiliza para salir completamente del bucle cuando se cumple una condición específica.

- continue: Se utiliza para saltar a la siguiente iteración del bucle, omitiendo el resto del código dentro del bucle.


#### Ejemplo de break y continue en un bucle:

python

contador = 0

while contador < 5:

contador += 1

if contador == 3:

continue # Salta la iteración cuando contador es igual a 3

if contador == 4:

break # Sale del bucle cuando contador es igual a 4

print(contador)



Estas estructuras de bucle (for y while) son fundamentales en Python para realizar tareas repetitivas y procesar secuencias de datos. El bucle for se usa comúnmente para iterar sobre elementos conocidos, mientras que el bucle while es útil cuando la cantidad de iteraciones no está determinada previamente y depende de una condición. Las palabras clave break y continue brindan un mayor control sobre la ejecución de los bucles.


2.5.1.1.-For

Explicación


Las estructuras condicionales en Python permiten controlar el flujo del programa según el cumplimiento o no de ciertas condiciones. Las más comunes son if, elif (opcional) y else (opcional), y se utilizan para ejecutar diferentes bloques de código en función del resultado de expresiones booleanas.


### Estructuras Condicionales en Python:


#### Estructura if:


La estructura if se utiliza para ejecutar un bloque de código si una condición es verdadera.


#### Sintaxis del if:

python

if condicion:

# Bloque de código si la condición es verdadera



#### Ejemplo de estructura if:

python

x = 10

if x > 5:

print("x es mayor que 5")



#### Estructura if, elif, else:


- elif se utiliza para verificar condiciones adicionales si la condición del if es falsa.

- else se ejecuta si ninguna de las condiciones anteriores es verdadera.


#### Sintaxis del if, elif, else:

python

if condicion_1:

# Bloque de código si condicion_1 es verdadera

elif condicion_2:

# Bloque de código si condicion_2 es verdadera

else:

# Bloque de código si ninguna condición anterior es verdadera



#### Ejemplo de estructura if, elif, else:

python

x = 10

if x > 15:

print("x es mayor que 15")

elif x < 5:

print("x es menor que 5")

else:

print("x está entre 5 y 15")



### Operador Ternario (if-else en una línea):


Python permite realizar estructuras condicionales en una línea, conocidas como operador ternario.


#### Sintaxis del operador ternario:

python

resultado_si_verdadero if condicion else resultado_si_falso



#### Ejemplo del operador ternario:

python

x = 10

resultado = "x es mayor que 5" if x > 5 else "x es menor o igual a 5"

print(resultado)



Las estructuras condicionales son fundamentales en Python para tomar decisiones basadas en el resultado de expresiones booleanas. Permiten controlar el flujo del programa y ejecutar diferentes bloques de código según las condiciones establecidas.


Ejercicio del curso:

for.py



/Fundamentos de Python/Estructuras de control del flujo de la ejecución/Estructuras de bucle/For/for.py

1 for dia in range(1,31):
2 print("hoy es el dia "+str(dia)+" del mes")
3
4 print("y esto está ya fuera del bucle")





2.5.1.2.-For con incremento

Explicación



Ejercicio del curso:

for con incremento.py



/Fundamentos de Python/Estructuras de control del flujo de la ejecución/Estructuras de bucle/For con incremento/for con incremento.py

1 for dia in range(1,31,2):
2 print("hoy es el dia "+str(dia)+" del mes")
3
4 print("y esto está ya fuera del bucle")





2.5.1.3.-While

Explicación


El bucle while en Python se utiliza para ejecutar un bloque de código repetidamente mientras una condición dada sea verdadera. A diferencia del bucle for, que se ejecuta por un número predefinido de veces, el bucle while se ejecuta mientras una condición específica sea cierta.


### Sintaxis del Bucle while:


python

while condicion:

# Bloque de código a ejecutar mientras la condición sea verdadera



- condicion: Expresión booleana que se evalúa en cada iteración del bucle.

- El bloque de código se ejecuta mientras la condicion sea verdadera.


### Ejemplo de Uso del Bucle while:


#### Ejemplo básico:

python

contador = 0

while contador < 5:

print(contador)

contador += 1


Este bucle while imprimirá los números del 0 al 4 ya que la condición contador < 5 se cumple.


#### Bucle infinito controlado por una condición:

python

x = 10

while True:

if x == 0:

break # Sale del bucle si x es igual a 0

print(x)

x -= 1


Este bucle while imprime los números desde x hasta 0, y luego sale del bucle cuando x es igual a 0 utilizando la instrucción break.


#### Bucle while con else:

Al igual que con el bucle for, se puede utilizar un bloque else después del bucle while. Este bloque se ejecutará cuando el bucle se complete sin interrupciones.


python

contador = 0

while contador < 3:

print("Iteración:", contador)

contador += 1

else:

print("Bucle completado sin interrupciones")



Es importante tener cuidado al utilizar el bucle while para evitar bucles infinitos involuntarios si la condición nunca se vuelve falsa, lo que podría hacer que el programa se ejecute indefinidamente.


Ejercicio del curso:

while.py



/Fundamentos de Python/Estructuras de control del flujo de la ejecución/Estructuras de bucle/While/while.py

1 dia = 1
2 while dia < 31:
3 print("hoy es el dia "+str(dia)+" del mes")





2.5.1.4.-While controlado

Explicación



Ejercicio del curso:

while controlado.py



/Fundamentos de Python/Estructuras de control del flujo de la ejecución/Estructuras de bucle/While controlado/while controlado.py

1 dia = 1
2 while dia < 31:
3 print("hoy es el dia "+str(dia)+" del mes")
4 dia += 1





2.5.1.5.-do while

Explicación


En Python, no existe una estructura de control específica llamada "do-while" como se encuentra en algunos otros lenguajes de programación. Sin embargo, es posible simular su comportamiento utilizando un bucle while junto con una condición inicial o un enfoque alternativo.


La estructura típica de un bucle "do-while" en otros lenguajes de programación es que primero se ejecuta el bloque de código al menos una vez y luego se evalúa la condición para determinar si se debe seguir ejecutando el bucle.


En Python, se puede lograr este comportamiento al utilizar un bucle while junto con una variable booleana de control. El bloque de código se ejecuta al menos una vez, y luego se verifica la condición para decidir si se continúa ejecutando.


### Simulando un bucle "do-while" en Python:


python

# Ejecutar el bloque de código al menos una vez

# y luego verificar la condición para continuar


condicion = True # Condición inicial verdadera para ejecutar el bloque al menos una vez


while condicion:

# Bloque de código a ejecutar

print("Este bloque se ejecuta al menos una vez")


# Verificar la condición para determinar si continuar o no

# En este ejemplo, la condición se establece por algún criterio

# Al finalizar el bloque, y podría modificarse dentro del bucle

condicion = False # Establecer la condición como Falsa para salir del bucle



Esencialmente, al establecer la condición inicial como verdadera y luego modificarla dentro del bloque de código, se puede controlar la ejecución del bucle para garantizar que se ejecute al menos una vez antes de verificar la condición de salida.


Aunque no existe una estructura de control "do-while" específica en Python, esta técnica permite emular su comportamiento al garantizar que el bloque de código se ejecute al menos una vez antes de evaluar la condición de salida.


Ejercicio del curso:

do while.py



/Fundamentos de Python/Estructuras de control del flujo de la ejecución/Estructuras de bucle/do while/do while.py

1 dia = 1
2 do:
3 prin
4 while dia < 31:
5 print("hoy es el dia "+str(dia)+" del mes")
6 dia += 1





2.5.2.-Estructuras condicionales

Explicación


Las estructuras condicionales en Python permiten controlar el flujo del programa según el cumplimiento o no de ciertas condiciones. Las más comunes son if, elif (opcional) y else (opcional), y se utilizan para ejecutar diferentes bloques de código en función del resultado de expresiones booleanas.


### Estructuras Condicionales en Python:


#### Estructura if:


La estructura if se utiliza para ejecutar un bloque de código si una condición es verdadera.


#### Sintaxis del if:

python

if condicion:

# Bloque de código si la condición es verdadera



#### Ejemplo de estructura if:

python

x = 10

if x > 5:

print("x es mayor que 5")



#### Estructura if, elif, else:


- elif se utiliza para verificar condiciones adicionales si la condición del if es falsa.

- else se ejecuta si ninguna de las condiciones anteriores es verdadera.


#### Sintaxis del if, elif, else:

python

if condicion_1:

# Bloque de código si condicion_1 es verdadera

elif condicion_2:

# Bloque de código si condicion_2 es verdadera

else:

# Bloque de código si ninguna condición anterior es verdadera



#### Ejemplo de estructura if, elif, else:

python

x = 10

if x > 15:

print("x es mayor que 15")

elif x < 5:

print("x es menor que 5")

else:

print("x está entre 5 y 15")



### Operador Ternario (if-else en una línea):


Python permite realizar estructuras condicionales en una línea, conocidas como operador ternario.


#### Sintaxis del operador ternario:

python

resultado_si_verdadero if condicion else resultado_si_falso



#### Ejemplo del operador ternario:

python

x = 10

resultado = "x es mayor que 5" if x > 5 else "x es menor o igual a 5"

print(resultado)



Las estructuras condicionales son fundamentales en Python para tomar decisiones basadas en el resultado de expresiones booleanas. Permiten controlar el flujo del programa y ejecutar diferentes bloques de código según las condiciones establecidas.


2.5.2.1.-If

Explicación


La estructura condicional if en Python se utiliza para tomar decisiones basadas en el resultado de una expresión booleana. Permite ejecutar bloques de código si una condición es verdadera y, opcionalmente, ejecutar bloques alternativos si la condición es falsa.


### Sintaxis de la Estructura if:


python

if condicion:

# Bloque de código a ejecutar si la condición es verdadera



- condicion: Una expresión booleana que se evalúa como verdadera (True) o falsa (False).


### Ejemplo de Uso del if:


#### Ejemplo básico:

python

x = 10

if x > 5:

print("x es mayor que 5")



#### Uso de else:

La palabra clave else se utiliza para ejecutar un bloque de código cuando la condición del if es falsa.


python

x = 3

if x > 5:

print("x es mayor que 5")

else:

print("x no es mayor que 5")



#### Uso de elif (else if):

La palabra clave elif se utiliza para verificar múltiples condiciones secundarias si la condición del if es falsa.


python

x = 5

if x > 5:

print("x es mayor que 5")

elif x == 5:

print("x es igual a 5")

else:

print("x es menor que 5")



#### Estructura de if anidados:

Los bloques if, elif y else también se pueden anidar dentro de otros bloques if para manejar múltiples condiciones.


python

x = 10

if x > 5:

if x < 15:

print("x está entre 5 y 15")

else:

print("x es mayor que 15")

else:

print("x es menor o igual que 5")



La estructura condicional if es fundamental en Python para tomar decisiones basadas en condiciones. Permite controlar el flujo del programa ejecutando diferentes bloques de código según el resultado de las expresiones booleanas evaluadas.


Ejercicio del curso:

if.py



/Fundamentos de Python/Estructuras de control del flujo de la ejecución/Estructuras condicionales/If/if.py

1 edad = 45
2 if edad < 30:
3 print("eres un joven")





Ejercicio del curso:



/Fundamentos de Python/Estructuras de control del flujo de la ejecución/Estructuras condicionales/If/001.if.py

1 dia = 1
2 do:
3 prin
4 while dia < 31:
5 print("hoy es el dia "+str(dia)+" del mes")
6 dia += 1





2.5.2.2.-Else

Explicación


La palabra clave else en Python se utiliza junto con la estructura condicional if para ejecutar un bloque de código cuando la condición evaluada en el if es falsa. Es opcional y siempre sigue inmediatamente después de un bloque if o elif y antes de cualquier otro bloque condicional.


### Uso de else con la estructura if:


python

if condicion:

# Bloque de código si la condición es verdadera

else:

# Bloque de código si la condición es falsa



### Ejemplo de Uso del else:


#### Ejemplo básico:

python

x = 10

if x > 15:

print("x es mayor que 15")

else:

print("x no es mayor que 15")



#### Uso de else con if y elif (else if):

La palabra clave else también se puede combinar con elif para manejar múltiples condiciones.


python

x = 5

if x > 10:

print("x es mayor que 10")

elif x == 10:

print("x es igual a 10")

else:

print("x es menor que 10")



#### else sin if:

La estructura else siempre debe seguir inmediatamente después de un bloque if o elif y antes de cualquier otro bloque condicional. No puede utilizarse sola sin un bloque if previo.


python

# Esto generará un error de sintaxis

else:

print("Esto no puede estar solo, necesita un bloque if o elif previo")



La palabra clave else es fundamental en Python para manejar los casos en los que la condición evaluada en el if o elif no es verdadera, permitiendo ejecutar un bloque de código alternativo.


Ejercicio del curso:

else.py



/Fundamentos de Python/Estructuras de control del flujo de la ejecución/Estructuras condicionales/Else/else.py

1 edad = 45
2 if edad < 30:
3 print("eres un joven")
4 else:
5 print("ya no eres un joven")





2.5.2.3.-Anidar

Explicación


La anidación de estructuras if, elif y else en Python se refiere a colocar una estructura condicional dentro de otra, permitiendo verificar múltiples condiciones de manera secuencial y jerárquica.


### Ejemplo de Anidación de Estructuras if, elif y else:


python

x = 10

if x > 5:

print("x es mayor que 5")

if x < 15:

print("x está entre 5 y 15")

else:

print("x es mayor que 15")

else:

print("x es menor o igual que 5")



En este ejemplo, se evalúa inicialmente si x es mayor que 5 con el primer if. Si esa condición es verdadera, se ejecuta el primer bloque de código y luego se anida un segundo if dentro de ese bloque para verificar si x es menor que 15. Si la segunda condición también es verdadera, se ejecuta el segundo bloque de código anidado. En caso contrario, se ejecuta el bloque de código else del segundo if.


### Consideraciones sobre la Anidación de Estructuras if, elif y else:


-Jerarquía y legibilidad: La anidación excesiva puede dificultar la legibilidad del código. Es esencial mantener un equilibrio para facilitar la comprensión del flujo lógico.


-Indentación: Python utiliza la indentación para delimitar los bloques de código. Es crucial mantener la indentación correcta para cada nivel anidado, ya que define qué líneas pertenecen a qué bloques condicionales.


-Lógica de los condicionales: La lógica detrás de los condicionales anidados debe ser clara y precisa para evitar confusiones en el comportamiento del programa.


### Ejemplo de Anidación con elif:


python

edad = 25

if edad < 18:

print("Eres menor de edad")

elif edad >= 18:

print("Eres mayor de edad")

if edad >= 65:

print("Eres elegible para jubilación")

else:

print("Todavía no eres elegible para jubilación")



En este caso, el elif se usa para comprobar si edad es mayor o igual a 18. Si es así, se ejecuta el bloque de código correspondiente. Dentro de este bloque, se anida otro if-else para verificar si la persona es elegible para la jubilación.


La anidación de estructuras if, elif y else proporciona flexibilidad para manejar múltiples condiciones y situaciones dentro del flujo de un programa en Python. Sin embargo, es importante mantener una estructura clara y comprensible para facilitar la lectura y el mantenimiento del código.


Ejercicio del curso:

anidar.py



/Fundamentos de Python/Estructuras de control del flujo de la ejecución/Estructuras condicionales/Anidar/anidar.py

1 edad = 45
2 if edad < 30:
3 if edad < 15:
4 print("eres un joven")
5 else:
6 print("eres un joven")
7 else:
8 if edad < 60:
9 print("ya no eres un joven")
10 else:
11 print("decididamente ya no eres un joven")





2.5.2.4.-Elif

Explicación


La palabra clave elif en Python se utiliza como una abreviatura de "else if" y se utiliza para evaluar múltiples condiciones después de un bloque if. Permite verificar condiciones adicionales si la condición del if anterior resulta ser falsa.


### Sintaxis de la Estructura elif:


python

if condicion_1:

# Bloque de código si la condición_1 es verdadera

elif condicion_2:

# Bloque de código si la condicion_2 es verdadera (si condicion_1 es falsa)

else:

# Bloque de código si ninguna condición anterior es verdadera



- condicion_1, condicion_2, etc.: Expresiones booleanas que se evalúan como verdaderas (True) o falsas (False).


### Ejemplo de Uso de elif:


#### Ejemplo Básico:

python

x = 10

if x > 15:

print("x es mayor que 15")

elif x == 10:

print("x es igual a 10")

else:

print("x no es mayor que 15 ni igual a 10")



En este ejemplo, si la condición del if no se cumple (es decir, x > 15 es falso), se evalúa la siguiente condición utilizando elif. Si x es igual a 10, se ejecuta el bloque de código correspondiente al elif. Si ninguna de las condiciones anteriores es verdadera, se ejecuta el bloque else.


### Múltiples elif:


python

numero = 7

if numero == 5:

print("El número es igual a 5")

elif numero == 7:

print("El número es igual a 7")

elif numero == 10:

print("El número es igual a 10")

else:

print("El número no es 5, 7 ni 10")



En este caso, se evalúa secuencialmente cada elif después del if. Si alguna de las condiciones elif es verdadera, se ejecutará el bloque de código correspondiente a esa condición y no se evaluarán las condiciones restantes elif. Si ninguna condición es verdadera, se ejecuta el bloque else.


La estructura elif es útil cuando se necesitan verificar múltiples condiciones secuencialmente después de un bloque if y se utiliza para proporcionar una lógica de ramificación más compleja en el código.


Ejercicio del curso:

elif.py



/Fundamentos de Python/Estructuras de control del flujo de la ejecución/Estructuras condicionales/Elif/elif.py

1 diadelasemana = "martes"
2
3 if diadelasemana == "lunes":
4 print("Hoy es el peor dia de la semana")
5 elif diadelasemana == "martes":
6 print("Hoy es el segundo peor día de la semana")
7 elif diadelasemana == "miércoles":
8 print("Ya estamos a mitad de semana")
9 elif diadelasemana == "jueves":
10 print("Ya queda poco para el fin de semana")
11 elif diadelasemana == "viernes":
12 print("Por fin es viernes")
13 elif diadelasemana == "sabado":
14 print("El mejor día de la semana")
15 elif diadelasemana == "domingo":
16 print("parece mentira que mañana ya sea lunes")
17 else:
18 print("Lo que has escrito no es un día")
19





2.6.-Funciones

Explicación


Las funciones en Python son bloques de código reutilizables que realizan una tarea específica cuando son llamadas. Permiten organizar y estructurar el código al dividir tareas en partes más pequeñas y modulares, lo que facilita el mantenimiento y la reutilización del código.


### Sintaxis de una Función en Python:


python

def nombre_de_la_funcion(parametros):

"""

Documentación de la función (docstring)

"""

# Cuerpo de la función

# Realiza alguna tarea utilizando los parámetros

# Puede incluir múltiples líneas de código


return valor_de_retorno # Opcional: devuelve un valor



- def: Palabra clave que indica el comienzo de la definición de una función.

- nombre_de_la_funcion: Nombre dado a la función para identificarla y llamarla posteriormente.

- parametros: Parámetros que la función puede recibir (opcional).

- """Documentación de la función""": Docstring que describe la funcionalidad de la función (opcional pero recomendado para documentar la función).

- return: Palabra clave utilizada para devolver un resultado de la función (opcional).


### Ejemplo de una Función Simple:


python

def saludar(nombre):

"""Esta función saluda al usuario."""

mensaje = f"Hola, {nombre}!"

return mensaje


# Llamando a la función

resultado = saludar("Juan")

print(resultado) # Salida: Hola, Juan!



### Parámetros de una Función:


Las funciones pueden recibir cero o más parámetros, que son valores que se pasan a la función para realizar operaciones con ellos.


### Valores de Retorno:


Las funciones pueden devolver un valor utilizando la palabra clave return. Si se omite, la función devuelve None por defecto.


### Ventajas de las Funciones:


-Reutilización de código: Permite escribir una vez y utilizar en múltiples ocasiones.

-Modularidad: Divide tareas en partes más pequeñas y manejables.

-Facilita la lectura y mantenimiento del código: Ayuda a comprender y organizar mejor el flujo del programa.


### Ejemplo con una Función sin valor de retorno:


python

def imprimir_mensaje():

"""Esta función imprime un mensaje."""

print("Este es un mensaje de ejemplo.")


# Llamando a la función

imprimir_mensaje() # Salida: Este es un mensaje de ejemplo.



Las funciones son fundamentales en Python para organizar y estructurar el código, facilitando su reutilización y mantenimiento.


2.6.1.-Declaracion

Explicación


La declaración de funciones en Python implica definir bloques de código reutilizables que realizan una tarea específica cuando son llamados. Para declarar una función, se utiliza la palabra clave def, seguida por el nombre de la función y, opcionalmente, los parámetros que puede recibir.


### Sintaxis de la Declaración de Funciones:


python

def nombre_de_la_funcion(parametros):

"""

Documentación de la función (docstring)

"""

# Cuerpo de la función

# Realiza alguna tarea utilizando los parámetros

# Puede incluir múltiples líneas de código


return valor_de_retorno # Opcional: devuelve un valor



- def: Palabra clave que indica el comienzo de la definición de una función.

- nombre_de_la_funcion: Nombre dado a la función para identificarla y llamarla posteriormente.

- parametros: Parámetros que la función puede recibir (opcional).

- """Documentación de la función""": Docstring que describe la funcionalidad de la función (opcional pero recomendado para documentar la función).

- return: Palabra clave utilizada para devolver un resultado de la función (opcional).


### Ejemplo de Declaración de una Función:


python

def saludar(nombre):

"""Esta función saluda al usuario."""

mensaje = f"Hola, {nombre}!"

return mensaje


# Llamando a la función

resultado = saludar("María")

print(resultado) # Salida: Hola, María!



En este ejemplo, se declara una función llamada saludar que toma un parámetro nombre. La función concatena el nombre recibido con un saludo y devuelve este mensaje.


### Docstrings en las Funciones:


Los docstrings son cadenas de documentación que se utilizan para describir el propósito y el funcionamiento de una función. Se colocan al inicio de la definición de la función, entre triple comillas ("""), y se utilizan para proporcionar información sobre cómo utilizar la función.


### Ejemplo de Función con Docstring:


python

def multiplicar(a, b):

"""

Esta función multiplica dos números.


Parámetros:

a -- Primer número

b -- Segundo número


Retorna:

El resultado de la multiplicación de a y b.

"""

return a * b


# Llamando a la función

resultado = multiplicar(3, 5)

print(resultado) # Salida: 15



Los docstrings son útiles para documentar el propósito, los parámetros y el valor de retorno de una función, lo que facilita su comprensión y uso para otros programadores.


Ejercicio del curso:

declaracion.py



/Fundamentos de Python/Funciones/Declaracion/declaracion.py

1 def saluda():
2 print("Hola Jose Vicente yo te saludo")





2.6.2.-Uso de la función

Explicación


El uso de una función en Python implica llamarla dentro del código principal para ejecutar el bloque de código definido dentro de esa función. Al llamar una función, se ejecuta el código que está dentro de ella, y opcionalmente se pueden pasar valores como argumentos si la función los espera.


### Ejemplo de Uso de una Función:


Supongamos que tenemos una función llamada suma que toma dos números como parámetros y devuelve la suma de esos números.


python

def suma(a, b):

"""Esta función suma dos números."""

resultado = a + b

return resultado


# Llamando a la función y guardando el resultado en una variable

resultado_suma = suma(5, 7)


# Imprimiendo el resultado

print("El resultado de la suma es:", resultado_suma) # Salida: El resultado de la suma es: 12



En este ejemplo:


- La función suma toma dos parámetros a y b.

- Dentro de la función, se calcula la suma de a y b.

- Se devuelve el resultado de la suma.

- Al llamar la función suma(5, 7), se suman los números 5 y 7, y el resultado (12) se guarda en la variable resultado_suma.

- Luego se imprime el resultado de la suma.


### Uso de una Función sin Valor de Retorno:


Algunas funciones realizan una tarea sin devolver un valor específico utilizando return. En este caso, la función simplemente realiza una operación pero no devuelve un resultado explícito.


python

def saludar(nombre):

"""Esta función imprime un saludo."""

print("¡Hola,", nombre, "!")


# Llamando a la función

saludar("Ana") # Salida: ¡Hola, Ana !



En este ejemplo, la función saludar toma un nombre como parámetro y simplemente imprime un saludo en la consola sin devolver ningún valor específico.


El uso de funciones permite modularizar el código y reutilizar tareas específicas en diferentes partes del programa, lo que mejora la legibilidad, el mantenimiento y la organización del código.


Ejercicio del curso:

uso de la funcion.py



/Fundamentos de Python/Funciones/Uso de la función/uso de la funcion.py

1 def saluda():
2 print("Hola Jose Vicente yo te saludo")
3
4 saluda()





2.6.3.-Múltiples funciones

Explicación



Ejercicio del curso:

multiples funciones.py



/Fundamentos de Python/Funciones/Múltiples funciones/multiples funciones.py

1 def saluda():
2 print("Hola Jose Vicente yo te saludo")
3
4 def saludaJuan():
5 print("Hola Juan yo te saludo")
6
7 saluda()
8 saludaJuan()





2.6.4.-Parámetros de la función

Explicación


Los parámetros en las funciones de Python son variables que se utilizan para pasar datos a la función. Permiten que una función acepte valores y realice operaciones en base a esos valores.


### Sintaxis de los Parámetros en Funciones:


python

def nombre_de_la_funcion(parametro1, parametro2, ...):

# Cuerpo de la función

# Utiliza los parámetros para realizar operaciones



- parametro1, parametro2, etc.: Son nombres de variables que actúan como contenedores para los valores que se pasarán a la función cuando se llame.


### Tipos de Parámetros en Funciones:


#### Parámetros Posicionales:


Son parámetros que se pasan a la función en el mismo orden en que se definen. El número de argumentos y su posición deben coincidir con los parámetros de la función.


python

def sumar(a, b):

return a + b


resultado = sumar(5, 3) # 5 se asigna a 'a', 3 se asigna a 'b'



#### Parámetros con Valores por Defecto:


Se pueden asignar valores predeterminados a los parámetros, lo que les permite actuar como opcionales si no se proporcionan valores al llamar la función.


python

def saludar(nombre="Usuario"):

return f"Hola, {nombre}!"


mensaje = saludar() # Se asigna "Usuario" a 'nombre' por defecto



#### Parámetros con Nombre (Keyword Arguments):


Se pueden pasar argumentos a una función por nombre, lo que permite cambiar el orden de los argumentos al llamar la función.


python

def presentar(nombre, edad):

return f"Mi nombre es {nombre} y tengo {edad} años."


mensaje = presentar(edad=30, nombre="Ana") # Orden alterado con argumentos por nombre



### Número Variable de Argumentos:


Python permite definir funciones que aceptan un número variable de argumentos utilizando *args y kwargs.


- *args: Permite pasar un número variable de argumentos posicionales.

- kwargs: Permite pasar un número variable de argumentos con nombre (keyword arguments).


### Ejemplo de Uso de *args ykwargs:


python

def funcion_variable(*args,kwargs):

print("Argumentos posicionales:", args)

print("Argumentos con nombre:", kwargs)


funcion_variable(1, 2, 3, nombre="Ana", edad=30)



Los parámetros en las funciones de Python brindan flexibilidad para trabajar con diferentes tipos de datos y permiten crear funciones más versátiles que pueden aceptar diferentes argumentos según sea necesario.


Ejercicio del curso:

parametros.py



/Fundamentos de Python/Funciones/Parámetros de la función/parametros.py

1 def saluda(nombre):
2 print("Hola "+nombre+" yo te saludo")
3
4 saluda("Jose Vicente")
5 saluda("Juan")
6 saluda("Jorge")
7 saluda("Julia")





2.6.5.-Múltiples parámetros

Explicación


En Python, las funciones pueden aceptar múltiples parámetros para manejar diferentes tipos de datos o realizar diversas operaciones. Esto se logra definiendo los parámetros separados por comas dentro de los paréntesis de la declaración de la función.


### Sintaxis para Múltiples Parámetros en Funciones:


python

def nombre_de_la_funcion(parametro1, parametro2, parametro3, ...):

# Cuerpo de la función

# Realiza operaciones utilizando los parámetros



- parametro1, parametro2, parametro3, etc.: Son nombres de variables que actúan como parámetros y pueden ser utilizados dentro de la función para realizar operaciones.


### Ejemplo de Función con Múltiples Parámetros:


python

def calcular_promedio(a, b, c):

"""Esta función calcula el promedio de tres números."""

promedio = (a + b + c) / 3

return promedio


# Llamando a la función con múltiples argumentos

resultado = calcular_promedio(5, 10, 15)

print("El promedio es:", resultado) # Salida: El promedio es: 10.0



En este ejemplo, la función calcular_promedio toma tres parámetros a, b y c, y luego calcula el promedio de estos tres números. Al llamar la función calcular_promedio(5, 10, 15), los valores 5, 10 y 15 se asignan a a, b y c, respectivamente.


### Múltiples Tipos de Parámetros:


Puedes combinar diferentes tipos de parámetros en una función, incluyendo parámetros posicionales, parámetros con valores predeterminados y parámetros con nombre (keyword arguments) para crear funciones más flexibles.


python

def funcion_completa(a, b=10, *args,kwargs):

print("a:", a)

print("b:", b)

print("Argumentos posicionales:", args)

print("Argumentos con nombre:", kwargs)


# Llamando a la función con diferentes tipos de argumentos

funcion_completa(5) # Salida: a: 5, b: 10, Argumentos posicionales: (), Argumentos con nombre: {}

funcion_completa(5, 20, 30, 40, nombre="Ana", edad=30) # Ejemplo con múltiples argumentos



En este ejemplo, a es un parámetro posicional, b tiene un valor predeterminado, *args acepta un número variable de argumentos posicionales y kwargs acepta argumentos con nombre.


Las funciones con múltiples parámetros permiten una mayor flexibilidad al desarrollar aplicaciones, ya que pueden manejar diferentes escenarios y tipos de datos de manera más dinámica.


Ejercicio del curso:

multiplesparametros.py



/Fundamentos de Python/Funciones/Múltiples parámetros/ multiplesparametros.py

1 def saluda(nombre,edad):
2 print("Hola "+nombre+" yo te saludo y tienes "+str(edad)+" años")
3
4 saluda("Jose Vicente",45)
5 saluda("Juan",46)
6 saluda("Jorge",47)
7 saluda("Julia",48)





2.6.6.-Return en la función

Explicación


En Python, la declaración return se utiliza dentro de una función para devolver un valor específico al lugar desde donde se llamó la función. Esta declaración termina la ejecución de la función y devuelve el valor especificado, que puede ser utilizado o asignado a una variable en el código que llama a la función.


### Uso de return en Funciones:


python

def suma(a, b):

"""Esta función devuelve la suma de dos números."""

resultado = a + b

return resultado # Devuelve el valor de 'resultado'


# Llamando a la función y almacenando el resultado devuelto en una variable

resultado_suma = suma(5, 7)

print(resultado_suma) # Salida: 12



En este ejemplo, la función suma toma dos parámetros a y b, realiza la suma y devuelve el resultado utilizando return. Al llamar a la función suma(5, 7), el valor devuelto (12) se asigna a la variable resultado_suma y se imprime.


### return con múltiples valores:


En Python, return puede devolver múltiples valores separados por comas (aunque en realidad es una única tupla que contiene esos valores). Esto puede ser útil para devolver varios resultados desde una función.


python

def operaciones_matematicas(a, b):

"""Esta función devuelve múltiples operaciones matemáticas."""

suma = a + b

resta = a - b

multiplicacion = a * b

division = a / b if b != 0 else None

return suma, resta, multiplicacion, division


# Llamando a la función y almacenando los valores devueltos en variables separadas

resultados = operaciones_matematicas(10, 5)

print(resultados) # Salida: (15, 5, 50, 2.0)



En este ejemplo, la función operaciones_matematicas realiza varias operaciones matemáticas con los números a y b, y devuelve una tupla con los resultados. Al llamar a la función, los valores devueltos se almacenan en la variable resultados, que imprime una tupla con los valores de suma, resta, multiplicación y división.


La declaración return es fundamental para obtener resultados de una función y utilizarlos en otras partes del código, lo que permite hacer el código más modular y reutilizable.


Ejercicio del curso:

return.py



/Fundamentos de Python/Funciones/Return en la función/return.py

1 def saluda(nombre,edad):
2 return "Hola "+nombre+" yo te saludo y tienes "+str(edad)+" años"
3
4 print(saluda("Jose Vicente",45))
5 print(saluda("Juan",46))
6 print(saluda("Jorge",47))
7 print(saluda("Julia",48))





2.7.-Programación orientada a objetos

Explicación


La Programación Orientada a Objetos (POO) es un paradigma de programación que se basa en la creación de clases y objetos que interactúan entre sí para modelar y resolver problemas del mundo real. En Python, como en muchos otros lenguajes de programación, se puede implementar la POO.


### Conceptos clave de la Programación Orientada a Objetos:


1.Clases: Son plantillas para crear objetos. Las clases definen las propiedades (atributos) y el comportamiento (métodos) de los objetos.


2.Objetos: Son instancias específicas de una clase que poseen atributos y pueden realizar acciones definidas por los métodos de la clase.


3.Atributos: Representan las características o datos asociados a un objeto (variables dentro de una clase).


4.Métodos: Son funciones definidas dentro de una clase que definen el comportamiento de los objetos.


### Ejemplo de una Clase y un Objeto en Python:


python

class Persona:

def __init__(self, nombre, edad):

self.nombre = nombre

self.edad = edad


def saludar(self):

return f"Hola, soy {self.nombre} y tengo {self.edad} años."


# Creación de un objeto (instancia de la clase Persona)

persona1 = Persona("Juan", 30)


# Accediendo a los atributos y métodos del objeto

print(persona1.nombre) # Salida: Juan

print(persona1.edad) # Salida: 30

print(persona1.saludar()) # Salida: Hola, soy Juan y tengo 30 años.



En este ejemplo:


- Se define una clase Persona que tiene dos atributos (nombre y edad) y un método saludar.

- Se crea una instancia (persona1) de la clase Persona con valores específicos para los atributos nombre y edad.

- Se accede a los atributos y métodos del objeto utilizando la notación de punto (persona1.nombre, persona1.edad, persona1.saludar()).


### Principios de la POO:


-Encapsulación: Oculta la implementación interna de los objetos y solo expone las funcionalidades necesarias.


-Abstracción: Permite enfocarse en las características y comportamientos esenciales de los objetos, ignorando los detalles innecesarios.


-Herencia: Permite que una clase herede atributos y métodos de otra clase, facilitando la reutilización de código y la creación de jerarquías.


-Polimorfismo: Permite que los objetos de diferentes clases sean tratados de manera uniforme a través de una interfaz común.


La Programación Orientada a Objetos ofrece una forma de modelar el mundo real en términos de objetos y sus interacciones, lo que permite crear programas más estructurados, flexibles y fáciles de mantener.


2.7.1.-Nueva clase

Explicación


En Python, la creación de clases es fundamental para implementar la Programación Orientada a Objetos (POO). Una clase es una plantilla que define las propiedades y comportamientos comunes a un conjunto de objetos. Las clases contienen atributos (variables) y métodos (funciones) que definen las características y acciones de los objetos.


### Sintaxis para Crear una Clase en Python:


python

class NombreDeLaClase:

"""Docstring de la clase"""


def __init__(self, parametros):

# Método inicializador (constructor)

# Se ejecuta automáticamente al crear un objeto

# Se utiliza para inicializar atributos


def nombre_del_metodo(self, parametros):

# Definición de métodos

# Pueden realizar acciones y operaciones con los atributos de la clase



- class: Palabra clave para definir una clase.

- NombreDeLaClase: Nombre que identifica la clase (sigue las convenciones de nombres en Python).

- __init__(self, parametros): Método especial llamado __init__ (constructor) utilizado para inicializar los atributos de la clase cuando se crea un objeto. self hace referencia al propio objeto y parametros son los valores que se pueden pasar al crear un objeto.

- Otros métodos pueden ser definidos dentro de la clase, usando la misma estructura que __init__.


### Ejemplo de Creación de una Clase en Python:


python

class Coche:

"""Clase que representa un coche."""


def __init__(self, marca, modelo, anio):

"""Inicializador de la clase Coche."""

self.marca = marca

self.modelo = modelo

self.anio = anio


def describir_coche(self):

"""Método para describir el coche."""

return f"{self.marca} {self.modelo} del año {self.anio}"


# Creación de un objeto de la clase Coche

mi_coche = Coche("Toyota", "Corolla", 2022)


# Accediendo a los atributos y métodos del objeto

print(mi_coche.marca) # Salida: Toyota

print(mi_coche.modelo) # Salida: Corolla

print(mi_coche.anio) # Salida: 2022

print(mi_coche.describir_coche()) # Salida: Toyota Corolla del año 2022



En este ejemplo, se crea la clase Coche con un inicializador (__init__) que define tres atributos (marca, modelo y anio). También se define un método describir_coche que devuelve una cadena que describe el coche.


La creación de clases en Python es esencial para implementar la Programación Orientada a Objetos, permitiendo la creación de objetos con atributos y métodos que modelan entidades del mundo real de manera estructurada y modular.


Ejercicio del curso:

nuevaclase.py



/Fundamentos de Python/Programación orientada a objetos/Nueva clase/nuevaclase.py

1 class Gato:
2 def __init__():
3 self.edad = 0
4 self.nombre = ""
5 self.color = ""
6





2.7.2.-Propiedades

Explicación


Las propiedades de una clase en Python se refieren a las características o atributos asociados a los objetos creados a partir de esa clase. Estas propiedades representan datos que describen el estado de un objeto y definen su comportamiento. En la POO, los atributos son variables que están asociadas a una clase u objeto específico.


### Características de las Propiedades de una Clase:


1.Atributos: Son variables que representan datos asociados a un objeto específico. Pueden ser variables de instancia (relacionadas a cada objeto creado) o variables de clase (compartidas por todos los objetos de la clase).


2.Definición: Los atributos se definen dentro de la clase utilizando el método __init__ u otros métodos de la clase.


### Ejemplo de Propiedades en una Clase:


python

class Persona:

def __init__(self, nombre, edad):

self.nombre = nombre # Atributo de instancia

self.edad = edad # Atributo de instancia

Persona.contador = 0 # Atributo de clase


def mostrar_informacion(self):

return f"Nombre: {self.nombre}, Edad: {self.edad}"


# Creación de objetos y acceso a sus propiedades

persona1 = Persona("Juan", 30)

print(persona1.nombre) # Acceso al atributo 'nombre' del objeto persona1

print(persona1.edad) # Acceso al atributo 'edad' del objeto persona1

print(persona1.mostrar_informacion()) # Método para mostrar información de la persona1


persona2 = Persona("Ana", 25)

print(persona2.nombre) # Acceso al atributo 'nombre' del objeto persona2

print(persona2.edad) # Acceso al atributo 'edad' del objeto persona2

print(persona2.mostrar_informacion()) # Método para mostrar información de la persona2



En este ejemplo:


- La clase Persona tiene dos atributos de instancia (nombre y edad) que representan propiedades de un objeto Persona.

- Estos atributos se inicializan usando el método __init__ al crear un nuevo objeto Persona.

- Cada objeto Persona creado (persona1, persona2) tiene su propio conjunto de atributos, específicos para cada instancia.


Las propiedades de una clase son fundamentales para definir las características y el estado de los objetos, permitiendo que los objetos mantengan datos específicos y los manipulen a través de métodos asociados.


Ejercicio del curso:

propiedades.py



/Fundamentos de Python/Programación orientada a objetos/Propiedades/propiedades.py

1 class Gato:
2 def __init__():
3 self.edad = 0
4 self.nombre = ""
5 self.color = ""
6
7





2.7.3.-Instanciar

Explicación


La instanciación de clases en Python se refiere al proceso de crear objetos (instancias) a partir de una clase. Cuando se instancia una clase, se crea un objeto específico que hereda todas las propiedades y comportamientos definidos en esa clase. Cada instancia de una clase es independiente y puede tener su propio conjunto de datos y estado.


### Pasos para la Instanciación de Clases:


1.Definición de la Clase: Se define una clase utilizando la palabra clave class y se definen los atributos y métodos dentro de ella.


2.Inicialización (__init__): Se define un método especial llamado __init__, que es el constructor de la clase y se utiliza para inicializar los atributos de la instancia cuando se crea un objeto.


3.Creación de Objetos (Instancias): Se crea un objeto (instancia) de la clase utilizando el nombre de la clase seguido de paréntesis ().


### Ejemplo de Instanciación de una Clase en Python:


python

class Persona:

def __init__(self, nombre, edad):

self.nombre = nombre

self.edad = edad


def mostrar_informacion(self):

return f"Nombre: {self.nombre}, Edad: {self.edad}"


# Creación de objetos (instancias) de la clase Persona

persona1 = Persona("Juan", 30)

persona2 = Persona("Ana", 25)


# Acceso a los atributos y métodos de las instancias

print(persona1.mostrar_informacion()) # Salida: Nombre: Juan, Edad: 30

print(persona2.mostrar_informacion()) # Salida: Nombre: Ana, Edad: 25



En este ejemplo:


- La clase Persona tiene un método __init__ que inicializa los atributos nombre y edad de cada instancia de la clase.

- Se crean dos instancias (persona1 y persona2) de la clase Persona, proporcionando diferentes valores para los atributos nombre y edad.

- Cada instancia tiene su propio conjunto de atributos y métodos, independientes de otras instancias.


La instanciación de clases permite crear múltiples objetos que son instancias de una clase específica, lo que proporciona modularidad y reutilización de código al definir atributos y comportamientos comunes en una clase y crear objetos basados en esa plantilla.


Ejercicio del curso:

instanciar.py



/Fundamentos de Python/Programación orientada a objetos/Instanciar/instanciar.py

1 class Gato:
2 def __init__(self):
3 self.edad = 0
4 self.nombre = ""
5 self.color = ""
6
7 micifu = Gato()
8 print(micifu.edad)
9 micifu.edad += 1
10 print(micifu.edad)





2.7.4.-Métodos

Explicación


Los métodos en Python son funciones definidas dentro de una clase que pueden ser invocadas en las instancias (objetos) de esa clase. Los métodos representan el comportamiento de los objetos y pueden realizar operaciones o manipulaciones de datos en los atributos de la instancia.


### Características de los Métodos en una Clase:


1.Métodos de Instancia: Son funciones definidas dentro de una clase y se accede a ellos a través de las instancias de esa clase.


2.Acceso a los Atributos: Los métodos pueden acceder y manipular los atributos de la instancia utilizando el parámetro self.


3.self: Es un parámetro especial que hace referencia a la instancia actual de la clase y se pasa automáticamente a todos los métodos de la clase.


### Ejemplo de Métodos en una Clase en Python:


python

class Circulo:

def __init__(self, radio):

self.radio = radio


def obtener_area(self):

"""Método para calcular el área del círculo."""

return 3.1416 * (self.radio 2)


def obtener_perimetro(self):

"""Método para calcular el perímetro del círculo."""

return 2 * 3.1416 * self.radio


# Creación de una instancia (objeto) de la clase Circulo

circulo1 = Circulo(5)


# Acceso a los métodos de la instancia circulo1

area = circulo1.obtener_area()

perimetro = circulo1.obtener_perimetro()


print("Área del círculo:", area) # Salida: Área del círculo: 78.54

print("Perímetro del círculo:", perimetro) # Salida: Perímetro del círculo: 31.416



En este ejemplo:


- La clase Circulo tiene dos métodos (obtener_area y obtener_perimetro) que calculan el área y el perímetro de un círculo, respectivamente.

- Estos métodos se definen dentro de la clase Circulo y acceden al atributo radio utilizando self.

- Se crea una instancia circulo1 de la clase Circulo con un radio de 5.

- Los métodos obtener_area() y obtener_perimetro() son invocados en la instancia circulo1 para calcular el área y el perímetro del círculo respectivamente.


Los métodos en una clase encapsulan comportamientos específicos que pueden ser invocados en las instancias de esa clase para realizar operaciones o tareas relacionadas con los datos asociados a dichas instancias.


Ejercicio del curso:

metodos.py



/Fundamentos de Python/Programación orientada a objetos/Métodos/metodos.py

1 class Gato:
2 def __init__(self):
3 self.edad = 0
4 self.nombre = ""
5 self.color = ""
6 def maulla(self):
7 print("el gato está maullando")
8 micifu = Gato()
9 print(micifu.edad)
10 micifu.edad += 1
11 print(micifu.edad)
12 micifu.maulla()





2.7.5.-Return en los métodos

Explicación


En Python, el uso de la declaración return en los métodos de una clase es común y permite devolver un valor desde el método al punto desde donde se invocó. Los métodos pueden realizar operaciones, manipular datos y luego devolver un resultado utilizando return.


### Uso de return en Métodos de una Clase:


python

class Calculadora:

def sumar(self, a, b):

"""Método para sumar dos números."""

resultado = a + b

return resultado


def restar(self, a, b):

"""Método para restar dos números."""

resultado = a - b

return resultado


# Creación de una instancia de la clase Calculadora

calculadora = Calculadora()


# Uso de los métodos de la instancia

suma = calculadora.sumar(10, 5)

resta = calculadora.restar(10, 5)


print("Suma:", suma) # Salida: Suma: 15

print("Resta:", resta) # Salida: Resta: 5



En este ejemplo:


- La clase Calculadora define dos métodos (sumar y restar) que realizan operaciones matemáticas y devuelven el resultado usando return.

- Los métodos son invocados en la instancia calculadora pasando argumentos específicos para realizar las operaciones.

- Los valores devueltos por los métodos (resultado) se almacenan en las variables suma y resta respectivamente.

- Luego, se imprimen los valores resultantes.


El uso de return en los métodos de una clase es útil para obtener resultados de operaciones o cálculos específicos que pueden ser utilizados o procesados más adelante en el código. Además, return permite que los métodos de una clase proporcionen valores útiles y relevantes a otras partes del programa.


Ejercicio del curso:

metodos return.py



/Fundamentos de Python/Programación orientada a objetos/Return en los métodos/metodos return.py

1 class Gato:
2 def __init__(self):
3 self.edad = 0
4 self.nombre = ""
5 self.color = ""
6 def maulla(self):
7 return "el gato está maullando"
8 micifu = Gato()
9 print(micifu.edad)
10 micifu.edad += 1
11 print(micifu.edad)
12 print(micifu.maulla())





2.7.6.-Set y get

Explicación


Los setters y getters son métodos utilizados en la Programación Orientada a Objetos para controlar el acceso y la modificación de los atributos de una clase. Los setters son métodos que permiten asignar un valor a un atributo, mientras que los getters son métodos que permiten obtener o recuperar el valor de un atributo.


### Setters:


Los setters son métodos que se utilizan para asignar valores a los atributos de una clase. Permiten establecer un nuevo valor a un atributo, a menudo incluyendo lógica o validación para asegurarse de que el valor asignado cumpla con ciertas condiciones.


python

class Persona:

def __init__(self, nombre):

self._nombre = nombre # Atributo protegido (con un guion bajo como convención)


def set_nombre(self, nuevo_nombre):

"""Setter para el atributo nombre."""

# Validación o lógica adicional puede estar aquí

self._nombre = nuevo_nombre


def get_nombre(self):

"""Getter para el atributo nombre."""

return self._nombre


# Creación de una instancia de la clase Persona

persona = Persona("Juan")


# Uso del setter y getter

persona.set_nombre("Carlos")

print(persona.get_nombre()) # Salida: Carlos



### Getters:


Los getters son métodos que permiten obtener el valor de un atributo de una clase. Proporcionan acceso al valor del atributo, generalmente sin realizar modificaciones en el valor.


En Python, aunque es posible implementar getters y setters, es comúnmente utilizado el acceso directo a los atributos (como persona.nombre) debido a la flexibilidad del lenguaje y a las propiedades de los atributos. Sin embargo, en situaciones donde se necesite realizar validaciones o lógica especial al establecer o recuperar valores, los setters y getters son útiles.


Los nombres de los métodos setters y getters pueden seguir convenciones específicas (como set_nombre y get_nombre), pero también es posible utilizar decoradores especiales (@property y @nombre.setter) para definir propiedades en Python.


python

class Persona:

def __init__(self, nombre):

self._nombre = nombre


@property

def nombre(self):

"""Getter para el atributo nombre."""

return self._nombre


@nombre.setter

def nombre(self, nuevo_nombre):

"""Setter para el atributo nombre."""

# Validación o lógica adicional puede estar aquí

self._nombre = nuevo_nombre


# Creación de una instancia de la clase Persona

persona = Persona("Juan")


# Uso del getter y setter como si fueran atributos directos

print(persona.nombre) # Salida: Juan

persona.nombre = "Carlos"

print(persona.nombre) # Salida: Carlos



En este ejemplo, @property define el método nombre como un getter y @nombre.setter define el método nombre como un setter, permitiendo acceder a la propiedad nombre como si fuera un atributo directo (persona.nombre). Esto ofrece una forma más legible y conveniente de trabajar con setters y getters en Python.


Ejercicio del curso:

set y get.py



/Fundamentos de Python/Programación orientada a objetos/Set y get/set y get.py

1 class Gato:
2 def __init__(self):
3 self.edad = 0
4 self.nombre = ""
5 self.color = ""
6 def maulla(self):
7 return "el gato está maullando"
8 def getEdad(self):
9 return self.edad
10 def setEdad(self,nuevaedad):
11 self.edad = nuevaedad
12 micifu = Gato()
13 print(micifu.getEdad())
14 micifu.setEdad(1)
15 print(micifu.getEdad())
16 print(micifu.maulla())





2.7.7.-Herencia

Explicación


La herencia es un concepto fundamental en la Programación Orientada a Objetos (POO) que permite que una clase adquiera las propiedades y métodos de otra clase. En la herencia, una clase llamada subclase (o clase hija) puede heredar atributos y métodos de otra clase llamada superclase (o clase padre).


### Principios de la Herencia:


1.Clase Padre (Superclase): Es la clase de la que se heredan los atributos y métodos.


2.Clase Hija (Subclase): Es la clase que hereda los atributos y métodos de la clase padre.


3.Herencia Jerárquica: Las clases pueden tener múltiples niveles de herencia, lo que crea una jerarquía de clases.


### Sintaxis de Herencia en Python:


python

class ClasePadre:

# Atributos y métodos de la clase padre


class ClaseHija(ClasePadre):

# Atributos y métodos adicionales de la clase hija



### Ejemplo de Herencia en Python:


python

class Animal:

def __init__(self, nombre):

self.nombre = nombre


def hacer_sonido(self):

pass # Método por defecto que no realiza ninguna acción


# Clase perro hereda de la clase Animal

class Perro(Animal):

def hacer_sonido(self):

return "¡Guau!"


# Clase gato hereda de la clase Animal

class Gato(Animal):

def hacer_sonido(self):

return "¡Miau!"


# Creación de instancias de las clases hijas

perro = Perro("Bobby")

gato = Gato("Minino")


# Uso de los métodos de las clases hijas

print(perro.nombre) # Salida: Bobby

print(perro.hacer_sonido()) # Salida: ¡Guau!

print(gato.nombre) # Salida: Minino

print(gato.hacer_sonido()) # Salida: ¡Miau!



En este ejemplo:


- La clase Animal es la clase padre que tiene un método hacer_sonido por defecto.

- Las clases Perro y Gato son subclases de Animal que heredan el método hacer_sonido, pero cada una lo sobrescribe con su propio comportamiento.

- Las instancias perro y gato acceden a los métodos y atributos de sus respectivas clases hijas.


La herencia permite la reutilización de código, ya que las clases hijas pueden heredar y extender las características de las clases padres, lo que facilita la implementación de jerarquías de clases y la organización de código en estructuras lógicas y coherentes.


Ejercicio del curso:

herencia.py



/Fundamentos de Python/Programación orientada a objetos/Herencia/herencia.py

1 class Mamifero:
2 def __init__(self):
3 self.mama = True
4 def mama(self):
5 return "Este animal mama cuando es pequeño"
6
7 class Gato(Mamifero):
8 def __init__(self):
9 self.edad = 0
10 self.nombre = ""
11 self.color = ""
12 def maulla(self):
13 return "el gato está maullando"
14 def getEdad(self):
15 return self.edad
16 def setEdad(self,nuevaedad):
17 self.edad = nuevaedad
18
19 micifu = Gato()
20 print(micifu.getEdad())
21 micifu.setEdad(1)
22 print(micifu.getEdad())
23 print(micifu.maulla())
24 print(micifu.mama())





2.8.-Librerías

Explicación


En Python, las bibliotecas (o librerías) son conjuntos de módulos y funciones predefinidos que ofrecen una amplia gama de herramientas y funcionalidades para realizar diversas tareas. Estas bibliotecas están destinadas a facilitar el desarrollo de aplicaciones al proporcionar implementaciones listas para usar de funciones comunes y complejas.


### Características de las Bibliotecas en Python:


1.Amplia Variedad: Python cuenta con una gran cantidad de bibliotecas que abarcan áreas como ciencia de datos, desarrollo web, procesamiento de imágenes, matemáticas, inteligencia artificial, entre otras.


2.Reutilización de Código: Las bibliotecas permiten a los programadores reutilizar código ya escrito y probado, ahorrando tiempo y esfuerzo en el desarrollo de aplicaciones.


3.Facilidad de Instalación: La mayoría de las bibliotecas se pueden instalar fácilmente utilizando herramientas como pip, el gestor de paquetes de Python.


### Ejemplos de Bibliotecas Comunes en Python:


1.Pandas: Una biblioteca ampliamente utilizada para manipulación y análisis de datos, especialmente para trabajar con estructuras de datos tabulares y series temporales.


2.NumPy: Ofrece soporte para arreglos y matrices multidimensionales, junto con funciones matemáticas de alto nivel para operar en estos arreglos.


3.Matplotlib y Seaborn: Utilizadas para la visualización de datos y creación de gráficos, ofreciendo herramientas para crear gráficos estáticos, interactivos y visualizaciones estadísticas.


4.Requests: Una biblioteca HTTP para realizar solicitudes y recibir respuestas desde la web, utilizada para acceder a recursos en línea.


5.Django y Flask: Frameworks utilizados en el desarrollo web. Django es un framework más completo y opinionado, mientras que Flask es más minimalista y flexible.


### Instalación de Bibliotecas en Python:


Para instalar una biblioteca en Python, se utiliza el gestor de paquetes pip, que viene incluido por defecto en la instalación de Python.


Por ejemplo, para instalar la biblioteca pandas, se puede utilizar el siguiente comando en la terminal o línea de comandos:


bash

pip install pandas



### Importación de Bibliotecas en Python:


Una vez instalada una biblioteca, se puede importar en un script o programa de Python usando la palabra clave import.


python

import pandas

import numpy


# Utilización de las funciones y clases de pandas y numpy



También es posible importar módulos específicos de una biblioteca utilizando la declaración from ... import ...:


python

from pandas import DataFrame

from numpy import array


# Utilización específica de las clases o funciones importadas



Las bibliotecas en Python son una parte integral del ecosistema de desarrollo y permiten a los programadores acceder a una amplia gama de herramientas y funcionalidades para diferentes propósitos sin tener que escribir todo desde cero.


2.8.1.-Introduccion

Explicación



2.8.1.1.-Matplotlib

Explicación


`Matplotlib es una biblioteca muy popular en Python utilizada para crear visualizaciones y gráficos de alta calidad de datos. Ofrece una amplia gama de herramientas para crear gráficos estáticos, interactivos y visualizaciones estadísticas de manera sencilla y flexible.


### Características principales de Matplotlib:


1.Facilidad de uso: Proporciona una interfaz fácil de entender y utilizar para crear una variedad de gráficos.


2.Diversidad de gráficos: Permite la creación de gráficos de líneas, dispersión, barras, histogramas, diagramas de caja, gráficos 3D y mucho más.


3.Personalización: Ofrece amplias opciones de personalización para ajustar los gráficos según las necesidades específicas.


### Ejemplo Básico de Uso de Matplotlib:


Para crear un gráfico simple de líneas utilizando Matplotlib:


python

import matplotlib.pyplot as plt


# Datos

x = [1, 2, 3, 4, 5]

y = [2, 4, 6, 8, 10]


# Crear un gráfico de líneas

plt.plot(x, y)


# Personalizar el gráfico

plt.title('Gráfico de Líneas')

plt.xlabel('Eje X')

plt.ylabel('Eje Y')


# Mostrar el gráfico

plt.show()



En este ejemplo:


- import matplotlib.pyplot as plt: Importa la funcionalidad de trazado de Matplotlib bajo el alias plt.

- plt.plot(x, y): Crea un gráfico de líneas utilizando los datos x e y.

- plt.title, plt.xlabel, plt.ylabel: Añade título y etiquetas a los ejes del gráfico.

- plt.show(): Muestra el gráfico.


### Instalación de Matplotlib:


Si aún no tienes instalada la biblioteca Matplotlib, puedes instalarla usando pip en la terminal o el símbolo del sistema:


bash

pip install matplotlib



Matplotlib es ampliamente utilizada en campos como ciencia de datos, investigación académica, análisis de datos, y más, gracias a su versatilidad y capacidad para generar gráficos de manera intuitiva y personalizable.


Ejercicio del curso:

matplotlib.py



/Fundamentos de Python/Librerías/Introduccion/Matplotlib/matplotlib.py

1 #pip install matplotlib
2 import matplotlib.pyplot as plot
3
4 paises = ['España', 'Argentina', 'Perú', 'Chile', 'Italia','Bolivia','Belgica']
5 datos = [11,2,4,8,10,5,7]
6 plot.bar(paises,datos)
7 plot.title("Demostración")
8 plot.show()





2.8.1.2.-Math

Explicación


La librería math es una biblioteca estándar de Python que proporciona funciones matemáticas y constantes matemáticas comunes para realizar operaciones numéricas avanzadas. Esta biblioteca permite realizar cálculos matemáticos complejos y operaciones con números en Python.


### Características clave de la librería math:


1.Funciones Matemáticas: Ofrece una amplia gama de funciones matemáticas, como trigonométricas, exponenciales, logarítmicas, funciones de redondeo, funciones trigonométricas inversas y mucho más.


2.Constantes Matemáticas: Proporciona constantes matemáticas comunes como π (pi) y e (número de Euler).


3.Precisión de Punto Flotante: Ofrece funciones para trabajar con números de punto flotante con precisión.


### Ejemplo de Uso de la librería math:


python

import math


# Usando funciones matemáticas

print(math.sqrt(16)) # Raíz cuadrada: 4.0

print(math.sin(math.pi/2)) # Seno de pi/2: 1.0

print(math.log(10)) # Logaritmo natural de 10: 2.302585092994046


# Constantes matemáticas

print(math.pi) # Valor de pi: 3.141592653589793

print(math.e) # Valor de e: 2.718281828459045



En este ejemplo:


- Se importa el módulo math.

- Se utilizan funciones como sqrt, sin, log para realizar operaciones matemáticas.

- Se accede a las constantes pi y e usando math.pi y math.e respectivamente.


### Instalación:


La librería math es parte de la biblioteca estándar de Python, por lo que no es necesario instalarla por separado. Es accesible directamente en cualquier instalación estándar de Python.


La biblioteca math es útil en situaciones donde se necesitan cálculos matemáticos más avanzados o funciones específicas que no están disponibles de forma predeterminada en Python. Facilita operaciones matemáticas complejas y proporciona constantes matemáticas estándar para realizar cálculos con mayor precisión.


Ejercicio del curso:

Math.py



/Fundamentos de Python/Librerías/Introduccion/Math/Math.py

1 import math as m
2
3 print(round(3.4))
4 print(m.floor(3.4))
5 print(m.ceil(3.4))
6 print(m.sin(0))
7 print(m.cos(0))





2.8.1.3.-Fechas

Explicación


En Python, la librería estándar datetime proporciona clases para manejar fechas y horas de manera eficiente. Esta biblioteca ofrece herramientas para crear, manipular y formatear fechas y horas, así como también para realizar cálculos entre ellas.


### Características clave de la librería datetime:


1.Clases Principales:

- datetime: Representa una combinación de fecha y hora.

- date: Representa solo la parte de la fecha.

- time: Representa solo la parte de la hora.


2.Funciones de Creación:

- datetime.now(): Devuelve la fecha y hora actual.

- datetime(year, month, day): Crea un objeto datetime con la fecha especificada.

- datetime.strptime(): Convierte una cadena en un objeto datetime según un formato específico.


3.Operaciones y Métodos:

- Métodos para acceder y modificar partes específicas de una fecha o hora (como año, mes, día, hora, minuto, segundo).

- Métodos para realizar operaciones de cálculo entre fechas y horas, como sumar o restar intervalos de tiempo.


### Ejemplo de Uso de la librería datetime:


python

import datetime


# Obtener la fecha y hora actual

fecha_actual = datetime.datetime.now()

print("Fecha y Hora Actual:", fecha_actual)


# Crear un objeto datetime con una fecha específica

fecha = datetime.datetime(2023, 11, 23, 10, 30, 0)

print("Fecha y Hora Específica:", fecha)


# Acceder a partes específicas de una fecha

print("Año:", fecha.year)

print("Mes:", fecha.month)

print("Día:", fecha.day)

print("Hora:", fecha.hour)

print("Minuto:", fecha.minute)

print("Segundo:", fecha.second)


# Convertir una cadena a datetime

fecha_str = "2023-11-23"

fecha_convertida = datetime.datetime.strptime(fecha_str, "%Y-%m-%d")

print("Fecha Convertida:", fecha_convertida)



En este ejemplo:


- Se importa el módulo datetime.

- Se utilizan funciones como datetime.now() para obtener la fecha y hora actual.

- Se crea un objeto datetime con una fecha y hora específicas.

- Se accede a partes individuales de una fecha o hora (año, mes, día, etc.).

- Se convierte una cadena a un objeto datetime utilizando datetime.strptime().


La librería datetime es muy útil para trabajar con fechas y horas en Python, proporcionando una amplia gama de herramientas para manipular, crear y formatear fechas y horas según las necesidades de la aplicación.


Ejercicio del curso:

Fechas.py



/Fundamentos de Python/Librerías/Introduccion/Fechas/Fechas.py

1 import datetime
2
3
4 print(datetime.datetime.now())





2.8.1.4.-Fechas detalle

Explicación



Ejercicio del curso:

Fechas detalle.py



/Fundamentos de Python/Librerías/Introduccion/Fechas detalle/Fechas detalle.py

1 import datetime
2 import time
3
4 fecha = datetime.datetime.now()
5 print(fecha.year)
6 print(fecha.month)
7 print(fecha.day)
8 print(fecha.hour)
9 print(fecha.minute)
10 print(fecha.second)
11 print(int(time.time()))





2.8.1.5.-Libreria propia

Explicación


Crear tus propias librerías en Python te permite organizar y reutilizar tu propio código en diferentes proyectos. Puedes crear módulos y paquetes personalizados para encapsular funciones, clases y variables, facilitando su uso en diferentes partes de tu código o en múltiples proyectos.


### Pasos para crear una librería propia:


#### 1. Crear un Módulo:

Un módulo es un archivo de Python que contiene código (funciones, clases, variables) relacionado. Por ejemplo, supongamos que tienes un archivo llamado mis_funciones.py:


python

# Contenido de mis_funciones.py


def suma(a, b):

return a + b


def resta(a, b):

return a - b



#### 2. Organizar en un Paquete:

Si deseas organizar varios módulos relacionados en un paquete, puedes agruparlos en un directorio. Por ejemplo, crea un directorio llamado mi_paquete y coloca mis_funciones.py dentro de este directorio.



mi_paquete/

__init__.py

mis_funciones.py



El archivo __init__.py indica a Python que el directorio es un paquete. Puede estar vacío o contener código de inicialización si es necesario.


#### 3. Importar y Utilizar la Librería Propia:

Una vez que has creado tu módulo o paquete, puedes importarlo y utilizarlo en otros scripts de la siguiente manera:


python

# En otro archivo de Python


# Importar el módulo o función desde el paquete

from mi_paquete.mis_funciones import suma, resta


# Utilizar las funciones del módulo

resultado_suma = suma(10, 5)

resultado_resta = resta(10, 5)


print("Suma:", resultado_suma)

print("Resta:", resultado_resta)



#### 4. Distribuir tu Librería (Opcional):

Si deseas compartir tu librería con otros desarrolladores, puedes empaquetarla y distribuirla. Puedes usar herramientas como setuptools para crear un archivo de distribución (por ejemplo, setup.py) y subir tu librería a un repositorio de paquetes de Python como PyPI.


### Consideraciones importantes:


- Mantén tus módulos o paquetes organizados y bien documentados para facilitar su uso por otros y para tu propio mantenimiento.

- Evita nombres de módulos que puedan entrar en conflicto con nombres existentes en Python o en otras librerías.


Crear tus propias librerías te permite modularizar tu código, reutilizar funciones y clases en diferentes proyectos y mantener un código más limpio y estructurado.


Ejercicio del curso:

Libreríapropia.py



/Fundamentos de Python/Librerías/Introduccion/Libreria propia/Libreríapropia.py

1 from origen import *
2
3 miEdad()





Ejercicio del curso:



/Fundamentos de Python/Librerías/Introduccion/Libreria propia/milibreria.py

1 def miFuncion():
2 print("esta es una función")





Ejercicio del curso:



/Fundamentos de Python/Librerías/Introduccion/Libreria propia/origen.py

1 def miEdad():
2 print("Mi edad es de 45")





2.8.1.6.-__pycache__

Ejercicio del curso:

311.pyc







Ejercicio del curso:

310.pyc







Ejercicio del curso:

311.pyc







2.9.-Persistencia

Explicación


La persistencia en programación se refiere a la capacidad de almacenar y mantener datos más allá de la duración de la ejecución de un programa. En Python, existen varias formas de lograr la persistencia de datos, como el almacenamiento en archivos, bases de datos, serialización de objetos y el uso de sistemas de gestión de bases de datos (DBMS, por sus siglas en inglés).


### Almacenamiento en Archivos:


1.Archivos de Texto: Puedes almacenar datos en archivos de texto utilizando operaciones de lectura/escritura. Ejemplo:


python

# Escribir en un archivo de texto

with open('datos.txt', 'w') as archivo:

archivo.write('Esto es un ejemplo de almacenamiento en archivo.')


# Leer desde un archivo de texto

with open('datos.txt', 'r') as archivo:

contenido = archivo.read()

print(contenido)



2.Archivos CSV, JSON o XML: Python tiene bibliotecas incorporadas (csv, json, xml) que te permiten almacenar datos estructurados en diferentes formatos. Ejemplo:


python

import csv


# Escribir en un archivo CSV

datos = [['Nombre', 'Edad'], ['Juan', 30], ['María', 25]]

with open('datos.csv', 'w', newline='') as archivo_csv:

escritor_csv = csv.writer(archivo_csv)

escritor_csv.writerows(datos)


# Leer desde un archivo CSV

with open('datos.csv', 'r') as archivo_csv:

lector_csv = csv.reader(archivo_csv)

for fila in lector_csv:

print(fila)



### Bases de Datos:


1.SQLite: Es una base de datos SQL liviana y sin servidor, que puede ser utilizada fácilmente en Python. Se accede a ella a través del módulo sqlite3.


2.MySQL, PostgreSQL, MongoDB, etc.: Puedes interactuar con diferentes bases de datos utilizando módulos específicos de Python como mysql-connector, psycopg2, pymongo, entre otros.


### Serialización de Objetos:


Puedes usar módulos como pickle o json para serializar objetos Python en archivos y luego deserializarlos para recuperar los objetos.


### ORM y Sistemas de Gestión de Bases de Datos (DBMS):


Python ofrece módulos y herramientas como SQLAlchemy que permiten trabajar con bases de datos utilizando ORM (mapeo objeto-relacional), lo que facilita la persistencia de datos sin tener que lidiar directamente con consultas SQL.


La elección de la técnica de persistencia adecuada depende de varios factores, como la complejidad de los datos, el rendimiento, la escalabilidad y los requisitos del proyecto. Cada enfoque tiene sus propias ventajas y consideraciones específicas que deben tenerse en cuenta al decidir cómo persistir los datos en una aplicación Python.


2.9.1.-Archivos

Explicación


La persistencia en archivos se refiere a la capacidad de almacenar datos en dispositivos de almacenamiento permanente, como discos duros, unidades USB o almacenamiento en la nube. En Python, la persistencia en archivos es una forma común de guardar datos para su uso posterior, ya que es simple y efectiva para una variedad de propósitos.


### Almacenamiento y Recuperación de Datos en Archivos:


#### 1. Escritura de Datos en Archivos:


En Python, puedes utilizar la función open() para crear o abrir un archivo y escribir datos en él. El modo de apertura 'w' indica que el archivo se abrirá para escritura (si el archivo no existe, se creará; si existe, se sobrescribirá).


python

# Escribir datos en un archivo de texto

with open('datos.txt', 'w') as archivo:

archivo.write('Esto es un ejemplo de persistencia en archivos en Python.\n')

archivo.write('Los datos se han guardado correctamente.\n')



#### 2. Lectura de Datos desde Archivos:


Puedes abrir un archivo en modo lectura ('r') para leer datos de él. Utiliza métodos como read(), readline(), o readlines() para leer el contenido del archivo.


python

# Leer datos desde un archivo de texto

with open('datos.txt', 'r') as archivo:

contenido = archivo.read()

print(contenido)



El método read() lee todo el contenido del archivo en una cadena. readline() lee una línea a la vez y readlines() lee todas las líneas en una lista.


#### 3. Añadir Datos a un Archivo Existente:


Si deseas añadir datos a un archivo existente sin sobrescribir el contenido actual, puedes abrir el archivo en modo de añadido ('a').


python

# Añadir datos a un archivo de texto

with open('datos.txt', 'a') as archivo:

archivo.write('Esta es una nueva línea agregada al archivo.\n')



### Consideraciones:


- Es importante cerrar correctamente el archivo después de utilizarlo. El uso de with open() se encarga automáticamente de cerrar el archivo al salir del bloque with.

- Ten cuidado al abrir archivos en modo de escritura ('w'), ya que sobrescribirá el contenido existente.

- Los archivos pueden ser manipulados utilizando diferentes modos de apertura ('r', 'w', 'a', 'r+', entre otros) dependiendo de si se desea leer, escribir, añadir o modificar el contenido.


La persistencia en archivos es una forma sencilla y efectiva de almacenar datos en Python, y es útil para guardar información estructurada o no estructurada, desde texto plano hasta datos estructurados como CSV, JSON o XML, según las necesidades del proyecto.


2.9.1.1.-Escribir

Explicación


Para escribir en archivos en Python, puedes utilizar la función open() junto con métodos de escritura para guardar datos en un archivo. Es esencial manejar correctamente la apertura, escritura y cierre del archivo para asegurar la integridad de los datos y liberar los recursos después de su uso.


### Escribir en un Archivo de Texto:


#### Método 1: Escribir datos en un archivo:


Puedes utilizar el modo de apertura 'w' para crear un archivo o sobrescribir su contenido existente.


python

# Escribir datos en un archivo de texto

with open('archivo.txt', 'w') as archivo:

archivo.write('Esto es un ejemplo de escritura en un archivo en Python.\n')

archivo.write('Los datos se han guardado correctamente.\n')



#### Método 2: Utilizar el método print con redirección de salida:


python

# Escribir datos en un archivo usando print

with open('archivo.txt', 'w') as archivo:

print('Esto es un ejemplo de escritura en un archivo en Python.', file=archivo)

print('Los datos se han guardado correctamente.', file=archivo)



### Escribir en Archivos CSV:


Para escribir datos estructurados, como en un archivo CSV, puedes utilizar el módulo csv de Python.


python

import csv


# Datos a escribir en el archivo CSV

datos = [

['Nombre', 'Edad'],

['Juan', 30],

['María', 25]

]


# Escribir datos en un archivo CSV

with open('datos.csv', 'w', newline='') as archivo_csv:

escritor_csv = csv.writer(archivo_csv)

escritor_csv.writerows(datos)



### Escribir en Archivos JSON:


Si necesitas escribir datos en un formato JSON, puedes usar el módulo json de Python.


python

import json


# Datos a escribir en el archivo JSON

datos = {

'nombre': 'Juan',

'edad': 30,

'ciudad': 'Ejemplo'

}


# Escribir datos en un archivo JSON

with open('datos.json', 'w') as archivo_json:

json.dump(datos, archivo_json)



Recuerda manejar los posibles errores al escribir archivos y cerrarlos adecuadamente después de su uso. La escritura en archivos en Python es una forma efectiva de guardar datos para su uso futuro o para compartir información estructurada con otras aplicaciones.


Ejercicio del curso:

escribir.py



/Fundamentos de Python/Persistencia/Archivos/Escribir/escribir.py

1 archivo = open("agenda.txt", "w")
2 archivo.write("Este es un contenido\n")
3 archivo.close()





2.9.1.2.-Leer

Explicación


Leer archivos en Python es una tarea común y se puede lograr utilizando el método open() para abrir un archivo y luego leer su contenido utilizando varios métodos proporcionados por Python.


### Leer Archivos de Texto:


#### Método 1: Leer todo el contenido del archivo:


python

# Leer todo el contenido de un archivo de texto

with open('archivo.txt', 'r') as archivo:

contenido = archivo.read()

print(contenido)



#### Método 2: Leer líneas del archivo:


python

# Leer líneas del archivo de texto

with open('archivo.txt', 'r') as archivo:

lineas = archivo.readlines()

for linea in lineas:

print(linea.strip()) # strip() elimina el carácter de nueva línea al final de cada línea



### Leer Archivos CSV:


Si el archivo es un archivo CSV, se puede leer utilizando el módulo csv de Python:


python

import csv


# Leer un archivo CSV y mostrar sus datos

with open('datos.csv', 'r', newline='') as archivo_csv:

lector_csv = csv.reader(archivo_csv)

for fila in lector_csv:

print(fila)



### Leer Archivos JSON:


Si el archivo es un archivo JSON, puedes leerlo con el módulo json de Python:


python

import json


# Leer un archivo JSON e imprimir su contenido

with open('datos.json', 'r') as archivo_json:

datos = json.load(archivo_json)

print(datos)



### Notas Importantes:


- La función open() abre un archivo en diferentes modos de lectura ('r' para lectura, 'w' para escritura, 'a' para añadir, entre otros).

- Al usar with open(), el archivo se cierra automáticamente al salir del bloque with.

- El método read() lee todo el contenido del archivo en una cadena.

- El método readlines() lee todas las líneas del archivo y las devuelve como una lista donde cada elemento es una línea.


Ten en cuenta el formato del archivo que estás leyendo para seleccionar el método adecuado para leerlo. Python proporciona diferentes métodos para leer archivos de texto, CSV, JSON y otros formatos comunes, facilitando la lectura y manipulación de datos almacenados en estos archivos.


Ejercicio del curso:

leer.py



/Fundamentos de Python/Persistencia/Archivos/Leer/leer.py

1 archivo = open("agenda.txt", "r")
2 print(archivo.read())





Ejercicio del curso:



/Fundamentos de Python/Persistencia/Archivos/agenda.txt

1 Este es un contenido





2.9.2.-SQLite

Explicación


SQLite es una base de datos relacional ligera y sin servidor que se puede utilizar fácilmente con Python. Python viene con soporte integrado para SQLite a través del módulo sqlite3, que permite interactuar con bases de datos SQLite desde programas Python.


### Ejemplo Básico de Uso de SQLite en Python:


#### 1. Conexión a una Base de Datos SQLite:


python

import sqlite3


# Crear o conectar a una base de datos SQLite

conexion = sqlite3.connect('mi_base_de_datos.db')


# Crear un cursor para ejecutar comandos SQL

cursor = conexion.cursor()



#### 2. Creación de una Tabla:


python

# Ejecutar un comando SQL para crear una tabla

cursor.execute('''CREATE TABLE IF NOT EXISTS usuarios (

id INTEGER PRIMARY KEY,

nombre TEXT NOT NULL,

edad INTEGER

)''')


# Guardar los cambios y cerrar la conexión

conexion.commit()



#### 3. Inserción de Datos:


python

# Insertar datos en la tabla

cursor.execute("INSERT INTO usuarios (nombre, edad) VALUES ('Juan', 30)")

cursor.execute("INSERT INTO usuarios (nombre, edad) VALUES ('María', 25)")


# Guardar los cambios y cerrar la conexión

conexion.commit()



#### 4. Consulta de Datos:


python

# Consultar datos de la tabla

cursor.execute("SELECT * FROM usuarios")

filas = cursor.fetchall()


# Mostrar los datos

for fila in filas:

print(fila)



#### 5. Cierre de la Conexión:


python

# Cerrar el cursor y la conexión

cursor.close()

conexion.close()



### Funciones Principales del Módulo sqlite3:


- connect(): Establece una conexión con la base de datos SQLite.

- cursor(): Crea un objeto de cursor para ejecutar comandos SQL.

- execute(): Ejecuta comandos SQL.

- fetchall(): Recupera todos los resultados de una consulta.

- commit(): Guarda los cambios realizados en la base de datos.

- close(): Cierra la conexión a la base de datos.


SQLite es útil para aplicaciones que requieren una base de datos ligera y no necesitan un servidor de base de datos completo. Su integración con Python a través del módulo sqlite3 proporciona una forma rápida y eficiente de trabajar con bases de datos SQLite directamente desde tus programas Python.


2.9.2.1.-Comprobación

Explicación


Para verificar si la biblioteca SQLite está instalada en Python, puedes intentar importar el módulo sqlite3 y comprobar si hay algún error. Aquí te muestro cómo hacerlo:


python

try:

import sqlite3

print("SQLite está instalado en tu entorno de Python.")

except ImportError:

print("SQLite no está instalado en tu entorno de Python.")



Este código intentará importar el módulo sqlite3. Si la importación es exitosa, imprimirá "SQLite está instalado en tu entorno de Python.". En caso contrario, imprimirá "SQLite no está instalado en tu entorno de Python.".


Si ejecutas este código y no recibes errores, significa que la biblioteca SQLite está instalada y lista para ser utilizada en tu entorno de Python. De lo contrario, si obtienes un mensaje de error, podría ser necesario instalar SQLite para poder utilizarlo en tus programas Python.


Recuerda que la biblioteca sqlite3 generalmente viene incluida con la instalación estándar de Python, por lo que en la mayoría de los casos estará disponible sin necesidad de instalaciones adicionales.


Ejercicio del curso:

comprobacion.py



/Fundamentos de Python/Persistencia/SQLite/Comprobación/comprobacion.py

1 import sqlite3 as db





2.9.2.2.-Crear base de datos

Explicación


La creación de una base de datos en SQLite con Python implica la conexión a una base de datos SQLite y la ejecución de una sentencia SQL para crear la estructura de la base de datos, como las tablas y sus columnas.


Aquí te muestro cómo puedes crear una base de datos SQLite y una tabla dentro de ella utilizando el módulo sqlite3 en Python:


### Creación de una Base de Datos y una Tabla:


python

import sqlite3


# Conexión a la base de datos (crea la base de datos si no existe)

conexion = sqlite3.connect('mi_base_de_datos.db')


# Creación de un cursor para ejecutar comandos SQL

cursor = conexion.cursor()


# Sentencia SQL para crear una tabla llamada 'usuarios'

crear_tabla_usuarios = '''

CREATE TABLE IF NOT EXISTS usuarios (

id INTEGER PRIMARY KEY,

nombre TEXT NOT NULL,

edad INTEGER

)

'''


# Ejecutar la sentencia SQL para crear la tabla

cursor.execute(crear_tabla_usuarios)


# Guardar los cambios y cerrar la conexión

conexion.commit()

conexion.close()



Este código Python realiza lo siguiente:


1. Importa el módulo sqlite3.

2. Establece una conexión con la base de datos SQLite llamada 'mi_base_de_datos.db'.

3. Crea un cursor para ejecutar comandos SQL.

4. Define una sentencia SQL para crear una tabla llamada usuarios con columnas id, nombre y edad.

5. Ejecuta la sentencia SQL para crear la tabla.

6. Guarda los cambios con commit() y cierra la conexión con close().


Si ejecutas este código, se creará una base de datos llamada 'mi_base_de_datos.db' (si no existe ya) y se creará una tabla llamada usuarios con las columnas id, nombre y edad.


Puedes ajustar la estructura de la tabla y agregar más columnas según sea necesario para tu aplicación. Esta es solo una estructura básica como ejemplo.


Ejercicio del curso:

crear base de datos.py



/Fundamentos de Python/Persistencia/SQLite/Crear base de datos/crear base de datos.py

1 import sqlite3 as db
2 import sys
3
4 conexion = db.connect("agenda.sqlite")





2.9.2.3.-Crear tabla

Explicación


La creación de tablas en SQLite con Python implica la ejecución de una sentencia SQL para definir la estructura de la tabla. Usando el módulo sqlite3 de Python, puedes conectar con una base de datos SQLite y ejecutar una consulta SQL para crear una tabla con las columnas deseadas.


Aquí tienes un ejemplo de cómo puedes crear una tabla en una base de datos SQLite usando Python:


### Ejemplo de Creación de una Tabla:


python

import sqlite3


# Conexión a la base de datos (crea la base de datos si no existe)

conexion = sqlite3.connect('mi_base_de_datos.db')


# Creación de un cursor para ejecutar comandos SQL

cursor = conexion.cursor()


# Sentencia SQL para crear una tabla llamada 'empleados'

crear_tabla_empleados = '''

CREATE TABLE IF NOT EXISTS empleados (

id INTEGER PRIMARY KEY,

nombre TEXT NOT NULL,

apellido TEXT NOT NULL,

edad INTEGER,

salario REAL

)

'''


# Ejecutar la sentencia SQL para crear la tabla

cursor.execute(crear_tabla_empleados)


# Guardar los cambios y cerrar la conexión

conexion.commit()

conexion.close()



Este código realiza los siguientes pasos:


1. Importa el módulo sqlite3.

2. Establece una conexión con la base de datos SQLite llamada 'mi_base_de_datos.db'.

3. Crea un cursor para ejecutar comandos SQL.

4. Define una sentencia SQL en la variable crear_tabla_empleados para crear una tabla llamada empleados con columnas id (como clave primaria), nombre, apellido, edad y salario.

5. Ejecuta la sentencia SQL utilizando cursor.execute() para crear la tabla.

6. Guarda los cambios con commit() y cierra la conexión con close().


Asegúrate de ajustar la estructura de la tabla y las columnas según los requisitos específicos de tu aplicación. Puedes agregar más columnas, definir restricciones o cambiar los tipos de datos según sea necesario. Este es solo un ejemplo básico de cómo crear una tabla en una base de datos SQLite utilizando Python.


Ejercicio del curso:

crear nueva tabla.py



/Fundamentos de Python/Persistencia/SQLite/Crear tabla/crear nueva tabla.py

1 import sqlite3 as db
2 import sys
3
4 conexion = db.connect("agenda.sqlite")
5 cursor = conexion.cursor()
6 cursor.execute('''
7 CREATE TABLE "contactos" (
8 "Identificador" INTEGER,
9 "nombre" TEXT,
10 "telefono" TEXT,
11 "email" TEXT,
12 PRIMARY KEY("Identificador" AUTOINCREMENT)
13 );
14 ''')





2.9.2.4.-Crear

Explicación


Para crear registros (filas) en una tabla de una base de datos SQLite utilizando Python y el módulo sqlite3, debes realizar una inserción de datos mediante una sentencia SQL INSERT INTO.


A continuación, se muestra un ejemplo de cómo insertar registros en la tabla de empleados que creamos previamente:


Suponiendo que la tabla empleados tiene las columnas id, nombre, apellido, edad y salario, aquí está cómo podrías insertar registros:


### Ejemplo de Inserción de Registros:


python

import sqlite3


# Conexión a la base de datos (si ya existe)

conexion = sqlite3.connect('mi_base_de_datos.db')


# Creación de un cursor para ejecutar comandos SQL

cursor = conexion.cursor()


# Datos para insertar en la tabla de empleados

nuevos_empleados = [

('Juan', 'Pérez', 30, 35000.00),

('María', 'García', 28, 42000.50),

('Luis', 'Martínez', 35, 50000.00)

]


# Sentencia SQL para insertar registros en la tabla

insertar_query = "INSERT INTO empleados (nombre, apellido, edad, salario) VALUES (?, ?, ?, ?)"


# Insertar los registros utilizando la sentencia SQL

cursor.executemany(insertar_query, nuevos_empleados)


# Guardar los cambios y cerrar la conexión

conexion.commit()

conexion.close()



Este código realiza los siguientes pasos:


1. Conecta con la base de datos SQLite ('mi_base_de_datos.db').

2. Crea un cursor para ejecutar comandos SQL.

3. Define una lista nuevos_empleados que contiene tuplas con los datos de los nuevos empleados que se insertarán en la tabla empleados.

4. Prepara una sentencia SQL de inserción utilizando INSERT INTO.

5. Utiliza cursor.executemany() para ejecutar la sentencia SQL y agregar múltiples registros a la tabla de empleados.

6. Finalmente, se guardan los cambios con commit() y se cierra la conexión con close().


Ten en cuenta que puedes modificar los datos y agregar la cantidad de registros que necesites, adaptando la sentencia SQL y los valores proporcionados a tus necesidades específicas de la aplicación.


Ejercicio del curso:

crear.py



/Fundamentos de Python/Persistencia/SQLite/Crear/crear.py

1 import sqlite3 as db
2 import sys
3
4 conexion = db.connect("agenda.sqlite")
5 cursor = conexion.cursor()
6 cursor.execute('''
7 INSERT INTO contactos VALUES (
8 NULL,
9 "Jose Vicente",
10 "1234",
11 "info@josevicentecarratala.com"
12 )
13 ''')
14 conexion.commit()





2.9.2.5.-Leer

Explicación


Para seleccionar registros (filas) de una tabla en una base de datos SQLite utilizando Python y el módulo sqlite3, se utiliza la sentencia SQL SELECT.


A continuación, se muestra un ejemplo de cómo puedes seleccionar registros de la tabla empleados que creamos anteriormente:


### Ejemplo de Selección de Registros:


python

import sqlite3


# Conexión a la base de datos (si ya existe)

conexion = sqlite3.connect('mi_base_de_datos.db')


# Creación de un cursor para ejecutar comandos SQL

cursor = conexion.cursor()


# Sentencia SQL para seleccionar todos los registros de la tabla empleados

seleccion_query = "SELECT * FROM empleados"


# Ejecutar la consulta SQL

cursor.execute(seleccion_query)


# Obtener los resultados de la consulta

registros = cursor.fetchall()


# Mostrar los registros obtenidos

for registro in registros:

print(registro)


# Cerrar la conexión

conexion.close()



Este código realiza lo siguiente:


1. Establece una conexión con la base de datos SQLite ('mi_base_de_datos.db').

2. Crea un cursor para ejecutar comandos SQL.

3. Define una sentencia SQL de selección SELECT * FROM empleados para obtener todos los registros de la tabla empleados.

4. Utiliza cursor.execute() para ejecutar la consulta SQL.

5. Obtiene los resultados de la consulta utilizando cursor.fetchall() y almacena los registros recuperados en la variable registros.

6. Itera sobre los registros obtenidos e imprime cada uno.


Puedes modificar la consulta SQL según tus necesidades, como agregar cláusulas WHERE, ORDER BY, LIMIT, entre otras, para filtrar, ordenar o limitar los resultados devueltos.


Recuerda ajustar la sentencia SQL y el procesamiento de los resultados según los criterios específicos que necesites para tu aplicación.


Ejercicio del curso:

read.py



/Fundamentos de Python/Persistencia/SQLite/Leer/read.py

1 import sqlite3 as db
2 import sys
3
4 conexion = db.connect("agenda.sqlite")
5 cursor = conexion.cursor()
6 cursor.execute('''
7 SELECT * FROM contactos
8 ''')
9 datos = cursor.fetchall()
10
11 for i in datos:
12 print("Identificador:",i[0],"\t nombre:",i[1],"\t telefono: ",i[2],"\t email:",i[3])
13
14 conexion.commit()





2.9.2.6.-Actualizar

Explicación


Para actualizar registros (filas) en una tabla de una base de datos SQLite usando Python y el módulo sqlite3, se emplea la sentencia SQL UPDATE.


A continuación, te muestro un ejemplo de cómo puedes actualizar registros en la tabla empleados que creamos previamente:


### Ejemplo de Actualización de Registros:


Supongamos que queremos actualizar el salario de un empleado específico con el nombre 'Juan' a 40000:


python

import sqlite3


# Conexión a la base de datos (si ya existe)

conexion = sqlite3.connect('mi_base_de_datos.db')


# Creación de un cursor para ejecutar comandos SQL

cursor = conexion.cursor()


# Datos para la actualización

nombre_empleado = 'Juan'

nuevo_salario = 40000


# Sentencia SQL para actualizar el salario de un empleado específico

actualizar_query = "UPDATE empleados SET salario = ? WHERE nombre = ?"


# Ejecutar la consulta SQL de actualización

cursor.execute(actualizar_query, (nuevo_salario, nombre_empleado))


# Guardar los cambios y cerrar la conexión

conexion.commit()

conexion.close()



Este código realiza lo siguiente:


1. Conecta con la base de datos SQLite ('mi_base_de_datos.db').

2. Crea un cursor para ejecutar comandos SQL.

3. Define variables para el nombre del empleado que se actualizará (nombre_empleado) y el nuevo salario (nuevo_salario).

4. Prepara una sentencia SQL de actualización UPDATE que actualiza el salario en la tabla empleados para un empleado específico utilizando WHERE nombre = ?.

5. Utiliza cursor.execute() con la sentencia SQL y una tupla de valores para ejecutar la consulta de actualización.

6. Guarda los cambios con commit() y cierra la conexión con close().


Recuerda que puedes ajustar la sentencia SQL y los valores proporcionados según tus necesidades específicas para actualizar registros en la base de datos SQLite.


Ejercicio del curso:

update.py



/Fundamentos de Python/Persistencia/SQLite/Actualizar/update.py

1 import sqlite3 as db
2 import sys
3
4 conexion = db.connect("agenda.sqlite")
5 cursor = conexion.cursor()
6 cursor.execute('''
7 UPDATE contactos
8 SET telefono = 'abc'
9 WHERE
10 Identificador = 1
11 ''')
12 conexion.commit()





2.9.2.7.-Elimiminar

Explicación



Ejercicio del curso:

eliminar.py



/Fundamentos de Python/Persistencia/SQLite/Elimiminar/eliminar.py

1 import sqlite3 as db
2 import sys
3
4 conexion = db.connect("agenda.sqlite")
5 cursor = conexion.cursor()
6 cursor.execute('''
7 DELETE FROM
8 contactos
9 WHERE Identificador = 1
10 ''')
11 conexion.commit()





2.9.2.8.-Borrar dato

Explicación



Ejercicio del curso:

borrardato.py



/Fundamentos de Python/Persistencia/SQLite/Borrar dato/borrardato.py

1 import sqlite3 as db
2 import sys
3
4 conexion = db.connect("agenda.sqlite")
5 cursor = conexion.cursor()
6 cursor.execute('''
7 UPDATE contactos
8 SET telefono = ''
9 WHERE
10 Identificador = 2
11 ''')
12 conexion.commit()





Ejercicio del curso:







3.-Ejercicio práctico

3.1.-Inicio

Estructura del directorio
agenda.py


Ejercicio del curso:



/Ejercicio práctico/Inicio/agenda.py

1 # Programa agenda (c) 2023 Jose Vicente Carratala
2 print("Programa agenda")





3.2.-MEnu

Estructura del directorio
agenda.py


Ejercicio del curso:



agenda.py

/Ejercicio práctico/MEnu/agenda.py

1 # Programa agenda (c) 2023 Jose Vicente Carratala
2 print("Programa agenda")
3 print('''
4 Selecciona una opción:
5 1.-Crear registro
6 2.-Listar registros
7 3.-Actualizar registros
8 4.-Eliminar registros
9 ''')
10 opcion = input()
11 print("La opción que has seleccionado es: "+opcion)

3.3.-Eleccion de registros

Estructura del directorio
agenda.py


Ejercicio del curso:



agenda.py

/Ejercicio práctico/Eleccion de registros/agenda.py

1 # Programa agenda (c) 2023 Jose Vicente Carratala
2 print("Programa agenda")
3 print('''
4 Selecciona una opción:
5 1.-Crear registro
6 2.-Listar registros
7 3.-Actualizar registros
8 4.-Eliminar registros
9 ''')
10 opcion = input()
11 print("La opción que has seleccionado es: "+opcion)
12
13 if opcion == "1":
14 print("Insertamos un nuevo registro")
15 elif opcion == "2":
16 print("Listado de registros")
17 elif opcion == "3":
18 print("Actualización de un registro")
19 elif opcion == "4":
20 print("Eliminación de registros")

3.4.-Menu en funcion

Estructura del directorio
agenda.py


Ejercicio del curso:



agenda.py

/Ejercicio práctico/Menu en funcion/agenda.py

1 # Programa agenda (c) 2023 Jose Vicente Carratala
2 print("Programa agenda")
3 + def menu():
4 + print('''
5 + Selecciona una opción:
6 + 1.-Crear registro
7 + 2.-Listar registros
8 + 3.-Actualizar registros
9 + 4.-Eliminar registros
10 + ''')
11 + opcion = input()
12 + print("La opción que has seleccionado es: "+opcion)
13 +
14 + if opcion == "1":
15 + print("Insertamos un nuevo registro")
16 + elif opcion == "2":
17 + print("Listado de registros")
18 + elif opcion == "3":
19 + print("Actualización de un registro")
20 + elif opcion == "4":
21 print("Eliminación de registros")
22
23 print("Operación finalizada, volvemos al menú:")
24 menu()
25
26 menu()

3.5.-Salir del programa

Estructura del directorio
agenda.py


Ejercicio del curso:



agenda.py

/Ejercicio práctico/Salir del programa/agenda.py

1 # Programa agenda (c) 2023 Jose Vicente Carratala
2 print("Programa agenda")
3 def menu():
4 print('''
5 Selecciona una opción:
6 1.-Crear registro
7 2.-Listar registros
8 3.-Actualizar registros
9 + 4.-Eliminar registros
10 + 5.-Salir del programa
11 + ''')
12 + opcion = input()
13 + print("La opción que has seleccionado es: "+opcion)
14 +
15 + if opcion == "1":
16 + print("Insertamos un nuevo registro")
17 + elif opcion == "2":
18 + print("Listado de registros")
19 + elif opcion == "3":
20 + print("Actualización de un registro")
21 + elif opcion == "4":
22 + print("Eliminación de registros")
23 + elif opcion == "5":
24 + print("Saliendo del programa...")
25 + exit()
26 +
27 print("Operación finalizada, volvemos al menú:")
28 menu()
29
30 menu()

3.6.-Insertar un registro

Estructura del directorio
agenda.py


Ejercicio del curso:



agenda.py

/Ejercicio práctico/Insertar un registro/agenda.py

1 # Programa agenda (c) 2023 Jose Vicente Carratala
2 print("Programa agenda")
3 def menu():
4 print('''
5 Selecciona una opción:
6 1.-Crear registro
7 2.-Listar registros
8 3.-Actualizar registros
9 4.-Eliminar registros
10 5.-Salir del programa
11 ''')
12 opcion = input()
13 print("La opción que has seleccionado es: "+opcion)
14
15 if opcion == "1":
16 print("Insertamos un nuevo registro")
17 + nombre = input("Introduce un nuevo nombre:")
18 + telefono = input("Introduce un nuevo teléfono:")
19 + email = input("Introduce un nuevo email:")
20 + elif opcion == "2":
21 + print("Listado de registros")
22 + elif opcion == "3":
23 + print("Actualización de un registro")
24 + elif opcion == "4":
25 + print("Eliminación de registros")
26 + elif opcion == "5":
27 + print("Saliendo del programa...")
28 + exit()
29 +
30 + print("Operación finalizada, volvemos al menú:")
31 menu()
32
33 menu()

3.7.-Conexión con SQLite

Estructura del directorio
agenda.py
agenda.sqlite


Ejercicio del curso:



Ejercicio del curso:



agenda.py

/Ejercicio práctico/Conexión con SQLite/agenda.py

1 # Programa agenda (c) 2023 Jose Vicente Carratala
2 +
3 + import sqlite3 as db
4 + import sys
5 +
6 + conexion = db.connect("agenda.sqlite")
7 + cursor = conexion.cursor()
8 + cursor.execute('''
9 + CREATE TABLE IF NOT EXISTS "contactos" (
10 + "Identificador" INTEGER,
11 + "nombre" TEXT,
12 + "telefono" TEXT,
13 + "email" TEXT,
14 + PRIMARY KEY("Identificador" AUTOINCREMENT)
15 + );
16 + ''')
17 +
18 + print("Programa agenda")
19 + def menu():
20 + print('''
21 + Selecciona una opción:
22 + 1.-Crear registro
23 + 2.-Listar registros
24 + 3.-Actualizar registros
25 + 4.-Eliminar registros
26 + 5.-Salir del programa
27 + ''')
28 + opcion = input()
29 + print("La opción que has seleccionado es: "+opcion)
30 +
31 + if opcion == "1":
32 + print("Insertamos un nuevo registro")
33 + nombre = input("Introduce un nuevo nombre:")
34 telefono = input("Introduce un nuevo teléfono:")
35 email = input("Introduce un nuevo email:")
36 elif opcion == "2":
37 print("Listado de registros")
38 elif opcion == "3":
39 print("Actualización de un registro")
40 elif opcion == "4":
41 print("Eliminación de registros")
42 elif opcion == "5":
43 print("Saliendo del programa...")
44 exit()
45
46 print("Operación finalizada, volvemos al menú:")
47 menu()
48
49 menu()





3.8.-Insertar registro

Estructura del directorio
agenda.py
agenda.sqlite


Ejercicio del curso:



Ejercicio del curso:



agenda.py

/Ejercicio práctico/Insertar registro/agenda.py

1 # Programa agenda (c) 2023 Jose Vicente Carratala
2
3 import sqlite3 as db
4 import sys
5
6 conexion = db.connect("agenda.sqlite")
7 cursor = conexion.cursor()
8 cursor.execute('''
9 CREATE TABLE IF NOT EXISTS "contactos" (
10 "Identificador" INTEGER,
11 "nombre" TEXT,
12 "telefono" TEXT,
13 "email" TEXT,
14 PRIMARY KEY("Identificador" AUTOINCREMENT)
15 );
16 ''')
17
18 print("Programa agenda")
19 def menu():
20 print('''
21 Selecciona una opción:
22 1.-Crear registro
23 2.-Listar registros
24 3.-Actualizar registros
25 4.-Eliminar registros
26 5.-Salir del programa
27 ''')
28 opcion = input()
29 print("La opción que has seleccionado es: "+opcion)
30
31 if opcion == "1":
32 print("Insertamos un nuevo registro")
33 nombre = input("Introduce un nuevo nombre:")
34 telefono = input("Introduce un nuevo teléfono:")
35 email = input("Introduce un nuevo email:")
36 + cursor.execute('''
37 + INSERT INTO contactos VALUES (
38 + NULL,
39 + "'''+nombre+'''",
40 + "'''+telefono+'''",
41 + "'''+email+'''"
42 + )
43 + ''')
44 + conexion.commit()
45 + elif opcion == "2":
46 + print("Listado de registros")
47 + elif opcion == "3":
48 + print("Actualización de un registro")
49 + elif opcion == "4":
50 print("Eliminación de registros")
51 elif opcion == "5":
52 print("Saliendo del programa...")
53 exit()
54
55 print("Operación finalizada, volvemos al menú:")
56 menu()
57
58 menu()

3.9.-Listado de registros

Estructura del directorio
agenda.py
agenda.sqlite


Ejercicio del curso:



Ejercicio del curso:



agenda.py

/Ejercicio práctico/Listado de registros/agenda.py

1 # Programa agenda (c) 2023 Jose Vicente Carratala
2
3 import sqlite3 as db
4 import sys
5
6 conexion = db.connect("agenda.sqlite")
7 cursor = conexion.cursor()
8 cursor.execute('''
9 CREATE TABLE IF NOT EXISTS "contactos" (
10 "Identificador" INTEGER,
11 "nombre" TEXT,
12 "telefono" TEXT,
13 "email" TEXT,
14 PRIMARY KEY("Identificador" AUTOINCREMENT)
15 );
16 ''')
17
18 print("Programa agenda")
19 def menu():
20 print('''
21 Selecciona una opción:
22 1.-Crear registro
23 2.-Listar registros
24 3.-Actualizar registros
25 4.-Eliminar registros
26 5.-Salir del programa
27 ''')
28 opcion = input()
29 print("La opción que has seleccionado es: "+opcion)
30
31 if opcion == "1":
32 print("Insertamos un nuevo registro")
33 nombre = input("Introduce un nuevo nombre:")
34 telefono = input("Introduce un nuevo teléfono:")
35 email = input("Introduce un nuevo email:")
36 cursor.execute('''
37 INSERT INTO contactos VALUES (
38 NULL,
39 "'''+nombre+'''",
40 "'''+telefono+'''",
41 "'''+email+'''"
42 )
43 ''')
44 conexion.commit()
45 elif opcion == "2":
46 print("Listado de registros")
47 + cursor.execute('''
48 + SELECT * FROM contactos
49 + ''')
50 + datos = cursor.fetchall()
51 +
52 + for i in datos:
53 + print('''
54 + Identificador:'''+str(i[0])+'''###############
55 + nombre:'''+str(i[1])+'''
56 + telefono: '''+str(i[2])+'''
57 + email:'''+str(i[3])+'''
58 +
59 ''')
60 elif opcion == "3":
61 print("Actualización de un registro")
62 elif opcion == "4":
63 print("Eliminación de registros")
64 elif opcion == "5":
65 print("Saliendo del programa...")
66 exit()
67
68 print("Operación finalizada, volvemos al menú:")
69 menu()
70
71 menu()

3.10.-Eliminar

Estructura del directorio
agenda.py
agenda.sqlite


Ejercicio del curso:



Ejercicio del curso:



agenda.py

/Ejercicio práctico/Eliminar/agenda.py

1 # Programa agenda (c) 2023 Jose Vicente Carratala
2
3 import sqlite3 as db
4 import sys
5
6 conexion = db.connect("agenda.sqlite")
7 cursor = conexion.cursor()
8 cursor.execute('''
9 CREATE TABLE IF NOT EXISTS "contactos" (
10 "Identificador" INTEGER,
11 "nombre" TEXT,
12 "telefono" TEXT,
13 "email" TEXT,
14 PRIMARY KEY("Identificador" AUTOINCREMENT)
15 );
16 ''')
17
18 print("Programa agenda")
19 def menu():
20 print('''
21 Selecciona una opción:
22 1.-Crear registro
23 2.-Listar registros
24 3.-Actualizar registros
25 4.-Eliminar registros
26 5.-Salir del programa
27 ''')
28 opcion = input()
29 print("La opción que has seleccionado es: "+opcion)
30
31 if opcion == "1":
32 print("Insertamos un nuevo registro")
33 nombre = input("Introduce un nuevo nombre:")
34 telefono = input("Introduce un nuevo teléfono:")
35 email = input("Introduce un nuevo email:")
36 cursor.execute('''
37 INSERT INTO contactos VALUES (
38 NULL,
39 "'''+nombre+'''",
40 "'''+telefono+'''",
41 "'''+email+'''"
42 )
43 ''')
44 conexion.commit()
45 elif opcion == "2":
46 print("Listado de registros")
47 cursor.execute('''
48 SELECT * FROM contactos
49 ''')
50 datos = cursor.fetchall()
51
52 for i in datos:
53 print('''
54 Identificador:'''+str(i[0])+'''###############
55 nombre:'''+str(i[1])+'''
56 telefono: '''+str(i[2])+'''
57 email:'''+str(i[3])+'''
58
59 ''')
60 elif opcion == "3":
61 print("Actualización de un registro")
62 elif opcion == "4":
63 print("Eliminación de registros")
64 + identificador = input("Selecciona el registro para eliminar")
65 + cursor.execute('''
66 + DELETE FROM
67 + contactos
68 + WHERE Identificador = '''+identificador+'''
69 + ''')
70 + conexion.commit()
71 + elif opcion == "5":
72 print("Saliendo del programa...")
73 exit()
74
75 print("Operación finalizada, volvemos al menú:")
76 menu()
77
78 menu()

3.11.-Actualizar registros

Estructura del directorio
agenda.py
agenda.sqlite


Ejercicio del curso:



Ejercicio del curso:



agenda.py

/Ejercicio práctico/Actualizar registros/agenda.py

1 # Programa agenda (c) 2023 Jose Vicente Carratala
2
3 import sqlite3 as db
4 import sys
5
6 conexion = db.connect("agenda.sqlite")
7 cursor = conexion.cursor()
8 cursor.execute('''
9 CREATE TABLE IF NOT EXISTS "contactos" (
10 "Identificador" INTEGER,
11 "nombre" TEXT,
12 "telefono" TEXT,
13 "email" TEXT,
14 PRIMARY KEY("Identificador" AUTOINCREMENT)
15 );
16 ''')
17
18 print("Programa agenda")
19 def menu():
20 print('''
21 Selecciona una opción:
22 1.-Crear registro
23 2.-Listar registros
24 3.-Actualizar registros
25 4.-Eliminar registros
26 5.-Salir del programa
27 ''')
28 opcion = input()
29 print("La opción que has seleccionado es: "+opcion)
30
31 if opcion == "1":
32 print("Insertamos un nuevo registro")
33 nombre = input("Introduce un nuevo nombre:")
34 telefono = input("Introduce un nuevo teléfono:")
35 email = input("Introduce un nuevo email:")
36 cursor.execute('''
37 INSERT INTO contactos VALUES (
38 NULL,
39 "'''+nombre+'''",
40 "'''+telefono+'''",
41 "'''+email+'''"
42 )
43 ''')
44 conexion.commit()
45 elif opcion == "2":
46 print("Listado de registros")
47 cursor.execute('''
48 SELECT * FROM contactos
49 ''')
50 datos = cursor.fetchall()
51
52 for i in datos:
53 print('''
54 Identificador:'''+str(i[0])+'''###############
55 nombre:'''+str(i[1])+'''
56 telefono: '''+str(i[2])+'''
57 email:'''+str(i[3])+'''
58
59 ''')
60 elif opcion == "3":
61 print("Actualización de un registro")
62 + identificador = input("Introduce el registro que deseas actualizar: ")
63 + nombre = input("Introduce un nuevo nombre:")
64 + telefono = input("Introduce un nuevo teléfono:")
65 + email = input("Introduce un nuevo email:")
66 + cursor.execute('''
67 + UPDATE contactos SET
68 +
69 + nombre = "'''+nombre+'''",
70 + telefono = "'''+telefono+'''",
71 + email = "'''+email+'''"
72 +
73 + WHERE Identificador = '''+identificador+'''
74 + ''')
75 + conexion.commit()
76 + elif opcion == "4":
77 + print("Eliminación de registros")
78 + identificador = input("Selecciona el registro para eliminar: ")
79 cursor.execute('''
80 DELETE FROM
81 contactos
82 WHERE Identificador = '''+identificador+'''
83 ''')
84 conexion.commit()
85 elif opcion == "5":
86 print("Saliendo del programa...")
87 exit()
88
89 print("Operación finalizada, volvemos al menú:")
90 menu()
91
92 menu()

3.12.-Extracción en funciones

Estructura del directorio
agenda.py
agenda.sqlite


Ejercicio del curso:



Ejercicio del curso:



agenda.py

/Ejercicio práctico/Extracción en funciones/agenda.py

1 # Programa agenda (c) 2023 Jose Vicente Carratala
2
3 import sqlite3 as db
4 import sys
5
6 conexion = db.connect("agenda.sqlite")
7 cursor = conexion.cursor()
8 cursor.execute('''
9 CREATE TABLE IF NOT EXISTS "contactos" (
10 "Identificador" INTEGER,
11 "nombre" TEXT,
12 "telefono" TEXT,
13 "email" TEXT,
14 PRIMARY KEY("Identificador" AUTOINCREMENT)
15 );
16 ''')
17
18 print("Programa agenda")
19 + def insertar():
20 + print("Insertamos un nuevo registro")
21 + nombre = input("Introduce un nuevo nombre:")
22 + telefono = input("Introduce un nuevo teléfono:")
23 + email = input("Introduce un nuevo email:")
24 + cursor.execute('''
25 + INSERT INTO contactos VALUES (
26 + NULL,
27 + "'''+nombre+'''",
28 + "'''+telefono+'''",
29 + "'''+email+'''"
30 + )
31 + ''')
32 + conexion.commit()
33 + def menu():
34 + print('''
35 + Selecciona una opción:
36 + 1.-Crear registro
37 + 2.-Listar registros
38 + 3.-Actualizar registros
39 + 4.-Eliminar registros
40 + 5.-Salir del programa
41 + ''')
42 + opcion = input()
43 + print("La opción que has seleccionado es: "+opcion)
44 +
45 + if opcion == "1":
46 + insertar()
47 + elif opcion == "2":
48 + print("Listado de registros")
49 + cursor.execute('''
50 + SELECT * FROM contactos
51 + ''')
52 + datos = cursor.fetchall()
53 +
54 + for i in datos:
55 + print('''
56 + Identificador:'''+str(i[0])+'''###############
57 + nombre:'''+str(i[1])+'''
58 + telefono: '''+str(i[2])+'''
59 + email:'''+str(i[3])+'''
60 +
61 + ''')
62 + elif opcion == "3":
63 + print("Actualización de un registro")
64 + identificador = input("Introduce el registro que deseas actualizar: ")
65 + nombre = input("Introduce un nuevo nombre:")
66 + telefono = input("Introduce un nuevo teléfono:")
67 + email = input("Introduce un nuevo email:")
68 + cursor.execute('''
69 + UPDATE contactos SET
70 +
71 + nombre = "'''+nombre+'''",
72 + telefono = "'''+telefono+'''",
73 + email = "'''+email+'''"
74 +
75 + WHERE Identificador = '''+identificador+'''
76 + ''')
77 + conexion.commit()
78 + elif opcion == "4":
79 + print("Eliminación de registros")
80 + identificador = input("Selecciona el registro para eliminar: ")
81 + cursor.execute('''
82 + DELETE FROM
83 + contactos
84 + WHERE Identificador = '''+identificador+'''
85 + ''')
86 + conexion.commit()
87 + elif opcion == "5":
88 + print("Saliendo del programa...")
89 + exit()
90 +
91 + print("Operación finalizada, volvemos al menú:")
92 + menu()
93
94 menu()

3.13.-Resto de funciones

Estructura del directorio
agenda.py
agenda.sqlite


Ejercicio del curso:



Ejercicio del curso:



agenda.py

/Ejercicio práctico/Resto de funciones/agenda.py

1 # Programa agenda (c) 2023 Jose Vicente Carratala
2
3 import sqlite3 as db
4 import sys
5
6 conexion = db.connect("agenda.sqlite")
7 cursor = conexion.cursor()
8 cursor.execute('''
9 CREATE TABLE IF NOT EXISTS "contactos" (
10 "Identificador" INTEGER,
11 "nombre" TEXT,
12 "telefono" TEXT,
13 "email" TEXT,
14 PRIMARY KEY("Identificador" AUTOINCREMENT)
15 );
16 ''')
17
18 print("Programa agenda")
19 def insertar():
20 print("Insertamos un nuevo registro")
21 nombre = input("Introduce un nuevo nombre:")
22 telefono = input("Introduce un nuevo teléfono:")
23 email = input("Introduce un nuevo email:")
24 cursor.execute('''
25 INSERT INTO contactos VALUES (
26 NULL,
27 "'''+nombre+'''",
28 "'''+telefono+'''",
29 "'''+email+'''"
30 )
31 ''')
32 conexion.commit()
33 +
34 + def leer():
35 + print("Listado de registros")
36 + cursor.execute('''
37 + SELECT * FROM contactos
38 + ''')
39 + datos = cursor.fetchall()
40 +
41 + for i in datos:
42 + print('''
43 + Identificador:'''+str(i[0])+'''###############
44 + nombre:'''+str(i[1])+'''
45 + telefono: '''+str(i[2])+'''
46 + email:'''+str(i[3])+'''
47 +
48 + ''')
49 +
50 + def actualizar():
51 + print("Actualización de un registro")
52 + identificador = input("Introduce el registro que deseas actualizar: ")
53 + nombre = input("Introduce un nuevo nombre:")
54 + telefono = input("Introduce un nuevo teléfono:")
55 + email = input("Introduce un nuevo email:")
56 + cursor.execute('''
57 + UPDATE contactos SET
58 +
59 + nombre = "'''+nombre+'''",
60 + telefono = "'''+telefono+'''",
61 + email = "'''+email+'''"
62 +
63 + WHERE Identificador = '''+identificador+'''
64 + ''')
65 + conexion.commit()
66 +
67 + def eliminar():
68 + print("Eliminación de registros")
69 + identificador = input("Selecciona el registro para eliminar: ")
70 + cursor.execute('''
71 + DELETE FROM
72 + contactos
73 + WHERE Identificador = '''+identificador+'''
74 + ''')
75 + conexion.commit()
76 + def salir():
77 + print("Saliendo del programa...")
78 + exit()
79 +
80 + def menu():
81 + print('''
82 + Selecciona una opción:
83 + 1.-Crear registro
84 + 2.-Listar registros
85 + 3.-Actualizar registros
86 + 4.-Eliminar registros
87 + 5.-Salir del programa
88 + ''')
89 + opcion = input()
90 + print("La opción que has seleccionado es: "+opcion)
91 +
92 + if opcion == "1":
93 + insertar()
94 + elif opcion == "2":
95 leer()
96 elif opcion == "3":
97 actualizar()
98 elif opcion == "4":
99 eliminar()
100 elif opcion == "5":
101 salir()
102
103 print("Operación finalizada, volvemos al menú:")
104 menu()
105
106 menu()

3.14.-Funciones a librerías

Estructura del directorio
agenda.py
agenda.sqlite
funciones.py
__pycache__
310.pyc
311.pyc


Ejercicio del curso:



Ejercicio del curso:



agenda.py

/Ejercicio práctico/Funciones a librerías/agenda.py

1 # Programa agenda (c) 2023 Jose Vicente Carratala
2
3 + from funciones import *
4 +
5 + print("Programa agenda")
6 +
7 + menu()

Ejercicio del curso:



/Ejercicio práctico/Funciones a librerías/funciones.py

1 import sqlite3 as db
2 import sys
3 conexion = db.connect("agenda.sqlite")
4 cursor = conexion.cursor()
5 cursor.execute('''
6 CREATE TABLE IF NOT EXISTS "contactos" (
7 "Identificador" INTEGER,
8 "nombre" TEXT,
9 "telefono" TEXT,
10 "email" TEXT,
11 PRIMARY KEY("Identificador" AUTOINCREMENT)
12 );
13 ''')
14
15 def menu():
16 print('''
17 Selecciona una opción:
18 1.-Crear registro
19 2.-Listar registros
20 3.-Actualizar registros
21 4.-Eliminar registros
22 5.-Salir del programa
23 ''')
24 opcion = input()
25 print("La opción que has seleccionado es: "+opcion)
26
27 if opcion == "1":
28 insertar()
29 elif opcion == "2":
30 leer()
31 elif opcion == "3":
32 actualizar()
33 elif opcion == "4":
34 eliminar()
35 elif opcion == "5":
36 salir()
37
38 print("Operación finalizada, volvemos al menú:")
39 menu()
40
41
42 def actualizar():
43 print("Actualización de un registro")
44 identificador = input("Introduce el registro que deseas actualizar: ")
45 nombre = input("Introduce un nuevo nombre:")
46 telefono = input("Introduce un nuevo teléfono:")
47 email = input("Introduce un nuevo email:")
48 cursor.execute('''
49 UPDATE contactos SET
50
51 nombre = "'''+nombre+'''",
52 telefono = "'''+telefono+'''",
53 email = "'''+email+'''"
54
55 WHERE Identificador = '''+identificador+'''
56 ''')
57 conexion.commit()
58
59 def eliminar():
60 print("Eliminación de registros")
61 identificador = input("Selecciona el registro para eliminar: ")
62 cursor.execute('''
63 DELETE FROM
64 contactos
65 WHERE Identificador = '''+identificador+'''
66 ''')
67 conexion.commit()
68
69 def leer():
70 print("Listado de registros")
71 cursor.execute('''
72 SELECT * FROM contactos
73 ''')
74 datos = cursor.fetchall()
75
76 for i in datos:
77 print('''
78 Identificador:'''+str(i[0])+'''###############
79 nombre:'''+str(i[1])+'''
80 telefono: '''+str(i[2])+'''
81 email:'''+str(i[3])+'''
82
83 ''')
84
85 def salir():
86 print("Saliendo del programa...")
87 exit()
88
89 def insertar():
90 print("Insertamos un nuevo registro")
91 nombre = input("Introduce un nuevo nombre:")
92 telefono = input("Introduce un nuevo teléfono:")
93 email = input("Introduce un nuevo email:")
94 cursor.execute('''
95 INSERT INTO contactos VALUES (
96 NULL,
97 "'''+nombre+'''",
98 "'''+telefono+'''",
99 "'''+email+'''"
100 )
101 ''')
102 conexion.commit()
103
104





Ejercicio del curso:

310.pyc







Ejercicio del curso:

311.pyc







3.15.-Datos en actualizacion

Estructura del directorio
agenda.py
agenda.sqlite
funciones.py
__pycache__
310.pyc
311.pyc


Ejercicio del curso:



Ejercicio del curso:



agenda.py

/Ejercicio práctico/Datos en actualizacion/agenda.py

1 # Programa agenda (c) 2023 Jose Vicente Carratala
2
3 + from funciones import *
4 +
5 + print("Programa agenda")
6 +
7 + menu()

Ejercicio del curso:



funciones.py

/Ejercicio práctico/Datos en actualizacion/funciones.py

1 import sqlite3 as db
2 import sys
3 conexion = db.connect("agenda.sqlite")
4 cursor = conexion.cursor()
5 cursor.execute('''
6 CREATE TABLE IF NOT EXISTS "contactos" (
7 "Identificador" INTEGER,
8 "nombre" TEXT,
9 "telefono" TEXT,
10 "email" TEXT,
11 PRIMARY KEY("Identificador" AUTOINCREMENT)
12 );
13 ''')
14
15 def menu():
16 print('''
17 Selecciona una opción:
18 1.-Crear registro
19 2.-Listar registros
20 3.-Actualizar registros
21 4.-Eliminar registros
22 5.-Salir del programa
23 ''')
24 opcion = input()
25 print("La opción que has seleccionado es: "+opcion)
26
27 if opcion == "1":
28 insertar()
29 elif opcion == "2":
30 leer()
31 elif opcion == "3":
32 actualizar()
33 elif opcion == "4":
34 eliminar()
35 elif opcion == "5":
36 salir()
37
38 print("Operación finalizada, volvemos al menú:")
39 menu()
40
41
42 def actualizar():
43 print("Actualización de un registro")
44 identificador = input("Introduce el registro que deseas actualizar: ")
45 + cursor.execute('''
46 + SELECT * FROM contactos
47 + WHERE Identificador = '''+identificador+'''
48 + ''')
49 + datos = cursor.fetchall()
50 + nombreanterior = ""
51 + telefonoanterior = ""
52 + correoanterior = ""
53 + for i in datos:
54 + nombreanterior = str(i[1])
55 + telefonoanterior = str(i[2])
56 + correoanterior = str(i[3])
57 +
58 + nombre = input("Introduce un nuevo nombre ("+nombreanterior+"):")
59 + telefono = input("Introduce un nuevo teléfono ("+telefonoanterior+"):")
60 + email = input("Introduce un nuevo email ("+correoanterior+"):")
61 + cursor.execute('''
62 + UPDATE contactos SET
63 +
64 + nombre = "'''+nombre+'''",
65 + telefono = "'''+telefono+'''",
66 + email = "'''+email+'''"
67 +
68 + WHERE Identificador = '''+identificador+'''
69 + ''')
70 + conexion.commit()
71 +
72 + def eliminar():
73 + print("Eliminación de registros")
74 + identificador = input("Selecciona el registro para eliminar: ")
75 + cursor.execute('''
76 + DELETE FROM
77 + contactos
78 + WHERE Identificador = '''+identificador+'''
79 + ''')
80 + conexion.commit()
81 +
82 + def leer():
83 + print("Listado de registros")
84 + cursor.execute('''
85 + SELECT * FROM contactos
86 + ''')
87 + datos = cursor.fetchall()
88
89 + for i in datos:
90 + print('''
91 + Identificador:'''+str(i[0])+'''###############
92 + nombre:'''+str(i[1])+'''
93 + telefono: '''+str(i[2])+'''
94 + email:'''+str(i[3])+'''
95 +
96 + ''')
97 +
98 + def salir():
99 + print("Saliendo del programa...")
100 + exit()
101 +
102 + def insertar():
103 + print("Insertamos un nuevo registro")
104 + nombre = input("Introduce un nuevo nombre:")
105 telefono = input("Introduce un nuevo teléfono:")
106 email = input("Introduce un nuevo email:")
107 cursor.execute('''
108 INSERT INTO contactos VALUES (
109 NULL,
110 "'''+nombre+'''",
111 "'''+telefono+'''",
112 "'''+email+'''"
113 )
114 ''')
115 conexion.commit()
116
117

Ejercicio del curso:

310.pyc



Ejercicio del curso:

311.pyc



3.16.-No sobreescribir si está en blanco

Estructura del directorio
agenda.py
agenda.sqlite
funciones.py
__pycache__
310.pyc
311.pyc


Ejercicio del curso:



Ejercicio del curso:



agenda.py

/Ejercicio práctico/No sobreescribir si está en blanco/agenda.py

1 # Programa agenda (c) 2023 Jose Vicente Carratala
2
3 + from funciones import *
4 +
5 + print("Programa agenda")
6 +
7 + menu()

Ejercicio del curso:



funciones.py

/Ejercicio práctico/No sobreescribir si está en blanco/funciones.py

1 import sqlite3 as db
2 import sys
3 conexion = db.connect("agenda.sqlite")
4 cursor = conexion.cursor()
5 cursor.execute('''
6 CREATE TABLE IF NOT EXISTS "contactos" (
7 "Identificador" INTEGER,
8 "nombre" TEXT,
9 "telefono" TEXT,
10 "email" TEXT,
11 PRIMARY KEY("Identificador" AUTOINCREMENT)
12 );
13 ''')
14
15 def menu():
16 print('''
17 Selecciona una opción:
18 1.-Crear registro
19 2.-Listar registros
20 3.-Actualizar registros
21 4.-Eliminar registros
22 5.-Salir del programa
23 ''')
24 opcion = input()
25 print("La opción que has seleccionado es: "+opcion)
26
27 if opcion == "1":
28 insertar()
29 elif opcion == "2":
30 leer()
31 elif opcion == "3":
32 actualizar()
33 elif opcion == "4":
34 eliminar()
35 elif opcion == "5":
36 salir()
37
38 print("Operación finalizada, volvemos al menú:")
39 menu()
40
41
42 def actualizar():
43 print("Actualización de un registro")
44 identificador = input("Introduce el registro que deseas actualizar: ")
45 cursor.execute('''
46 SELECT * FROM contactos
47 WHERE Identificador = '''+identificador+'''
48 ''')
49 datos = cursor.fetchall()
50 nombreanterior = ""
51 telefonoanterior = ""
52 correoanterior = ""
53 for i in datos:
54 nombreanterior = str(i[1])
55 telefonoanterior = str(i[2])
56 correoanterior = str(i[3])
57
58 nombre = input("Introduce un nuevo nombre ("+nombreanterior+"):")
59 telefono = input("Introduce un nuevo teléfono ("+telefonoanterior+"):")
60 email = input("Introduce un nuevo email ("+correoanterior+"):")
61 + if nombre == "":
62 + nombre = nombreanterior
63 + if telefono == "":
64 + telefono = telefonoanterior
65 + if email == "":
66 + email = correoanterior
67 + cursor.execute('''
68 + UPDATE contactos SET
69 +
70 + nombre = "'''+nombre+'''",
71 + telefono = "'''+telefono+'''",
72 + email = "'''+email+'''"
73 +
74 + WHERE Identificador = '''+identificador+'''
75 + ''')
76 + conexion.commit()
77 +
78 + def eliminar():
79 + print("Eliminación de registros")
80 + identificador = input("Selecciona el registro para eliminar: ")
81 + cursor.execute('''
82 + DELETE FROM
83 + contactos
84 + WHERE Identificador = '''+identificador+'''
85 + ''')
86 + conexion.commit()
87 +
88 + def leer():
89 + print("Listado de registros")
90 + cursor.execute('''
91 + SELECT * FROM contactos
92 + ''')
93 + datos = cursor.fetchall()
94 +
95 + for i in datos:
96 + print('''
97 + Identificador:'''+str(i[0])+'''###############
98 + nombre:'''+str(i[1])+'''
99 + telefono: '''+str(i[2])+'''
100 + email:'''+str(i[3])+'''
101
102 + ''')
103 +
104 + def salir():
105 + print("Saliendo del programa...")
106 + exit()
107 +
108 + def insertar():
109 + print("Insertamos un nuevo registro")
110 + nombre = input("Introduce un nuevo nombre:")
111 + telefono = input("Introduce un nuevo teléfono:")
112 + email = input("Introduce un nuevo email:")
113 + cursor.execute('''
114 + INSERT INTO contactos VALUES (
115 + NULL,
116 + "'''+nombre+'''",
117 + "'''+telefono+'''",
118 "'''+email+'''"
119 )
120 ''')
121 conexion.commit()
122
123

Ejercicio del curso:

310.pyc



Ejercicio del curso:

311.pyc



Ejercicio del curso:



agenda.py

/Ejercicio práctico/agenda.py

4.-Tkinter

4.1.-Ejercicio Ventana

Ejercicio del curso:

Ventana.py



/Tkinter/Ejercicio Ventana/Ventana.py

1 import tkinter as interfaz
2
3 raiz = interfaz.Tk()





Ejercicio del curso:

Geometria.py



/Tkinter/Ejercicio Ventana/Geometria.py

1 import tkinter as interfaz
2
3 raiz = interfaz.Tk()





Ejercicio del curso:

Mainloop.py



/Tkinter/Ejercicio Ventana/Mainloop.py

1 import tkinter as interfaz
2
3 raiz = interfaz.Tk()
4
5 raiz.mainloop()





Ejercicio del curso:

Dimensiones.py



/Tkinter/Ejercicio Ventana/Dimensiones.py

1 import tkinter as interfaz
2
3 raiz = interfaz.Tk()
4 raiz.geometry("600x600")
5
6 raiz.mainloop()





Ejercicio del curso:

Título.py



/Tkinter/Ejercicio Ventana/Título.py

1 import tkinter as interfaz
2
3 raiz = interfaz.Tk()
4 raiz.geometry("600x600")
5 raiz.title("Programa de Jose Vicente Carratalá")
6
7 raiz.mainloop()





Ejercicio del curso:

Icono.py



/Tkinter/Ejercicio Ventana/Icono.py

1 import tkinter as interfaz
2
3 raiz = interfaz.Tk()
4 raiz.geometry("600x600")
5 raiz.title("Programa de Jose Vicente Carratalá")
6
7
8 raiz.mainloop()





Ejercicio del curso:

Margenes.py



/Tkinter/Ejercicio Ventana/Margenes.py

1 import tkinter as interfaz
2
3 raiz = interfaz.Tk()
4 raiz.geometry("600x600+500+500")
5 raiz.title("Programa de Jose Vicente Carratalá")
6
7
8 raiz.mainloop()





Ejercicio del curso:

icono.py



/Tkinter/Ejercicio Ventana/icono.py

1 import tkinter as interfaz
2
3 raiz = interfaz.Tk()
4 raiz.geometry("600x600+50+50")
5 raiz.title("Programa de Jose Vicente Carratalá")
6 raiz.iconbitmap("icono.ico")
7
8 raiz.mainloop()





Ejercicio del curso:







4.2.-Ejercicio Contenedores

Ejercicio del curso:

Panel.py



/Tkinter/Ejercicio Contenedores/Panel.py

1 import tkinter as interfaz
2
3 raiz = interfaz.Tk()
4 raiz.geometry("600x600+50+50")
5 raiz.title("Programa de Jose Vicente Carratalá")
6 raiz.iconbitmap("icono.ico")
7
8 panel = interfaz.Frame()
9 panel.pack()
10
11 raiz.mainloop()





Ejercicio del curso:



4.3.-Controles de formulario

Ejercicio del curso:

Label.py



/Tkinter/Controles de formulario/Label.py

1 import tkinter as interfaz
2
3 raiz = interfaz.Tk()
4 raiz.geometry("600x600+50+50")
5 raiz.title("Programa de Jose Vicente Carratalá")
6 raiz.iconbitmap("icono.ico")
7
8 panel = interfaz.Frame()
9 panel.pack()
10
11 etiqueta = interfaz.Label(panel,text="Hola mundo")
12 etiqueta.pack()
13
14 raiz.mainloop()





Ejercicio del curso:

LabelEstilo.py



/Tkinter/Controles de formulario/LabelEstilo.py

1 import tkinter as interfaz
2
3 raiz = interfaz.Tk()
4 raiz.geometry("600x600+50+50")
5 raiz.title("Programa de Jose Vicente Carratalá")
6 raiz.iconbitmap("icono.ico")
7
8 panel = interfaz.Frame()
9 panel.pack()
10
11 etiqueta = interfaz.Label(panel,text="Hola mundo",fg="red",bg="blue",font=("Arial",25))
12 etiqueta.pack()
13
14 raiz.mainloop()





Ejercicio del curso:

Campo de texto.py



/Tkinter/Controles de formulario/Campo de texto.py

1 import tkinter as interfaz
2
3 raiz = interfaz.Tk()
4 raiz.geometry("600x600+50+50")
5 raiz.title("Programa de Jose Vicente Carratalá")
6 raiz.iconbitmap("icono.ico")
7
8 panel = interfaz.Frame()
9 panel.pack()
10
11 etiqueta = interfaz.Label(panel,text="Hola mundo",fg="red",bg="blue",font=("Arial",25))
12 etiqueta.pack()
13
14 campo = interfaz.Entry(panel)
15 campo.pack()
16
17 raiz.mainloop()





Ejercicio del curso:

Campo de texto geometria.py



/Tkinter/Controles de formulario/Campo de texto geometria.py

1 import tkinter as interfaz
2
3 raiz = interfaz.Tk()
4 raiz.geometry("600x600+50+50")
5 raiz.title("Programa de Jose Vicente Carratalá")
6 raiz.iconbitmap("icono.ico")
7
8 panel = interfaz.Frame()
9 panel.pack()
10
11 etiqueta = interfaz.Label(panel,text="Hola mundo",fg="red",bg="blue",font=("Arial",25))
12 etiqueta.pack()
13
14 campo = interfaz.Entry(panel, width= 40)
15 campo.pack()
16
17 raiz.mainloop()





Ejercicio del curso:

Campo de texto margenes.py



/Tkinter/Controles de formulario/Campo de texto margenes.py

1 import tkinter as interfaz
2
3 raiz = interfaz.Tk()
4 raiz.geometry("600x600+50+50")
5 raiz.title("Programa de Jose Vicente Carratalá")
6 raiz.iconbitmap("icono.ico")
7
8 panel = interfaz.Frame()
9 panel.pack()
10
11 etiqueta = interfaz.Label(panel,text="Hola mundo",fg="red",bg="blue",font=("Arial",25))
12 etiqueta.pack()
13
14 campo = interfaz.Entry(panel, width= 40)
15 campo.pack(pady=40)
16
17 raiz.mainloop()





Ejercicio del curso:

Boton.py



/Tkinter/Controles de formulario/Boton.py

1 import tkinter as interfaz
2
3 raiz = interfaz.Tk()
4 raiz.geometry("600x600+50+50")
5 raiz.title("Programa de Jose Vicente Carratalá")
6 raiz.iconbitmap("icono.ico")
7
8 panel = interfaz.Frame()
9 panel.pack()
10
11 etiqueta = interfaz.Label(panel,text="Hola mundo",fg="red",bg="blue",font=("Arial",25))
12 etiqueta.pack()
13
14 campo = interfaz.Entry(panel, width= 40)
15 campo.pack(pady=40)
16
17 boton = interfaz.Button(panel,text="Púlsame")
18 boton.pack()
19
20 raiz.mainloop()





Ejercicio del curso:

Boton estilo.py



/Tkinter/Controles de formulario/Boton estilo.py

1 import tkinter as interfaz
2
3 raiz = interfaz.Tk()
4 raiz.geometry("600x600+50+50")
5 raiz.title("Programa de Jose Vicente Carratalá")
6 raiz.iconbitmap("icono.ico")
7
8 panel = interfaz.Frame()
9 panel.pack()
10
11 etiqueta = interfaz.Label(panel,text="Hola mundo",fg="red",bg="blue",font=("Arial",25))
12 etiqueta.pack()
13
14 campo = interfaz.Entry(panel, width= 40)
15 campo.pack(pady=40)
16
17 boton = interfaz.Button(panel,text="Púlsame",width=40,fg="blue")
18 boton.pack()
19
20 raiz.mainloop()





Ejercicio del curso:

Boton comando.py



/Tkinter/Controles de formulario/Boton comando.py

1 import tkinter as interfaz
2
3 raiz = interfaz.Tk()
4 raiz.geometry("600x600+50+50")
5 raiz.title("Programa de Jose Vicente Carratalá")
6 raiz.iconbitmap("icono.ico")
7
8 panel = interfaz.Frame()
9 panel.pack()
10
11 etiqueta = interfaz.Label(panel,text="Hola mundo",fg="red",bg="blue",font=("Arial",25))
12 etiqueta.pack()
13
14 campo = interfaz.Entry(panel, width= 40)
15 campo.pack(pady=40)
16
17 boton = interfaz.Button(panel,text="Púlsame",width=40,fg="blue",command=pulsame)
18 boton.pack()
19
20 raiz.mainloop()





Ejercicio del curso:

Boton comando funcion.py



/Tkinter/Controles de formulario/Boton comando funcion.py

1 import tkinter as interfaz
2
3 def pulsame():
4 print("Has pulsado el botón")
5
6 raiz = interfaz.Tk()
7 raiz.geometry("600x600+50+50")
8 raiz.title("Programa de Jose Vicente Carratalá")
9 raiz.iconbitmap("icono.ico")
10
11 panel = interfaz.Frame()
12 panel.pack()
13
14 etiqueta = interfaz.Label(panel,text="Hola mundo",fg="red",bg="blue",font=("Arial",25))
15 etiqueta.pack()
16
17 campo = interfaz.Entry(panel, width= 40)
18 campo.pack(pady=40)
19
20 boton = interfaz.Button(panel,text="Púlsame",width=40,fg="blue",command=pulsame)
21 boton.pack()
22
23 raiz.mainloop()





Ejercicio del curso:

Boton cambia label.py



/Tkinter/Controles de formulario/Boton cambia label.py

1 import tkinter as interfaz
2
3 def pulsame():
4 print("Has pulsado el botón")
5 etiqueta2.config(text="Has pulsado el botón")
6
7 raiz = interfaz.Tk()
8 raiz.geometry("600x600+50+50")
9 raiz.title("Programa de Jose Vicente Carratalá")
10 raiz.iconbitmap("icono.ico")
11
12 panel = interfaz.Frame()
13 panel.pack()
14
15 etiqueta = interfaz.Label(panel,text="Hola mundo",fg="red",bg="blue",font=("Arial",25))
16 etiqueta.pack()
17
18 campo = interfaz.Entry(panel, width= 40)
19 campo.pack(pady=40)
20
21 boton = interfaz.Button(panel,text="Púlsame",width=40,fg="blue",command=pulsame)
22 boton.pack()
23
24 etiqueta2 = interfaz.Label(panel,text="Cambiame")
25 etiqueta2.pack()
26
27 raiz.mainloop()





Ejercicio del curso:

Leer label.py



/Tkinter/Controles de formulario/Leer label.py

1 import tkinter as interfaz
2
3
4
5 def pulsame():
6 print("Has pulsado el botón")
7 etiqueta2.config(text="Has pulsado el botón y el texto es: "+str(contenidocampo.get()))
8
9 raiz = interfaz.Tk()
10 raiz.geometry("600x600+50+50")
11 raiz.title("Programa de Jose Vicente Carratalá")
12 raiz.iconbitmap("icono.ico")
13
14 contenidocampo = interfaz.StringVar(raiz)
15
16 panel = interfaz.Frame()
17 panel.pack()
18
19 etiqueta = interfaz.Label(panel,text="Hola mundo",fg="red",bg="blue",font=("Arial",25))
20 etiqueta.pack()
21
22 campo = interfaz.Entry(panel, width= 40,textvariable=contenidocampo)
23 campo.pack(pady=40)
24
25 boton = interfaz.Button(panel,text="Púlsame",width=40,fg="blue",command=pulsame)
26 boton.pack()
27
28 etiqueta2 = interfaz.Label(panel,text="Cambiame")
29 etiqueta2.pack()
30
31 raiz.mainloop()





Ejercicio del curso:

Imagen.py



/Tkinter/Controles de formulario/Imagen.py

1 import tkinter as interfaz
2
3
4
5 def pulsame():
6 print("Has pulsado el botón")
7 etiqueta2.config(text="Has pulsado el botón y el texto es: "+str(contenidocampo.get()))
8
9 raiz = interfaz.Tk()
10 raiz.geometry("600x600+50+50")
11 raiz.title("Programa de Jose Vicente Carratalá")
12 raiz.iconbitmap("icono.ico")
13
14 contenidocampo = interfaz.StringVar(raiz)
15
16 panel = interfaz.Frame()
17 panel.pack()
18
19 imagen = interfaz.PhotoImage(file="icono.png")
20 etiquetaimagen = interfaz.Label(raiz, image=imagen)
21 etiquetaimagen.pack()
22
23 etiqueta = interfaz.Label(panel,text="Hola mundo",fg="red",bg="blue",font=("Arial",25))
24 etiqueta.pack()
25
26 campo = interfaz.Entry(panel, width= 40,textvariable=contenidocampo)
27 campo.pack(pady=40)
28
29 boton = interfaz.Button(panel,text="Púlsame",width=40,fg="blue",command=pulsame)
30 boton.pack()
31
32 etiqueta2 = interfaz.Label(panel,text="Cambiame")
33 etiqueta2.pack()
34
35 raiz.mainloop()





Ejercicio del curso:



5.-Ejercicio Tkinter calculadora

5.1.-Creando la ventana

Estructura del directorio
calculadora.py
icono.ico


Ejercicio del curso:



/Ejercicio Tkinter calculadora/Creando la ventana/calculadora.py

1 import tkinter as interfaz
2
3 raiz = interfaz.Tk()
4 raiz.geometry("600x600+50+50")
5 raiz.title("Programa de Jose Vicente Carratalá")
6 raiz.iconbitmap("icono.ico")





Ejercicio del curso:







5.2.-Imagen titulo

Estructura del directorio
calculadora.py
icono.ico
titulo.png


Ejercicio del curso:



calculadora.py

/Ejercicio Tkinter calculadora/Imagen titulo/calculadora.py

1 import tkinter as interfaz
2
3 raiz = interfaz.Tk()
4 raiz.geometry("600x600+50+50")
5 + raiz.title("Calculadora Freelance")
6 raiz.iconbitmap("icono.ico")
7
8 panel = interfaz.Frame()
9 panel.pack()
10
11 imagen = interfaz.PhotoImage(file="titulo.png")
12 etiquetaimagen = interfaz.Label(raiz, image=imagen)
13 etiquetaimagen.pack()

Ejercicio del curso:



5.3.-Etiquetas y campos

Estructura del directorio
calculadora.py
icono.ico
titulo.png


Ejercicio del curso:



calculadora.py

/Ejercicio Tkinter calculadora/Etiquetas y campos/calculadora.py

1 import tkinter as interfaz
2
3 raiz = interfaz.Tk()
4 raiz.geometry("600x600+50+50")
5 raiz.title("Calculadora Freelance")
6 raiz.iconbitmap("icono.ico")
7
8 + baseimponible = interfaz.StringVar(raiz)
9 + irpf = interfaz.StringVar(raiz)
10 + iva = interfaz.StringVar(raiz)
11 +
12 + panel = interfaz.Frame()
13 + panel.pack()
14
15 imagen = interfaz.PhotoImage(file="titulo.png")
16 interfaz.Label(panel, image=imagen).pack()
17
18 interfaz.Label(panel,text="Introduce la base imponible").pack(pady=3)
19 interfaz.Entry(panel, width= 40,textvariable=baseimponible,justify="right").pack(pady=3)
20 interfaz.Label(panel,text="Introduce el impuesto 1 (IRPF)").pack(pady=3)
21 interfaz.Entry(panel, width= 40,textvariable=irpf,justify="right").pack(pady=3)
22 interfaz.Label(panel,text="Introduce el impuesto 2 (IVA)").pack(pady=3)
23 interfaz.Entry(panel, width= 40,textvariable=iva,justify="right").pack(pady=3)
24

Ejercicio del curso:



5.4.-Boton calcular

Estructura del directorio
calculadora.py
icono.ico
titulo.png


Ejercicio del curso:



calculadora.py

/Ejercicio Tkinter calculadora/Boton calcular/calculadora.py

1 import tkinter as interfaz
2
3 + def calcula():
4 + print("La base imponible es de: "+baseimponible.get())
5 + print("El porcentaje de IRPF es de: "+irpf.get())
6 + print("El porcentaje de IVA es de: "+iva.get())
7 + totalnumero = float(baseimponible.get())
8 + irpfnumero = float(irpf.get())/100
9 + print("El irpf es: "+str(irpfnumero))
10 + print("La cantidad de IRPF es:"+str(totalnumero*irpfnumero))
11 + totalbase = totalnumero - totalnumero*irpfnumero
12 + ivanumero = float(iva.get())/100
13 + print("Total IVA: "+str(totalbase*ivanumero))
14 + totalfinal = totalbase*ivanumero + totalbase
15 + print(totalfinal)
16 +
17 + raiz = interfaz.Tk()
18 + raiz.geometry("600x600+50+50")
19 + raiz.title("Calculadora Freelance")
20 + raiz.iconbitmap("icono.ico")
21 +
22 + baseimponible = interfaz.StringVar(raiz)
23 + irpf = interfaz.StringVar(raiz)
24 + iva = interfaz.StringVar(raiz)
25
26 panel = interfaz.Frame()
27 panel.pack()
28
29 imagen = interfaz.PhotoImage(file="titulo.png")
30 interfaz.Label(panel, image=imagen).pack()
31
32 interfaz.Label(panel,text="Introduce la base imponible").pack(pady=3)
33 interfaz.Entry(panel, width= 40,textvariable=baseimponible,justify="right").pack(pady=3)
34 interfaz.Label(panel,text="Introduce el impuesto 1 (IRPF)").pack(pady=3)
35 interfaz.Entry(panel, width= 40,textvariable=irpf,justify="right").pack(pady=3)
36 interfaz.Label(panel,text="Introduce el impuesto 2 (IVA)").pack(pady=3)
37 interfaz.Entry(panel, width= 40,textvariable=iva,justify="right").pack(pady=3)
38 interfaz.Button(panel,width=40,text="¡Calcula!",command=calcula).pack(pady=3)
39

Ejercicio del curso:



5.5.-Total en Label

Estructura del directorio
calculadora.py
icono.ico
titulo.png


Ejercicio del curso:



calculadora.py

/Ejercicio Tkinter calculadora/Total en Label/calculadora.py

1 import tkinter as interfaz
2
3 def calcula():
4 print("La base imponible es de: "+baseimponible.get())
5 print("El porcentaje de IRPF es de: "+irpf.get())
6 print("El porcentaje de IVA es de: "+iva.get())
7 totalnumero = float(baseimponible.get())
8 irpfnumero = float(irpf.get())/100
9 print("El irpf es: "+str(irpfnumero))
10 print("La cantidad de IRPF es:"+str(totalnumero*irpfnumero))
11 totalbase = totalnumero - totalnumero*irpfnumero
12 ivanumero = float(iva.get())/100
13 print("Total IVA: "+str(totalbase*ivanumero))
14 totalfinal = totalbase*ivanumero + totalbase
15 print(totalfinal)
16 + resultado.config(text=str(totalfinal)+" €")
17 +
18 + raiz = interfaz.Tk()
19 + raiz.geometry("600x600+50+50")
20 + raiz.title("Calculadora Freelance")
21 + raiz.iconbitmap("icono.ico")
22 +
23 + baseimponible = interfaz.StringVar(raiz)
24 + irpf = interfaz.StringVar(raiz)
25 + iva = interfaz.StringVar(raiz)
26 +
27 + panel = interfaz.Frame()
28 + panel.pack()
29 +
30 + imagen = interfaz.PhotoImage(file="titulo.png")
31 + interfaz.Label(panel, image=imagen).pack()
32 +
33 + interfaz.Label(panel,text="Introduce la base imponible").pack(pady=3)
34 + interfaz.Entry(panel, width= 40,textvariable=baseimponible,justify="right").pack(pady=3)
35 + interfaz.Label(panel,text="Introduce el impuesto 1 (IRPF)").pack(pady=3)
36 + interfaz.Entry(panel, width= 40,textvariable=irpf,justify="right").pack(pady=3)
37 + interfaz.Label(panel,text="Introduce el impuesto 2 (IVA)").pack(pady=3)
38 + interfaz.Entry(panel, width= 40,textvariable=iva,justify="right").pack(pady=3)
39 + interfaz.Button(panel,width=40,text="¡Calcula!",command=calcula).pack(pady=3)
40
41 resultado = interfaz.Label(panel,text="Resultado")
42 resultado.pack(pady=3)
43

Ejercicio del curso:



5.6.-Mainloop

Estructura del directorio
calculadora.py
icono.ico
titulo.png


Ejercicio del curso:



calculadora.py

/Ejercicio Tkinter calculadora/Mainloop/calculadora.py

1 import tkinter as interfaz
2
3 def calcula():
4 print("La base imponible es de: "+baseimponible.get())
5 print("El porcentaje de IRPF es de: "+irpf.get())
6 print("El porcentaje de IVA es de: "+iva.get())
7 totalnumero = float(baseimponible.get())
8 irpfnumero = float(irpf.get())/100
9 print("El irpf es: "+str(irpfnumero))
10 print("La cantidad de IRPF es:"+str(totalnumero*irpfnumero))
11 totalbase = totalnumero - totalnumero*irpfnumero
12 ivanumero = float(iva.get())/100
13 print("Total IVA: "+str(totalbase*ivanumero))
14 totalfinal = totalbase*ivanumero + totalbase
15 print(totalfinal)
16 resultado.config(text=str(totalfinal)+" €")
17
18 raiz = interfaz.Tk()
19 raiz.geometry("600x600+50+50")
20 raiz.title("Calculadora Freelance")
21 raiz.iconbitmap("icono.ico")
22
23 baseimponible = interfaz.StringVar(raiz)
24 irpf = interfaz.StringVar(raiz)
25 iva = interfaz.StringVar(raiz)
26
27 panel = interfaz.Frame()
28 panel.pack()
29
30 imagen = interfaz.PhotoImage(file="titulo.png")
31 interfaz.Label(panel, image=imagen).pack()
32
33 interfaz.Label(panel,text="Introduce la base imponible").pack(pady=3)
34 interfaz.Entry(panel, width= 40,textvariable=baseimponible,justify="right").pack(pady=3)
35 interfaz.Label(panel,text="Introduce el impuesto 1 (IRPF)").pack(pady=3)
36 interfaz.Entry(panel, width= 40,textvariable=irpf,justify="right").pack(pady=3)
37 interfaz.Label(panel,text="Introduce el impuesto 2 (IVA)").pack(pady=3)
38 interfaz.Entry(panel, width= 40,textvariable=iva,justify="right").pack(pady=3)
39 interfaz.Button(panel,width=40,text="¡Calcula!",command=calcula).pack(pady=3)
40
41 resultado = interfaz.Label(panel,text="Resultado")
42 resultado.pack(pady=3)
43
44 raiz.mainloop()

Ejercicio del curso:



5.7.-autopytoexe

Estructura del directorio
autopytoexe.txt


Ejercicio del curso:



/Ejercicio Tkinter calculadora/autopytoexe/autopytoexe.txt

1 pip install auto-py-to-exe





6.-Tkinteravanzado

6.1.-Grid

Ejercicio del curso:

grid.py



Ejercicio del curso:

grid.pny.py



/Tkinteravanzado/Grid/grid.pny.py






/Tkinteravanzado/Grid/grid.py

1 import tkinter as interfaz
2
3 raiz = interfaz.Tk()
4 raiz.geometry("600x600")
5
6 rejilla = interfaz.Frame()
7 rejilla.pack()
8
9
10 etiqueta4 = interfaz.Label(rejilla,text=" Arriba Izquierda")
11 etiqueta4.grid(row=0,column=0)
12
13 etiqueta5 = interfaz.Label(rejilla,text="Arriba Centro")
14 etiqueta5.grid(row=0,column=1)
15
16 etiqueta6 = interfaz.Label(rejilla,text="Arriba Derecha")
17 etiqueta6.grid(row=0,column=2)
18
19 etiqueta1 = interfaz.Label(rejilla,text="Izquierda")
20 etiqueta1.grid(row=1,column=0)
21
22 etiqueta2 = interfaz.Label(rejilla,text="Centro")
23 etiqueta2.grid(row=1,column=1)
24
25 etiqueta3 = interfaz.Label(rejilla,text="Derecha")
26 etiqueta3.grid(row=1,column=2)
27
28 etiqueta7 = interfaz.Label(rejilla,text="Abajo Izquierda")
29 etiqueta7.grid(row=2,column=0)
30
31 etiqueta8 = interfaz.Label(rejilla,text="Abajo Centro")
32 etiqueta8.grid(row=2,column=1)
33
34 etiqueta9 = interfaz.Label(rejilla,text="Abajo Derecha")
35 etiqueta9.grid(row=2,column=2)
36





Ejercicio del curso:

span.py



/Tkinteravanzado/Grid/span.py

1 import tkinter as interfaz
2
3 raiz = interfaz.Tk()
4 raiz.geometry("600x600")
5
6 rejilla = interfaz.Frame()
7 rejilla.pack()
8
9
10 etiqueta4 = interfaz.Label(rejilla,text=" Arriba Izquierda")
11 etiqueta4.grid(row=0,column=0)
12
13 etiqueta5 = interfaz.Label(rejilla,text="Arriba Centro")
14 etiqueta5.grid(row=0,column=1)
15
16 etiqueta6 = interfaz.Label(rejilla,text="Arriba Derecha")
17 etiqueta6.grid(row=0,column=2)
18
19 etiqueta1 = interfaz.Label(rejilla,text="Izquierda")
20 etiqueta1.grid(row=1,column=0)
21
22 etiqueta2 = interfaz.Label(rejilla,text="Centro")
23 etiqueta2.grid(row=1,column=1)
24
25 etiqueta3 = interfaz.Label(rejilla,text="Derecha")
26 etiqueta3.grid(row=1,column=2)
27
28 etiqueta7 = interfaz.Label(rejilla,text="Abajo Izquierda")
29 etiqueta7.grid(row=2,column=0)
30
31 etiqueta8 = interfaz.Label(rejilla,text="Abajo Centro")
32 etiqueta8.grid(row=2,column=1,columnspan = 2)
33
34
35





Ejercicio del curso:

geometria.py



/Tkinteravanzado/Grid/geometria.py

1 import tkinter as interfaz
2
3 raiz = interfaz.Tk()
4 raiz.geometry("600x600")
5
6 rejilla = interfaz.Frame(width=1000,height=1000)
7 rejilla.pack()
8
9
10 etiqueta4 = interfaz.Label(rejilla,text=" Arriba Izquierda")
11 etiqueta4.grid(row=0,column=0)
12
13 etiqueta5 = interfaz.Label(rejilla,text="Arriba Centro")
14 etiqueta5.grid(row=0,column=1)
15
16 etiqueta6 = interfaz.Label(rejilla,text="Arriba Derecha")
17 etiqueta6.grid(row=0,column=2)
18
19 etiqueta1 = interfaz.Label(rejilla,text="Izquierda")
20 etiqueta1.grid(row=1,column=0)
21
22 etiqueta2 = interfaz.Label(rejilla,text="Centro")
23 etiqueta2.grid(row=1,column=1)
24
25 etiqueta3 = interfaz.Label(rejilla,text="Derecha")
26 etiqueta3.grid(row=1,column=2)
27
28 etiqueta7 = interfaz.Label(rejilla,text="Abajo Izquierda")
29 etiqueta7.grid(row=2,column=0)
30
31 etiqueta8 = interfaz.Label(rejilla,text="Abajo Centro")
32 etiqueta8.grid(row=2,column=1,columnspan = 2)
33
34
35





6.2.-Widgets

Ejercicio del curso:

combobox.py



/Tkinteravanzado/Widgets/combobox.py

1 import tkinter as interfaz
2 from tkinter import ttk
3
4 raiz = interfaz.Tk()
5 raiz.geometry("300x300")
6
7 marco = interfaz.Frame(raiz)
8 marco.pack()
9
10 desplegable = ttk.Combobox(marco)
11 desplegable['values']= ['uno','dos','tres','cuatro','cinco','seis','siete']
12 desplegable.pack()
13
14
15
16





Ejercicio del curso:

Menus.py



/Tkinteravanzado/Widgets/Menus.py

1 import tkinter as interfaz
2
3 raiz = interfaz.Tk()
4 raiz.geometry("300x300")
5
6 marco = interfaz.Frame(raiz)
7 marco.pack()
8
9 mimenu = interfaz.Menu(raiz)
10
11 raiz.config(menu=mimenu)
12
13 menuarchivo = interfaz.Menu(mimenu)
14 menuarchivo.add_command(label="Nuevo")
15 menuarchivo.add_command(label="Abrir")
16 menuarchivo.add_command(label="Guardar")
17 menuarchivo.add_command(label="Cerrar")
18
19
20 mimenu.add_cascade(label="Archivo",menu=menuarchivo)
21 mimenu.add_cascade(label="Editar")
22 mimenu.add_cascade(label="Ayuda")
23
24
25
26
27





Ejercicio del curso:

Menus con comando.py



/Tkinteravanzado/Widgets/Menus con comando.py

1 import tkinter as interfaz
2
3 def nuevo():
4 print("Voy a crear un archivo nuevo")
5 def abrir():
6 print("Voy a abrir un archivo")
7 def guardar():
8 print("Voy a guardar un archivo")
9 def cerrar():
10 print("Voy a cerrar un archivo")
11
12 raiz = interfaz.Tk()
13 raiz.geometry("300x300")
14
15 marco = interfaz.Frame(raiz)
16 marco.pack()
17
18 mimenu = interfaz.Menu(raiz)
19
20 raiz.config(menu=mimenu)
21
22 menuarchivo = interfaz.Menu(mimenu)
23 menuarchivo.add_command(label="Nuevo",command=nuevo)
24 menuarchivo.add_command(label="Abrir",command=abrir)
25 menuarchivo.add_command(label="Guardar",command=guardar)
26 menuarchivo.add_command(label="Cerrar",command=cerrar)
27
28
29 mimenu.add_cascade(label="Archivo",menu=menuarchivo)
30 mimenu.add_cascade(label="Editar")
31 mimenu.add_cascade(label="Ayuda")
32
33
34
35
36





Ejercicio del curso:

Menus y paneles.py



/Tkinteravanzado/Widgets/Menus y paneles.py

1 import tkinter as interfaz
2
3 def nuevo():
4 print("Voy a crear un archivo nuevo")
5 marcoabrir.pack_forget()
6 marcoguardar.pack_forget()
7 marcocerrar.pack_forget()
8 marconuevo.pack()
9 def abrir():
10 marcoabrir.pack()
11 marcoguardar.pack_forget()
12 marcocerrar.pack_forget()
13 marconuevo.pack_forget()
14 print("Voy a abrir un archivo")
15 def guardar():
16 marcoabrir.pack_forget()
17 marcoguardar.pack()
18 marcocerrar.pack_forget()
19 marconuevo.pack_forget()
20 print("Voy a guardar un archivo")
21 def cerrar():
22 marcoabrir.pack_forget()
23 marcoguardar.pack_forget()
24 marcocerrar.pack()
25 marconuevo.pack_forget()
26 print("Voy a cerrar un archivo")
27
28 raiz = interfaz.Tk()
29 raiz.geometry("300x300")
30
31 marconuevo = interfaz.Frame(raiz)
32 interfaz.Label(marconuevo,text="Soy el nuevo").pack()
33
34 marcoabrir = interfaz.Frame(raiz)
35 interfaz.Label(marcoabrir,text="Voy a abrir").pack()
36
37 marcoguardar = interfaz.Frame(raiz)
38 interfaz.Label(marcoguardar,text="Voy a guardar").pack()
39
40 marcocerrar = interfaz.Frame(raiz)
41 interfaz.Label(marcocerrar,text="Voy a cerrar").pack()
42
43
44
45 mimenu = interfaz.Menu(raiz)
46
47 raiz.config(menu=mimenu)
48
49 menuarchivo = interfaz.Menu(mimenu)
50 menuarchivo.add_command(label="Nuevo",command=nuevo)
51 menuarchivo.add_command(label="Abrir",command=abrir)
52 menuarchivo.add_command(label="Guardar",command=guardar)
53 menuarchivo.add_command(label="Cerrar",command=cerrar)
54
55
56 mimenu.add_cascade(label="Archivo",menu=menuarchivo)
57 mimenu.add_cascade(label="Editar")
58 mimenu.add_cascade(label="Ayuda")
59
60
61
62
63





Ejercicio del curso:

checkbox.py



/Tkinteravanzado/Widgets/checkbox.py

1 import tkinter as interfaz
2 from tkinter import ttk
3
4 raiz = interfaz.Tk()
5 raiz.geometry("300x300")
6
7 def comprueba():
8 print("Vamos a comprobar")
9
10 ttk.Checkbutton(text="Acepto",command=comprueba).pack()
11
12
13
14





Ejercicio del curso:

emergente.py



/Tkinteravanzado/Widgets/emergente.py

1 import tkinter as interfaz
2 from tkinter import ttk
3
4 raiz = interfaz.Tk()
5 raiz.geometry("300x300")
6
7 opcion = interfaz.IntVar()
8
9 ttk.Radiobutton(text="opción 1",variable=opcion,value=1).pack()
10 ttk.Radiobutton(text="opción 2",variable=opcion,value=2).pack()
11 ttk.Radiobutton(text="opción 3",variable=opcion,value=3).pack()
12 ttk.Radiobutton(text="opción 4",variable=opcion,value=4).pack()
13
14 opcion2 = interfaz.IntVar()
15
16 ttk.Radiobutton(text="opción a",variable=opcion2,value=1).pack()
17 ttk.Radiobutton(text="opción b",variable=opcion2,value=2).pack()
18 ttk.Radiobutton(text="opción c",variable=opcion2,value=3).pack()
19 ttk.Radiobutton(text="opción d",variable=opcion2,value=4).pack()
20
21
22
23





Ejercicio del curso:

emergente.py



/Tkinteravanzado/Widgets/emergente.py

1 import tkinter as interfaz
2 from tkinter import ttk
3 from tkinter.messagebox import showinfo
4
5 raiz = interfaz.Tk()
6 raiz.geometry("300x300")
7
8
9 interfaz.messagebox.showinfo(title="Problema",message="Ha ocurrido algún tipo de problema")
10
11
12





Ejercicio del curso:

emergente con boton.py



/Tkinteravanzado/Widgets/emergente con boton.py

1 import tkinter as interfaz
2 from tkinter import ttk
3 from tkinter.messagebox import showinfo
4
5 raiz = interfaz.Tk()
6 raiz.geometry("300x300")
7
8 def problemas():
9 interfaz.messagebox.showinfo(
10 title="Problema",
11 message="Ha ocurrido algún tipo de problema"
12 )
13
14 boton = interfaz.Button(text="Pulsame",command=problemas).pack()
15
16
17
18
19





Ejercicio del curso:

arbol.py



/Tkinteravanzado/Widgets/arbol.py

1 import tkinter as interfaz
2 from tkinter import ttk
3 from tkinter.messagebox import showinfo
4
5 raiz = interfaz.Tk()
6 raiz.geometry("300x300")
7
8 arbol = ttk.Treeview()
9 e1 = arbol.insert("", interfaz.END, text="Elemento 1")
10 e2 = arbol.insert("", interfaz.END, text="Elemento 2")
11 e3 = arbol.insert("", interfaz.END, text="Elemento 3")
12 e4 = arbol.insert("", interfaz.END, text="Elemento 4")
13 arbol.insert(e4, interfaz.END, text="Subelemento 1")
14 arbol.insert(e4, interfaz.END, text="Subelemento 2")
15 arbol.insert(e4, interfaz.END, text="Subelemento 3")
16 arbol.pack()
17
18
19
20
21





Ejercicio del curso:

tabla.py



/Tkinteravanzado/Widgets/tabla.py

1 import tkinter as interfaz
2 from tkinter import ttk
3 from tkinter.messagebox import showinfo
4
5 raiz = interfaz.Tk()
6 raiz.geometry("300x300")
7
8 arbol = ttk.Treeview(raiz, column=("Nombre", "Telefono", "Email"), show='headings', height=5)
9 arbol.column("# 1", anchor=interfaz.CENTER)
10 arbol.heading("# 1", text="Nombre")
11 arbol.column("# 2", anchor=interfaz.CENTER)
12 arbol.heading("# 2", text="Telefono")
13 arbol.column("# 3", anchor=interfaz.CENTER)
14 arbol.heading("# 3", text="Email")
15
16 # Insert the data in Treeview widget
17 arbol.insert('', 'end', text="1", values=('Juan', '1234', 'info@hola.com'))
18 arbol.insert('', 'end', text="1", values=('Jorge', '1234', 'info@hola.com'))
19 arbol.insert('', 'end', text="1", values=('Julia', '1234', 'info@hola.com'))
20 arbol.insert('', 'end', text="1", values=('Jean', '1234', 'info@hola.com'))
21
22 arbol.pack()
23
24
25





7.-Ejercicio agenda Tkinter

7.1.-Ventana agenda

Estructura del directorio
agenda.py
icono.ico


Ejercicio del curso:



/Ejercicio agenda Tkinter/Ventana agenda/agenda.py

1 import tkinter as interfaz
2
3
4
5 raiz = interfaz.Tk()
6 raiz.geometry("600x600+50+50")
7 raiz.title("Agenda")
8 raiz.iconbitmap("icono.ico")
9
10 raiz.mainloop()





Ejercicio del curso:







7.2.-Menu

Estructura del directorio
agenda.py
icono.ico


Ejercicio del curso:



agenda.py

/Ejercicio agenda Tkinter/Menu/agenda.py

1 import tkinter as interfaz
2
3 + def nuevo():
4 + print("Voy a crear un nuevo registro")
5 + def ver():
6 + print("Voy a ver registros")
7 + def actualizar():
8 + print("Voy a actualizar un registro")
9 + def eliminar():
10 + print("Voy a eliminar un registro")
11
12 #Ventana
13 raiz = interfaz.Tk()
14 raiz.geometry("600x600+50+50")
15 raiz.title("Agenda")
16 raiz.iconbitmap("icono.ico")
17
18 #Menu
19 mimenu = interfaz.Menu(raiz)
20 raiz.config(menu=mimenu)
21 menuagenda = interfaz.Menu(mimenu)
22 menuagenda.add_command(label="Crear",command=nuevo)
23 menuagenda.add_command(label="Ver",command=ver)
24 menuagenda.add_command(label="Actualizar",command=actualizar)
25 menuagenda.add_command(label="Eliminar",command=eliminar)
26
27
28 mimenu.add_cascade(label="Archivo")
29 mimenu.add_cascade(label="Agenda",menu=menuagenda)
30 mimenu.add_cascade(label="Ayuda")

Ejercicio del curso:



7.3.-Marcos

Estructura del directorio
agenda.py
icono.ico


Ejercicio del curso:



agenda.py

/Ejercicio agenda Tkinter/Marcos/agenda.py

1 import tkinter as interfaz
2
3 def nuevo():
4 print("Voy a crear un nuevo registro")
5 def ver():
6 print("Voy a ver registros")
7 def actualizar():
8 print("Voy a actualizar un registro")
9 def eliminar():
10 print("Voy a eliminar un registro")
11
12 #Ventana
13 raiz = interfaz.Tk()
14 raiz.geometry("600x600+50+50")
15 raiz.title("Agenda")
16 raiz.iconbitmap("icono.ico")
17
18 + #Marcos
19 + marcocrear = interfaz.Frame()
20 + marcover = interfaz.Frame()
21 + marcoactualizar = interfaz.Frame()
22 + marcoeliminar = interfaz.Frame()
23 + marcoinicio = interfaz.Frame().pack()
24 +
25 + #Marco de inicio
26 + interfaz.Label(text="Programa agenda").pack()
27 + interfaz.Label(text="(c) 2023 Jose Vicente Carratala").pack()
28 +
29 +
30 +
31 #Menu
32 mimenu = interfaz.Menu(raiz)
33 raiz.config(menu=mimenu)
34 menuagenda = interfaz.Menu(mimenu)
35 menuagenda.add_command(label="Crear",command=nuevo)
36 menuagenda.add_command(label="Ver",command=ver)
37 menuagenda.add_command(label="Actualizar",command=actualizar)
38 menuagenda.add_command(label="Eliminar",command=eliminar)
39
40
41 mimenu.add_cascade(label="Archivo")
42 mimenu.add_cascade(label="Agenda",menu=menuagenda)
43 mimenu.add_cascade(label="Ayuda")

Ejercicio del curso:



7.4.-Gestionar marcos

Estructura del directorio
agenda.py
icono.ico


Ejercicio del curso:



agenda.py

/Ejercicio agenda Tkinter/Gestionar marcos/agenda.py

1 import tkinter as interfaz
2
3 def nuevo():
4 print("Voy a crear un nuevo registro")
5 + marcoinicio.pack_forget()
6 + marcocrear.pack()
7 + marcover.pack_forget()
8 + marcoactualizar.pack_forget()
9 + marcoeliminar.pack_forget()
10 + def ver():
11 + print("Voy a ver registros")
12 + marcoinicio.pack_forget()
13 + marcocrear.pack_forget()
14 + marcover.pack()
15 + marcoactualizar.pack_forget()
16 + marcoeliminar.pack_forget()
17 + def actualizar():
18 + print("Voy a actualizar un registro")
19 + marcoinicio.pack_forget()
20 + marcocrear.pack_forget()
21 + marcover.pack_forget()
22 + marcoactualizar.pack()
23 + marcoeliminar.pack_forget()
24 + def eliminar():
25 + print("Voy a eliminar un registro")
26 + marcoinicio.pack_forget()
27 + marcocrear.pack_forget()
28 + marcover.pack_forget()
29 + marcoactualizar.pack_forget()
30 + marcoeliminar.pack()
31 +
32 + #Ventana
33 + raiz = interfaz.Tk()
34 + raiz.geometry("600x600+50+50")
35 + raiz.title("Agenda")
36 + raiz.iconbitmap("icono.ico")
37 +
38 + #Marcos
39 + marcocrear = interfaz.Frame(raiz)
40 + interfaz.Label(marcocrear,text="Creación de un nuevo registro").pack()
41 + marcover = interfaz.Frame(raiz)
42 + interfaz.Label(marcover,text="Listado de registros").pack()
43 + marcoactualizar = interfaz.Frame(raiz)
44 interfaz.Label(marcoactualizar,text="Actualización de un registro").pack()
45 marcoeliminar = interfaz.Frame(raiz)
46 interfaz.Label(marcoeliminar,text="Eliminación de un registro").pack()
47 marcoinicio = interfaz.Frame(raiz)
48 marcoinicio.pack()
49
50 #Marco de inicio
51 interfaz.Label(marcoinicio,text="Programa agenda").pack()
52 interfaz.Label(marcoinicio,text="(c) 2023 Jose Vicente Carratala").pack()
53
54
55
56 #Menu
57 mimenu = interfaz.Menu(raiz)
58 raiz.config(menu=mimenu)
59 menuagenda = interfaz.Menu(mimenu)
60 menuagenda.add_command(label="Crear",command=nuevo)
61 menuagenda.add_command(label="Ver",command=ver)
62 menuagenda.add_command(label="Actualizar",command=actualizar)
63 menuagenda.add_command(label="Eliminar",command=eliminar)
64
65
66 mimenu.add_cascade(label="Archivo")
67 mimenu.add_cascade(label="Agenda",menu=menuagenda)
68 mimenu.add_cascade(label="Ayuda")

Ejercicio del curso:



7.5.-Nuevo registro

Estructura del directorio
agenda.py
icono.ico


Ejercicio del curso:



agenda.py

/Ejercicio agenda Tkinter/Nuevo registro/agenda.py

1 import tkinter as interfaz
2
3 def nuevo():
4 print("Voy a crear un nuevo registro")
5 marcoinicio.pack_forget()
6 marcocrear.pack()
7 marcover.pack_forget()
8 marcoactualizar.pack_forget()
9 marcoeliminar.pack_forget()
10 def ver():
11 print("Voy a ver registros")
12 marcoinicio.pack_forget()
13 marcocrear.pack_forget()
14 marcover.pack()
15 marcoactualizar.pack_forget()
16 marcoeliminar.pack_forget()
17 def actualizar():
18 print("Voy a actualizar un registro")
19 marcoinicio.pack_forget()
20 marcocrear.pack_forget()
21 marcover.pack_forget()
22 marcoactualizar.pack()
23 marcoeliminar.pack_forget()
24 def eliminar():
25 print("Voy a eliminar un registro")
26 marcoinicio.pack_forget()
27 marcocrear.pack_forget()
28 marcover.pack_forget()
29 marcoactualizar.pack_forget()
30 marcoeliminar.pack()
31 + def operacioninsertar():
32 + print("Inserto en la base de datos")
33 +
34 + #Ventana
35 + raiz = interfaz.Tk()
36 + raiz.geometry("600x600+50+50")
37 + raiz.title("Agenda")
38 + raiz.iconbitmap("icono.ico")
39 +
40 + #Variables de formulario
41 + nuevonombre = interfaz.StringVar(raiz)
42 + nuevotelefono = interfaz.StringVar(raiz)
43 + nuevoemail = interfaz.StringVar(raiz)
44 +
45 + #Marcos
46 +
47 + marcocrear = interfaz.Frame(raiz)
48 + interfaz.Label(marcocrear,text="Creación de un nuevo registro").pack(pady=5)
49 + interfaz.Label(marcocrear,text="Introduce el nombre").pack(pady=5)
50 + interfaz.Entry(marcocrear,textvariable=nuevonombre,width=40).pack(pady=5)
51 + interfaz.Label(marcocrear,text="Introduce el telefono").pack(pady=5)
52 + interfaz.Entry(marcocrear,textvariable=nuevotelefono,width=40).pack(pady=5)
53 + interfaz.Label(marcocrear,text="Introduce el email").pack(pady=5)
54 + interfaz.Entry(marcocrear,textvariable=nuevoemail,width=40).pack(pady=5)
55 + interfaz.Button(marcocrear,text="Inserta nuevo registro",width=40,command=operacioninsertar).pack(pady=5)
56 +
57 + marcover = interfaz.Frame(raiz)
58 + interfaz.Label(marcover,text="Listado de registros").pack()
59 + marcoactualizar = interfaz.Frame(raiz)
60 + interfaz.Label(marcoactualizar,text="Actualización de un registro").pack()
61 + marcoeliminar = interfaz.Frame(raiz)
62 + interfaz.Label(marcoeliminar,text="Eliminación de un registro").pack()
63 + marcoinicio = interfaz.Frame(raiz)
64 + marcoinicio.pack()
65
66 + #Marco de inicio
67 + interfaz.Label(marcoinicio,text="Programa agenda").pack()
68 + interfaz.Label(marcoinicio,text="(c) 2023 Jose Vicente Carratala").pack()
69
70
71
72 #Menu
73 mimenu = interfaz.Menu(raiz)
74 raiz.config(menu=mimenu)
75 menuagenda = interfaz.Menu(mimenu)
76 menuagenda.add_command(label="Crear",command=nuevo)
77 menuagenda.add_command(label="Ver",command=ver)
78 menuagenda.add_command(label="Actualizar",command=actualizar)
79 menuagenda.add_command(label="Eliminar",command=eliminar)
80
81
82 mimenu.add_cascade(label="Archivo")
83 mimenu.add_cascade(label="Agenda",menu=menuagenda)
84 mimenu.add_cascade(label="Ayuda")

Ejercicio del curso:



7.6.-Recojo datos

Estructura del directorio
agenda.py
icono.ico


Ejercicio del curso:



agenda.py

/Ejercicio agenda Tkinter/Recojo datos/agenda.py

1 import tkinter as interfaz
2
3 def nuevo():
4 print("Voy a crear un nuevo registro")
5 marcoinicio.pack_forget()
6 marcocrear.pack()
7 marcover.pack_forget()
8 marcoactualizar.pack_forget()
9 marcoeliminar.pack_forget()
10 def ver():
11 print("Voy a ver registros")
12 marcoinicio.pack_forget()
13 marcocrear.pack_forget()
14 marcover.pack()
15 marcoactualizar.pack_forget()
16 marcoeliminar.pack_forget()
17 def actualizar():
18 print("Voy a actualizar un registro")
19 marcoinicio.pack_forget()
20 marcocrear.pack_forget()
21 marcover.pack_forget()
22 marcoactualizar.pack()
23 marcoeliminar.pack_forget()
24 def eliminar():
25 print("Voy a eliminar un registro")
26 marcoinicio.pack_forget()
27 marcocrear.pack_forget()
28 marcover.pack_forget()
29 marcoactualizar.pack_forget()
30 marcoeliminar.pack()
31 def operacioninsertar():
32 print("Inserto en la base de datos")
33 + tomanuevonombre = nuevonombre.get()
34 + tomanuevotelefono = nuevotelefono.get()
35 + tomanuevoemail = nuevoemail.get()
36 + print("Voy a insertar el nombre:"+tomanuevonombre)
37 + print("Voy a insertar el telefono:"+tomanuevotelefono)
38 + print("Voy a insertar el email:"+tomanuevoemail)
39
40 + #Ventana
41 + raiz = interfaz.Tk()
42 + raiz.geometry("600x600+50+50")
43 + raiz.title("Agenda")
44 + raiz.iconbitmap("icono.ico")
45 +
46 + #Variables de formulario
47 + nuevonombre = interfaz.StringVar(raiz)
48 + nuevotelefono = interfaz.StringVar(raiz)
49 + nuevoemail = interfaz.StringVar(raiz)
50 +
51 + #Marcos
52 +
53 + marcocrear = interfaz.Frame(raiz)
54 + interfaz.Label(marcocrear,text="Creación de un nuevo registro").pack(pady=5)
55 + interfaz.Label(marcocrear,text="Introduce el nombre").pack(pady=5)
56 + interfaz.Entry(marcocrear,textvariable=nuevonombre,width=40).pack(pady=5)
57 + interfaz.Label(marcocrear,text="Introduce el telefono").pack(pady=5)
58 + interfaz.Entry(marcocrear,textvariable=nuevotelefono,width=40).pack(pady=5)
59 + interfaz.Label(marcocrear,text="Introduce el email").pack(pady=5)
60 + interfaz.Entry(marcocrear,textvariable=nuevoemail,width=40).pack(pady=5)
61 + interfaz.Button(marcocrear,text="Inserta nuevo registro",width=40,command=operacioninsertar).pack(pady=5)
62 +
63 + marcover = interfaz.Frame(raiz)
64 + interfaz.Label(marcover,text="Listado de registros").pack()
65 + marcoactualizar = interfaz.Frame(raiz)
66 + interfaz.Label(marcoactualizar,text="Actualización de un registro").pack()
67 + marcoeliminar = interfaz.Frame(raiz)
68 + interfaz.Label(marcoeliminar,text="Eliminación de un registro").pack()
69 + marcoinicio = interfaz.Frame(raiz)
70 + marcoinicio.pack()
71
72 + #Marco de inicio
73 + interfaz.Label(marcoinicio,text="Programa agenda").pack()
74 + interfaz.Label(marcoinicio,text="(c) 2023 Jose Vicente Carratala").pack()
75 +
76 +
77 +
78 + #Menu
79 + mimenu = interfaz.Menu(raiz)
80 + raiz.config(menu=mimenu)
81 + menuagenda = interfaz.Menu(mimenu)
82 + menuagenda.add_command(label="Crear",command=nuevo)
83 + menuagenda.add_command(label="Ver",command=ver)
84 + menuagenda.add_command(label="Actualizar",command=actualizar)
85 menuagenda.add_command(label="Eliminar",command=eliminar)
86
87
88 mimenu.add_cascade(label="Archivo")
89 mimenu.add_cascade(label="Agenda",menu=menuagenda)
90 mimenu.add_cascade(label="Ayuda")

Ejercicio del curso:



7.7.-Inserción en base de datos

Estructura del directorio
agenda.py
agenda.sqlite
icono.ico


Ejercicio del curso:



Ejercicio del curso:



agenda.py

/Ejercicio agenda Tkinter/Inserción en base de datos/agenda.py

1 import tkinter as interfaz
2 + import sqlite3 as db
3 + import sys
4 +
5 + conexion = db.connect("agenda.sqlite")
6 + cursor = conexion.cursor()
7 + cursor.execute('''
8 + CREATE TABLE IF NOT EXISTS "contactos" (
9 + "Identificador" INTEGER,
10 + "nombre" TEXT,
11 + "telefono" TEXT,
12 + "email" TEXT,
13 + PRIMARY KEY("Identificador" AUTOINCREMENT)
14 + );
15 + ''')
16 +
17 + def nuevo():
18 + print("Voy a crear un nuevo registro")
19 marcoinicio.pack_forget()
20 + marcocrear.pack()
21 marcover.pack_forget()
22 + marcoactualizar.pack_forget()
23 marcoeliminar.pack_forget()
24 + def ver():
25 + print("Voy a ver registros")
26 marcoinicio.pack_forget()
27 marcocrear.pack_forget()
28 + marcover.pack()
29 marcoactualizar.pack_forget()
30 + marcoeliminar.pack_forget()
31 + def actualizar():
32 + print("Voy a actualizar un registro")
33 + marcoinicio.pack_forget()
34 + marcocrear.pack_forget()
35 + marcover.pack_forget()
36 + marcoactualizar.pack()
37 + marcoeliminar.pack_forget()
38 + def eliminar():
39 + print("Voy a eliminar un registro")
40 + marcoinicio.pack_forget()
41 + marcocrear.pack_forget()
42 + marcover.pack_forget()
43 + marcoactualizar.pack_forget()
44 + marcoeliminar.pack()
45 + def operacioninsertar():
46 + print("Inserto en la base de datos")
47 + tomanuevonombre = nuevonombre.get()
48 + tomanuevotelefono = nuevotelefono.get()
49 + tomanuevoemail = nuevoemail.get()
50 + print("Voy a insertar el nombre:"+tomanuevonombre)
51 + print("Voy a insertar el telefono:"+tomanuevotelefono)
52 + print("Voy a insertar el email:"+tomanuevoemail)
53 + cursor.execute('''
54 + INSERT INTO contactos VALUES (
55 + NULL,
56 + "'''+tomanuevonombre+'''",
57 + "'''+tomanuevotelefono+'''",
58 + "'''+tomanuevoemail+'''"
59 + )
60 + ''')
61 + conexion.commit()
62 + camponuevonombre.delete(0, interfaz.END)
63 + camponuevotelefono.delete(0, interfaz.END)
64 + camponuevoemail.delete(0, interfaz.END)
65 +
66 + #Ventana
67 + raiz = interfaz.Tk()
68 + raiz.geometry("600x600+50+50")
69 + raiz.title("Agenda")
70 + raiz.iconbitmap("icono.ico")
71
72 + #Variables de formulario
73 + nuevonombre = interfaz.StringVar(raiz)
74 + nuevotelefono = interfaz.StringVar(raiz)
75 + nuevoemail = interfaz.StringVar(raiz)
76
77 + #Marcos
78 +
79 + marcocrear = interfaz.Frame(raiz)
80 + interfaz.Label(marcocrear,text="Creación de un nuevo registro").pack(pady=5)
81 + interfaz.Label(marcocrear,text="Introduce el nombre").pack(pady=5)
82 + camponuevonombre = interfaz.Entry(marcocrear,textvariable=nuevonombre,width=40)
83 + camponuevonombre.pack(pady=5)
84 + interfaz.Label(marcocrear,text="Introduce el telefono").pack(pady=5)
85 + camponuevotelefono = interfaz.Entry(marcocrear,textvariable=nuevotelefono,width=40)
86 + camponuevotelefono.pack(pady=5)
87 + interfaz.Label(marcocrear,text="Introduce el email").pack(pady=5)
88 + camponuevoemail = interfaz.Entry(marcocrear,textvariable=nuevoemail,width=40)
89 + camponuevoemail.pack(pady=5)
90 + interfaz.Button(marcocrear,text="Inserta nuevo registro",width=40,command=operacioninsertar).pack(pady=5)
91 print(camponuevonombre)
92
93 marcover = interfaz.Frame(raiz)
94 interfaz.Label(marcover,text="Listado de registros").pack()
95 marcoactualizar = interfaz.Frame(raiz)
96 interfaz.Label(marcoactualizar,text="Actualización de un registro").pack()
97 marcoeliminar = interfaz.Frame(raiz)
98 interfaz.Label(marcoeliminar,text="Eliminación de un registro").pack()
99 marcoinicio = interfaz.Frame(raiz)
100 marcoinicio.pack()
101
102 #Marco de inicio
103 interfaz.Label(marcoinicio,text="Programa agenda").pack()
104 interfaz.Label(marcoinicio,text="(c) 2023 Jose Vicente Carratala").pack()
105
106
107
108 #Menu
109 mimenu = interfaz.Menu(raiz)
110 raiz.config(menu=mimenu)
111 menuagenda = interfaz.Menu(mimenu)
112 menuagenda.add_command(label="Crear",command=nuevo)
113 menuagenda.add_command(label="Ver",command=ver)
114 menuagenda.add_command(label="Actualizar",command=actualizar)
115 menuagenda.add_command(label="Eliminar",command=eliminar)
116
117
118 mimenu.add_cascade(label="Archivo")
119 mimenu.add_cascade(label="Agenda",menu=menuagenda)
120 mimenu.add_cascade(label="Ayuda")





Ejercicio del curso:



7.8.-Eliminar

Estructura del directorio
agenda.py
agenda.sqlite
icono.ico


Ejercicio del curso:



Ejercicio del curso:



agenda.py

/Ejercicio agenda Tkinter/Eliminar/agenda.py

1 import tkinter as interfaz
2 import sqlite3 as db
3 import sys
4
5 conexion = db.connect("agenda.sqlite")
6 cursor = conexion.cursor()
7 cursor.execute('''
8 CREATE TABLE IF NOT EXISTS "contactos" (
9 "Identificador" INTEGER,
10 "nombre" TEXT,
11 "telefono" TEXT,
12 "email" TEXT,
13 PRIMARY KEY("Identificador" AUTOINCREMENT)
14 );
15 ''')
16
17 def nuevo():
18 print("Voy a crear un nuevo registro")
19 marcoinicio.pack_forget()
20 marcocrear.pack()
21 marcover.pack_forget()
22 marcoactualizar.pack_forget()
23 marcoeliminar.pack_forget()
24 def ver():
25 print("Voy a ver registros")
26 marcoinicio.pack_forget()
27 marcocrear.pack_forget()
28 marcover.pack()
29 marcoactualizar.pack_forget()
30 marcoeliminar.pack_forget()
31 def actualizar():
32 print("Voy a actualizar un registro")
33 marcoinicio.pack_forget()
34 marcocrear.pack_forget()
35 marcover.pack_forget()
36 marcoactualizar.pack()
37 marcoeliminar.pack_forget()
38 def eliminar():
39 print("Voy a eliminar un registro")
40 marcoinicio.pack_forget()
41 marcocrear.pack_forget()
42 marcover.pack_forget()
43 marcoactualizar.pack_forget()
44 marcoeliminar.pack()
45 def operacioninsertar():
46 print("Inserto en la base de datos")
47 tomanuevonombre = nuevonombre.get()
48 tomanuevotelefono = nuevotelefono.get()
49 tomanuevoemail = nuevoemail.get()
50 print("Voy a insertar el nombre:"+tomanuevonombre)
51 print("Voy a insertar el telefono:"+tomanuevotelefono)
52 print("Voy a insertar el email:"+tomanuevoemail)
53 cursor.execute('''
54 INSERT INTO contactos VALUES (
55 NULL,
56 "'''+tomanuevonombre+'''",
57 "'''+tomanuevotelefono+'''",
58 "'''+tomanuevoemail+'''"
59 )
60 ''')
61 conexion.commit()
62 camponuevonombre.delete(0, interfaz.END)
63 camponuevotelefono.delete(0, interfaz.END)
64 camponuevoemail.delete(0, interfaz.END)
65
66 + def operacioneliminar():
67 + print("Elimino en la base de datos")
68 + tomaidliminar = ideliminar.get()
69 + cursor.execute('''
70 + DELETE FROM contactos WHERE Identificador = '''+tomaidliminar+'''
71 + ''')
72 + conexion.commit()
73 + campoideliminar.delete(0, interfaz.END)
74 +
75 + #Ventana
76 + raiz = interfaz.Tk()
77 + raiz.geometry("600x600+50+50")
78 + raiz.title("Agenda")
79 + raiz.iconbitmap("icono.ico")
80 +
81 + #Variables de formulario
82 + nuevonombre = interfaz.StringVar(raiz)
83 + nuevotelefono = interfaz.StringVar(raiz)
84 + nuevoemail = interfaz.StringVar(raiz)
85 + ideliminar = interfaz.StringVar(raiz)
86 +
87 + #Marcos
88 +
89 + marcocrear = interfaz.Frame(raiz)
90 + interfaz.Label(marcocrear,text="Creación de un nuevo registro").pack(pady=5)
91 + interfaz.Label(marcocrear,text="Introduce el nombre").pack(pady=5)
92 + camponuevonombre = interfaz.Entry(marcocrear,textvariable=nuevonombre,width=40)
93 + camponuevonombre.pack(pady=5)
94 + interfaz.Label(marcocrear,text="Introduce el telefono").pack(pady=5)
95 + camponuevotelefono = interfaz.Entry(marcocrear,textvariable=nuevotelefono,width=40)
96 + camponuevotelefono.pack(pady=5)
97 + interfaz.Label(marcocrear,text="Introduce el email").pack(pady=5)
98 + camponuevoemail = interfaz.Entry(marcocrear,textvariable=nuevoemail,width=40)
99 + camponuevoemail.pack(pady=5)
100 + interfaz.Button(marcocrear,text="Inserta nuevo registro",width=40,command=operacioninsertar).pack(pady=5)
101 + print(camponuevonombre)
102 +
103 + marcover = interfaz.Frame(raiz)
104 + interfaz.Label(marcover,text="Listado de registros").pack()
105
106 + marcoactualizar = interfaz.Frame(raiz)
107 + interfaz.Label(marcoactualizar,text="Actualización de un registro").pack()
108 +
109 + marcoeliminar = interfaz.Frame(raiz)
110 + interfaz.Label(marcoeliminar,text="Eliminación de un registro").pack()
111 + interfaz.Label(marcoeliminar,text="Introduce el id a eliminar").pack(pady=5)
112 + campoideliminar = interfaz.Entry(marcoeliminar,textvariable=ideliminar,width=40)
113 + campoideliminar.pack(pady=5)
114 + interfaz.Button(marcoeliminar,text="Eliminar registro",width=40,command=operacioneliminar).pack(pady=5)
115 +
116 + marcoinicio = interfaz.Frame(raiz)
117 + marcoinicio.pack()
118 +
119 + #Marco de inicio
120 + interfaz.Label(marcoinicio,text="Programa agenda").pack()
121 interfaz.Label(marcoinicio,text="(c) 2023 Jose Vicente Carratala").pack()
122
123
124
125 #Menu
126 mimenu = interfaz.Menu(raiz)
127 raiz.config(menu=mimenu)
128 menuagenda = interfaz.Menu(mimenu)
129 menuagenda.add_command(label="Crear",command=nuevo)
130 menuagenda.add_command(label="Ver",command=ver)
131 menuagenda.add_command(label="Actualizar",command=actualizar)
132 menuagenda.add_command(label="Eliminar",command=eliminar)
133
134
135 mimenu.add_cascade(label="Archivo")
136 mimenu.add_cascade(label="Agenda",menu=menuagenda)
137 mimenu.add_cascade(label="Ayuda")

Ejercicio del curso:



7.9.-Listado

Estructura del directorio
agenda.py
agenda.sqlite
icono.ico


Ejercicio del curso:



Ejercicio del curso:



agenda.py

/Ejercicio agenda Tkinter/Listado/agenda.py

1 import tkinter as interfaz
2 + from tkinter import ttk
3 + import sqlite3 as db
4 + import sys
5 +
6 + conexion = db.connect("agenda.sqlite")
7 + cursor = conexion.cursor()
8 + cursor.execute('''
9 + CREATE TABLE IF NOT EXISTS "contactos" (
10 + "Identificador" INTEGER,
11 + "nombre" TEXT,
12 + "telefono" TEXT,
13 + "email" TEXT,
14 + PRIMARY KEY("Identificador" AUTOINCREMENT)
15 + );
16 + ''')
17 +
18 +
19 +
20 + def nuevo():
21 + print("Voy a crear un nuevo registro")
22 + marcoinicio.pack_forget()
23 + marcocrear.pack()
24 + marcover.pack_forget()
25 + marcoactualizar.pack_forget()
26 + marcoeliminar.pack_forget()
27 + def ver():
28 + print("Voy a ver registros")
29 + marcoinicio.pack_forget()
30 + marcocrear.pack_forget()
31 + marcover.pack()
32 + marcoactualizar.pack_forget()
33 + marcoeliminar.pack_forget()
34 + cursor.execute('''
35 + SELECT * FROM contactos
36 + ''')
37 + datos = cursor.fetchall()
38 + for item in arbol.get_children():
39 + arbol.delete(item)
40 + for i in datos:
41 + print('''
42 + Identificador:'''+str(i[0])+'''###############
43 + nombre:'''+str(i[1])+'''
44 + telefono: '''+str(i[2])+'''
45 + email:'''+str(i[3])+'''
46 +
47 + ''')
48 + arbol.insert('', 'end', text="1", values=(str(i[1]), str(i[2]), str(i[3])))
49 +
50 + def actualizar():
51 + print("Voy a actualizar un registro")
52 + marcoinicio.pack_forget()
53 + marcocrear.pack_forget()
54 + marcover.pack_forget()
55 + marcoactualizar.pack()
56 + marcoeliminar.pack_forget()
57 + def eliminar():
58 + print("Voy a eliminar un registro")
59 + marcoinicio.pack_forget()
60 + marcocrear.pack_forget()
61 + marcover.pack_forget()
62 + marcoactualizar.pack_forget()
63 + marcoeliminar.pack()
64 + def operacioninsertar():
65 + print("Inserto en la base de datos")
66 + tomanuevonombre = nuevonombre.get()
67 + tomanuevotelefono = nuevotelefono.get()
68 + tomanuevoemail = nuevoemail.get()
69 + print("Voy a insertar el nombre:"+tomanuevonombre)
70 + print("Voy a insertar el telefono:"+tomanuevotelefono)
71 + print("Voy a insertar el email:"+tomanuevoemail)
72 + cursor.execute('''
73 + INSERT INTO contactos VALUES (
74 + NULL,
75 + "'''+tomanuevonombre+'''",
76 + "'''+tomanuevotelefono+'''",
77 + "'''+tomanuevoemail+'''"
78 + )
79 + ''')
80 + conexion.commit()
81 + camponuevonombre.delete(0, interfaz.END)
82 + camponuevotelefono.delete(0, interfaz.END)
83 + camponuevoemail.delete(0, interfaz.END)
84 +
85 + def operacioneliminar():
86 + print("Elimino en la base de datos")
87 + tomaidliminar = ideliminar.get()
88 + cursor.execute('''
89 + DELETE FROM contactos WHERE Identificador = '''+tomaidliminar+'''
90 + ''')
91 + conexion.commit()
92 + campoideliminar.delete(0, interfaz.END)
93 +
94 +
95 + #Ventana
96 + raiz = interfaz.Tk()
97 + raiz.geometry("600x600+50+50")
98 + raiz.title("Agenda")
99 + raiz.iconbitmap("icono.ico")
100 + raiz.configure('Treeview', rowheight=40)
101 +
102 + #Variables de formulario
103 + nuevonombre = interfaz.StringVar(raiz)
104 + nuevotelefono = interfaz.StringVar(raiz)
105 + nuevoemail = interfaz.StringVar(raiz)
106 + ideliminar = interfaz.StringVar(raiz)
107 +
108 + #Marcos
109 +
110 + marcocrear = interfaz.Frame(raiz)
111 + interfaz.Label(marcocrear,text="Creación de un nuevo registro").pack(pady=5)
112 + interfaz.Label(marcocrear,text="Introduce el nombre").pack(pady=5)
113 + camponuevonombre = interfaz.Entry(marcocrear,textvariable=nuevonombre,width=40)
114 + camponuevonombre.pack(pady=5)
115 + interfaz.Label(marcocrear,text="Introduce el telefono").pack(pady=5)
116 + camponuevotelefono = interfaz.Entry(marcocrear,textvariable=nuevotelefono,width=40)
117 + camponuevotelefono.pack(pady=5)
118 + interfaz.Label(marcocrear,text="Introduce el email").pack(pady=5)
119 + camponuevoemail = interfaz.Entry(marcocrear,textvariable=nuevoemail,width=40)
120 + camponuevoemail.pack(pady=5)
121 + interfaz.Button(marcocrear,text="Inserta nuevo registro",width=40,command=operacioninsertar).pack(pady=5)
122 + print(camponuevonombre)
123
124 + marcover = interfaz.Frame(raiz)
125 + interfaz.Label(marcover,text="Listado de registros").pack()
126 + arbol = ttk.Treeview(marcover, column=("Nombre", "Telefono", "Email"), show='headings', height=5)
127 + arbol.column("# 1", anchor=interfaz.CENTER)
128 + arbol.heading("# 1", text="Nombre")
129 + arbol.column("# 2", anchor=interfaz.CENTER)
130 + arbol.heading("# 2", text="Telefono")
131 + arbol.column("# 3", anchor=interfaz.CENTER)
132 + arbol.heading("# 3", text="Email")
133 + arbol.pack()
134
135 +
136 + marcoactualizar = interfaz.Frame(raiz)
137 + interfaz.Label(marcoactualizar,text="Actualización de un registro").pack()
138
139 marcoeliminar = interfaz.Frame(raiz)
140 interfaz.Label(marcoeliminar,text="Eliminación de un registro").pack()
141 interfaz.Label(marcoeliminar,text="Introduce el id a eliminar").pack(pady=5)
142 campoideliminar = interfaz.Entry(marcoeliminar,textvariable=ideliminar,width=40)
143 campoideliminar.pack(pady=5)
144 interfaz.Button(marcoeliminar,text="Eliminar registro",width=40,command=operacioneliminar).pack(pady=5)
145
146 marcoinicio = interfaz.Frame(raiz)
147 marcoinicio.pack()
148
149 #Marco de inicio
150 interfaz.Label(marcoinicio,text="Programa agenda").pack()
151 interfaz.Label(marcoinicio,text="(c) 2023 Jose Vicente Carratala").pack()
152
153
154
155 #Menu
156 mimenu = interfaz.Menu(raiz)
157 raiz.config(menu=mimenu)
158 menuagenda = interfaz.Menu(mimenu)
159 menuagenda.add_command(label="Crear",command=nuevo)
160 menuagenda.add_command(label="Ver",command=ver)
161 menuagenda.add_command(label="Actualizar",command=actualizar)
162 menuagenda.add_command(label="Eliminar",command=eliminar)
163
164
165 mimenu.add_cascade(label="Archivo")
166 mimenu.add_cascade(label="Agenda",menu=menuagenda)
167 mimenu.add_cascade(label="Ayuda")

Ejercicio del curso:



7.10.-Actualizar

Estructura del directorio
agenda.py
agenda.sqlite
icono.ico


Ejercicio del curso:



Ejercicio del curso:



agenda.py

/Ejercicio agenda Tkinter/Actualizar/agenda.py

1 import tkinter as interfaz
2 from tkinter import ttk
3 import sqlite3 as db
4 import sys
5
6 conexion = db.connect("agenda.sqlite")
7 cursor = conexion.cursor()
8 cursor.execute('''
9 CREATE TABLE IF NOT EXISTS "contactos" (
10 "Identificador" INTEGER,
11 "nombre" TEXT,
12 "telefono" TEXT,
13 "email" TEXT,
14 PRIMARY KEY("Identificador" AUTOINCREMENT)
15 );
16 ''')
17
18
19
20 def nuevo():
21 print("Voy a crear un nuevo registro")
22 marcoinicio.pack_forget()
23 marcocrear.pack()
24 marcover.pack_forget()
25 marcoactualizar.pack_forget()
26 marcoeliminar.pack_forget()
27 def ver():
28 print("Voy a ver registros")
29 marcoinicio.pack_forget()
30 marcocrear.pack_forget()
31 marcover.pack()
32 marcoactualizar.pack_forget()
33 marcoeliminar.pack_forget()
34 cursor.execute('''
35 SELECT * FROM contactos
36 ''')
37 datos = cursor.fetchall()
38 for item in arbol.get_children():
39 arbol.delete(item)
40 for i in datos:
41 print('''
42 Identificador:'''+str(i[0])+'''###############
43 nombre:'''+str(i[1])+'''
44 telefono: '''+str(i[2])+'''
45 email:'''+str(i[3])+'''
46
47 ''')
48 arbol.insert('', 'end', text="1", values=(str(i[1]), str(i[2]), str(i[3])))
49
50 def actualizar():
51 print("Voy a actualizar un registro")
52 marcoinicio.pack_forget()
53 marcocrear.pack_forget()
54 marcover.pack_forget()
55 marcoactualizar.pack()
56 marcoeliminar.pack_forget()
57 def eliminar():
58 print("Voy a eliminar un registro")
59 marcoinicio.pack_forget()
60 marcocrear.pack_forget()
61 marcover.pack_forget()
62 marcoactualizar.pack_forget()
63 marcoeliminar.pack()
64 def operacioninsertar():
65 print("Inserto en la base de datos")
66 tomanuevonombre = nuevonombre.get()
67 tomanuevotelefono = nuevotelefono.get()
68 tomanuevoemail = nuevoemail.get()
69 print("Voy a insertar el nombre:"+tomanuevonombre)
70 print("Voy a insertar el telefono:"+tomanuevotelefono)
71 print("Voy a insertar el email:"+tomanuevoemail)
72 cursor.execute('''
73 INSERT INTO contactos VALUES (
74 NULL,
75 "'''+tomanuevonombre+'''",
76 "'''+tomanuevotelefono+'''",
77 "'''+tomanuevoemail+'''"
78 )
79 ''')
80 conexion.commit()
81 camponuevonombre.delete(0, interfaz.END)
82 camponuevotelefono.delete(0, interfaz.END)
83 camponuevoemail.delete(0, interfaz.END)
84
85 def operacioneliminar():
86 print("Elimino en la base de datos")
87 tomaidliminar = ideliminar.get()
88 cursor.execute('''
89 DELETE FROM contactos WHERE Identificador = '''+tomaidliminar+'''
90 ''')
91 conexion.commit()
92 campoideliminar.delete(0, interfaz.END)
93 +
94 + def operacionactualizar():
95 + print("Inserto en la base de datos")
96 + tomanuevoid = idactualizar.get()
97 + tomanuevonombre = actualizarnombre.get()
98 + tomanuevotelefono = actualizartelefono.get()
99 + tomanuevoemail = actualizaremail.get()
100 + cursor.execute('''
101 + UPDATE contactos SET
102 +
103 + nombre = "'''+tomanuevonombre+'''",
104 + telefono = "'''+tomanuevotelefono+'''",
105 + email = "'''+tomanuevoemail+'''"
106 + WHERE Identificador = '''+tomanuevoid+'''
107 +
108 + ''')
109 + conexion.commit()
110 + campoactualizarnombre.delete(0, interfaz.END)
111 + campoactualizartelefono.delete(0, interfaz.END)
112 + campoactualizaremail.delete(0, interfaz.END)
113 +
114 + #Ventana
115 + raiz = interfaz.Tk()
116 + raiz.geometry("600x600+50+50")
117 + raiz.title("Agenda")
118 + raiz.iconbitmap("icono.ico")
119 +
120 + #Variables de formulario
121 + nuevonombre = interfaz.StringVar(raiz)
122 + nuevotelefono = interfaz.StringVar(raiz)
123 + nuevoemail = interfaz.StringVar(raiz)
124 + ideliminar = interfaz.StringVar(raiz)
125 + actualizarnombre = interfaz.StringVar(raiz)
126 + actualizartelefono = interfaz.StringVar(raiz)
127 + actualizaremail = interfaz.StringVar(raiz)
128 + idactualizar = interfaz.StringVar(raiz)
129 +
130 + #Marcos
131 +
132 + marcocrear = interfaz.Frame(raiz)
133 + interfaz.Label(marcocrear,text="Creación de un nuevo registro").pack(pady=5)
134 + interfaz.Label(marcocrear,text="Introduce el nombre").pack(pady=5)
135 + camponuevonombre = interfaz.Entry(marcocrear,textvariable=nuevonombre,width=40)
136 + camponuevonombre.pack(pady=5)
137 + interfaz.Label(marcocrear,text="Introduce el telefono").pack(pady=5)
138 + camponuevotelefono = interfaz.Entry(marcocrear,textvariable=nuevotelefono,width=40)
139 + camponuevotelefono.pack(pady=5)
140 + interfaz.Label(marcocrear,text="Introduce el email").pack(pady=5)
141 + camponuevoemail = interfaz.Entry(marcocrear,textvariable=nuevoemail,width=40)
142 + camponuevoemail.pack(pady=5)
143 + interfaz.Button(marcocrear,text="Inserta nuevo registro",width=40,command=operacioninsertar).pack(pady=5)
144 + print(camponuevonombre)
145
146 + marcover = interfaz.Frame(raiz)
147 + interfaz.Label(marcover,text="Listado de registros").pack()
148 + arbol = ttk.Treeview(marcover, column=("Nombre", "Telefono", "Email"), show='headings', height=5)
149 + arbol.column("# 1", anchor=interfaz.CENTER)
150 + arbol.heading("# 1", text="Nombre")
151 + arbol.column("# 2", anchor=interfaz.CENTER)
152 + arbol.heading("# 2", text="Telefono")
153 + arbol.column("# 3", anchor=interfaz.CENTER)
154 + arbol.heading("# 3", text="Email")
155 + arbol.pack()
156 +
157 +
158 + marcoactualizar = interfaz.Frame(raiz)
159 + interfaz.Label(marcoactualizar,text="Actualización de un registro").pack()
160 + interfaz.Label(marcoactualizar,text="Introduce el id a actualizar").pack(pady=5)
161 + campoidactualizar = interfaz.Entry(marcoactualizar,textvariable=idactualizar,width=40)
162 + campoidactualizar.pack(pady=5)
163 + interfaz.Label(marcoactualizar,text="Introduce el nuevo nombre").pack(pady=5)
164 + campoactualizarnombre = interfaz.Entry(marcoactualizar,textvariable=actualizarnombre,width=40)
165 + campoactualizarnombre.pack(pady=5)
166 + interfaz.Label(marcoactualizar,text="Introduce el nuevo telefono").pack(pady=5)
167 + campoactualizartelefono = interfaz.Entry(marcoactualizar,textvariable=actualizartelefono,width=40)
168 campoactualizartelefono.pack(pady=5)
169 interfaz.Label(marcoactualizar,text="Introduce el nuevo email").pack(pady=5)
170 campoactualizaremail = interfaz.Entry(marcoactualizar,textvariable=actualizaremail,width=40)
171 campoactualizaremail.pack(pady=5)
172 interfaz.Button(marcoactualizar,text="Actualiza registro",width=40,command=operacionactualizar).pack(pady=5)
173
174
175
176
177 marcoeliminar = interfaz.Frame(raiz)
178 interfaz.Label(marcoeliminar,text="Eliminación de un registro").pack()
179 interfaz.Label(marcoeliminar,text="Introduce el id a eliminar").pack(pady=5)
180 campoideliminar = interfaz.Entry(marcoeliminar,textvariable=ideliminar,width=40)
181 campoideliminar.pack(pady=5)
182 interfaz.Button(marcoeliminar,text="Eliminar registro",width=40,command=operacioneliminar).pack(pady=5)
183
184 marcoinicio = interfaz.Frame(raiz)
185 marcoinicio.pack()
186
187 #Marco de inicio
188 interfaz.Label(marcoinicio,text="Programa agenda").pack()
189 interfaz.Label(marcoinicio,text="(c) 2023 Jose Vicente Carratala").pack()
190
191
192
193 #Menu
194 mimenu = interfaz.Menu(raiz)
195 raiz.config(menu=mimenu)
196 menuagenda = interfaz.Menu(mimenu)
197 menuagenda.add_command(label="Crear",command=nuevo)
198 menuagenda.add_command(label="Ver",command=ver)
199 menuagenda.add_command(label="Actualizar",command=actualizar)
200 menuagenda.add_command(label="Eliminar",command=eliminar)
201
202
203 mimenu.add_cascade(label="Archivo")
204 mimenu.add_cascade(label="Agenda",menu=menuagenda)
205 mimenu.add_cascade(label="Ayuda")

Ejercicio del curso:



8.-Sistema

8.1.-Librería OS

Ejercicio del curso:

librería OS.py



/Sistema/Librería OS/librería OS.py

1 import os
2





Ejercicio del curso:

librería OS.py



/Sistema/Librería OS/librería OS.py

1 import os
2
3 listado = os.listdir('../../fotos')
4 print(listado)





Ejercicio del curso:

Imprimir listadoi.py



/Sistema/Librería OS/Imprimir listadoi.py

1 import os
2
3 listado = os.listdir('../../fotos')
4 print(listado)





Ejercicio del curso:

repasar archivos.py



/Sistema/Librería OS/repasar archivos.py

1 import os
2
3 listado = os.listdir('../../fotos')
4 print(listado)
5
6 for archivo in listado:
7 print(archivo)





Ejercicio del curso:

renombrar.py



/Sistema/Librería OS/renombrar.py

1 import os
2
3 listado = os.listdir('../../fotos')
4 print(listado)
5
6 contador = 1
7 os.mkdir("../../fotos2/")
8
9 for archivo in listado:
10 print(archivo)
11
12 os.rename("../../fotos/"+archivo,"../../fotos2/"+str(contador)+".jpg")
13 contador += 1
14





Ejercicio del curso:

tryexcept.py



/Sistema/Librería OS/tryexcept.py

1 import os
2
3 listado = os.listdir('../../fotos')
4 print(listado)
5
6 contador = 1
7 try:
8 os.mkdir("../../fotos2/")
9 except:
10 print("Ha habido algún error al crear la carpeta")
11
12 for archivo in listado:
13 print(archivo)
14
15 os.rename("../../fotos/"+archivo,"../../fotos2/"+str(contador)+".jpg")
16 contador += 1
17





Ejercicio del curso:

tryexcept2.py



/Sistema/Librería OS/tryexcept2.py

1 import os
2
3 listado = os.listdir('../../fotos')
4 print(listado)
5
6 contador = 1
7 try:
8 os.mkdir("../../fotos2/")
9 except:
10 print("Ha habido algún error al crear la carpeta")
11
12 for archivo in listado:
13 print(archivo)
14 try:
15 os.rename("../../fotos/"+archivo,"../../fotos2/"+str(contador)+".jpg")
16 except:
17 print("el archivo ya existía")
18 contador += 1
19





Ejercicio del curso:

exif.py



/Sistema/Librería OS/exif.py

1 import os
2 import PIL.Image
3
4 listado = os.listdir('../../fotos')
5 print(listado)
6
7 contador = 1
8 try:
9 os.mkdir("../../fotos2/")
10 except:
11 print("Ha habido algún error al crear la carpeta")
12
13 for archivo in listado:
14 print(archivo)
15 imagen = PIL.Image.open('../../fotos/'+archivo)
16 datosexif = imagen._getexif()
17 print(datosexif)
18 try:
19 os.rename("../../fotos/"+archivo,"../../fotos2/"+str(contador)+".jpg")
20 except:
21 print("el archivo ya existía")
22 contador += 1
23





Ejercicio del curso:

exiffecha.py



/Sistema/Librería OS/exiffecha.py

1 import os
2 import PIL.Image
3
4 listado = os.listdir('../../fotos')
5 print(listado)
6
7 contador = 1
8 try:
9 os.mkdir("../../fotos2/")
10 except:
11 print("Ha habido algún error al crear la carpeta")
12
13 for archivo in listado:
14 print(archivo)
15 imagen = PIL.Image.open('../../fotos/'+archivo)
16 datosexif = imagen._getexif()
17 print(datosexif[36868])
18 try:
19 os.rename("../../fotos/"+archivo,"../../fotos2/"+str(contador)+".jpg")
20 except:
21 print("el archivo ya existía")
22 contador += 1
23





Ejercicio del curso:

splitfecha.py



/Sistema/Librería OS/splitfecha.py

1 import os
2 import PIL.Image
3
4 listado = os.listdir('../../fotos')
5 print(listado)
6
7 contador = 1
8 try:
9 os.mkdir("../../fotos2/")
10 except:
11 print("Ha habido algún error al crear la carpeta")
12
13 for archivo in listado:
14 print(archivo)
15 imagen = PIL.Image.open('../../fotos/'+archivo)
16 datosexif = imagen._getexif()
17 fecha = datosexif[36868]
18 imagen.close()
19 nuevafecha = fecha.replace(" ","-").replace(":","_")
20 try:
21 os.rename("../../fotos/"+archivo,"../../fotos2/"+nuevafecha+".jpg")
22 except:
23 print("el archivo ya existía")
24 contador += 1
25





Ejercicio del curso:

tkinter.py



/Sistema/Librería OS/tkinter.py

1 import tkinter as tk
2
3 raiz = tk.Tk()
4 raiz.geometry("300x300")
5 marco = tk.Frame()
6 marco.pack()
7
8 tk.Label(marco,text="Introduce la carpeta de origen").pack()
9
10 raiz.mainloop()
11





Ejercicio del curso:

selector de carpetas.py



/Sistema/Librería OS/selector de carpetas.py

1 import tkinter as tk
2 from tkinter import filedialog
3
4 raiz = tk.Tk()
5 raiz.geometry("300x300")
6 marco = tk.Frame()
7 marco.pack()
8
9 tk.Label(marco,text="Introduce la carpeta de origen").pack()
10 folder_selected = filedialog.askdirectory()
11
12 raiz.mainloop()
13





Ejercicio del curso:

boton.py



/Sistema/Librería OS/boton.py

1 import tkinter as tk
2 from tkinter import filedialog
3
4 def selCarpetaOrigen():
5 carpetaorigen = filedialog.askdirectory()
6 print(carpetaorigen)
7
8 raiz = tk.Tk()
9 raiz.geometry("300x300")
10 marco = tk.Frame()
11 marco.pack()
12
13 tk.Label(marco,text="Introduce la carpeta de origen").pack()
14 tk.Button(marco,text="Selecciona",command=selCarpetaOrigen).pack()
15
16
17 raiz.mainloop()
18





Ejercicio del curso:

carpetadestino.py



/Sistema/Librería OS/carpetadestino.py

1 import tkinter as tk
2 from tkinter import filedialog
3
4 def selCarpetaOrigen():
5 carpetaorigen = filedialog.askdirectory()
6 print(carpetaorigen)
7 def selCarpetaDestino():
8 carpetadestino = filedialog.askdirectory()
9 print(carpetadestino)
10
11 raiz = tk.Tk()
12 raiz.geometry("300x300")
13 marco = tk.Frame()
14 marco.pack()
15
16 tk.Label(marco,text="Introduce la carpeta de origen").pack()
17 tk.Button(marco,text="Selecciona",command=selCarpetaOrigen).pack()
18 tk.Label(marco,text="Introduce la carpeta de destino").pack()
19 tk.Button(marco,text="Selecciona",command=selCarpetaDestino).pack()
20
21
22 raiz.mainloop()
23





Ejercicio del curso:

botoniniciador.py



/Sistema/Librería OS/botoniniciador.py

1 import tkinter as tk
2 from tkinter import filedialog
3
4 def selCarpetaOrigen():
5 carpetaorigen = filedialog.askdirectory()
6 print(carpetaorigen)
7 def selCarpetaDestino():
8 carpetadestino = filedialog.askdirectory()
9 print(carpetadestino)
10 def iniciar():
11 print("vamos a ejecutar el programa")
12 print("la carpeta de origen es: "+carpetaorigen)
13 print("la carpeta de destino es: "+carpetadestino)
14 raiz = tk.Tk()
15 raiz.geometry("300x300")
16 marco = tk.Frame()
17 marco.pack()
18
19 tk.Label(marco,text="Introduce la carpeta de origen").pack()
20 tk.Button(marco,text="Selecciona",command=selCarpetaOrigen).pack()
21 tk.Label(marco,text="Introduce la carpeta de destino").pack()
22 tk.Button(marco,text="Selecciona",command=selCarpetaDestino).pack()
23 tk.Button(marco,text="Vamos",command=iniciar).pack()
24
25 raiz.mainloop()
26





Ejercicio del curso:

variablesglobales.py



/Sistema/Librería OS/variablesglobales.py

1 import tkinter as tk
2 from tkinter import filedialog
3
4 carpetaorigen = ""
5 carpetadestino = ""
6
7 def selCarpetaOrigen():
8 carpetaorigen = filedialog.askdirectory()
9 print(carpetaorigen)
10 def selCarpetaDestino():
11 carpetadestino = filedialog.askdirectory()
12 print(carpetadestino)
13 def iniciar():
14 print("vamos a ejecutar el programa")
15 print("la carpeta de origen es: "+carpetaorigen)
16 print("la carpeta de destino es: "+carpetadestino)
17 raiz = tk.Tk()
18 raiz.geometry("300x300")
19 marco = tk.Frame()
20 marco.pack()
21
22 tk.Label(marco,text="Introduce la carpeta de origen").pack()
23 tk.Button(marco,text="Selecciona",command=selCarpetaOrigen).pack()
24 tk.Label(marco,text="Introduce la carpeta de destino").pack()
25 tk.Button(marco,text="Selecciona",command=selCarpetaDestino).pack()
26 tk.Button(marco,text="Vamos",command=iniciar).pack()
27
28 raiz.mainloop()
29





Ejercicio del curso:

usodeglobal.py



/Sistema/Librería OS/usodeglobal.py

1 import tkinter as tk
2 from tkinter import filedialog
3
4 carpetaorigen = ""
5 carpetadestino = ""
6
7 def selCarpetaOrigen():
8 global carpetaorigen
9 carpetaorigen = filedialog.askdirectory()
10 print(carpetaorigen)
11 def selCarpetaDestino():
12 global carpetadestino
13 carpetadestino = filedialog.askdirectory()
14 print(carpetadestino)
15 def iniciar():
16 print("vamos a ejecutar el programa")
17 print("la carpeta de origen es: "+carpetaorigen)
18 print("la carpeta de destino es: "+carpetadestino)
19 raiz = tk.Tk()
20 raiz.geometry("300x300")
21 marco = tk.Frame()
22 marco.pack()
23
24 tk.Label(marco,text="Introduce la carpeta de origen").pack()
25 tk.Button(marco,text="Selecciona",command=selCarpetaOrigen).pack()
26 tk.Label(marco,text="Introduce la carpeta de destino").pack()
27 tk.Button(marco,text="Selecciona",command=selCarpetaDestino).pack()
28 tk.Button(marco,text="Vamos",command=iniciar).pack()
29
30 raiz.mainloop()
31





Ejercicio del curso:

fusion.py



/Sistema/Librería OS/fusion.py

1 import tkinter as tk
2 from tkinter import filedialog
3 import os
4 import PIL.Image
5
6 carpetaorigen = ""
7 carpetadestino = ""
8
9 def selCarpetaOrigen():
10 global carpetaorigen
11 carpetaorigen = filedialog.askdirectory()
12 print(carpetaorigen)
13 def selCarpetaDestino():
14 global carpetadestino
15 carpetadestino = filedialog.askdirectory()
16 print(carpetadestino)
17 def iniciar():
18 listado = os.listdir(carpetaorigen)
19 print(listado)
20 for archivo in listado:
21 print(archivo)
22 imagen = PIL.Image.open(carpetaorigen+"/"+archivo)
23 datosexif = imagen._getexif()
24 fecha = datosexif[36868]
25 imagen.close()
26 nuevafecha = fecha.replace(" ","-").replace(":","_")
27 try:
28 os.rename(carpetaorigen+"/"+archivo,carpetadestino+"/"+nuevafecha+".jpg")
29 except:
30 print("el archivo ya existía")
31
32
33 raiz = tk.Tk()
34 raiz.geometry("300x300")
35 marco = tk.Frame()
36 marco.pack()
37
38 tk.Label(marco,text="Introduce la carpeta de origen").pack()
39 tk.Button(marco,text="Selecciona",command=selCarpetaOrigen).pack()
40 tk.Label(marco,text="Introduce la carpeta de destino").pack()
41 tk.Button(marco,text="Selecciona",command=selCarpetaDestino).pack()
42 tk.Button(marco,text="Vamos",command=iniciar).pack()
43
44 raiz.mainloop()
45





Ejercicio del curso:

barradeprogreso.py



/Sistema/Librería OS/barradeprogreso.py

1 import tkinter as tk
2 from tkinter import filedialog
3 import os
4 import PIL.Image
5 from tkinter import ttk
6
7 carpetaorigen = ""
8 carpetadestino = ""
9
10 def selCarpetaOrigen():
11 global carpetaorigen
12 carpetaorigen = filedialog.askdirectory()
13 print(carpetaorigen)
14 def selCarpetaDestino():
15 global carpetadestino
16 carpetadestino = filedialog.askdirectory()
17 print(carpetadestino)
18 def iniciar():
19 listado = os.listdir(carpetaorigen)
20 print(listado)
21 for archivo in listado:
22 print(archivo)
23 imagen = PIL.Image.open(carpetaorigen+"/"+archivo)
24 datosexif = imagen._getexif()
25 fecha = datosexif[36868]
26 imagen.close()
27 nuevafecha = fecha.replace(" ","-").replace(":","_")
28 try:
29 os.rename(carpetaorigen+"/"+archivo,carpetadestino+"/"+nuevafecha+".jpg")
30 except:
31 print("el archivo ya existía")
32
33
34 raiz = tk.Tk()
35 raiz.geometry("300x300")
36 marco = tk.Frame()
37 marco.pack()
38
39 tk.Label(marco,text="Introduce la carpeta de origen").pack()
40 tk.Button(marco,text="Selecciona",command=selCarpetaOrigen).pack()
41 tk.Label(marco,text="Introduce la carpeta de destino").pack()
42 tk.Button(marco,text="Selecciona",command=selCarpetaDestino).pack()
43 tk.Button(marco,text="Vamos",command=iniciar).pack()
44 barraprogreso = ttk.Progressbar()
45 barraprogreso.pack()
46 raiz.mainloop()
47





Ejercicio del curso:

barradeprogresoavance.py



/Sistema/Librería OS/barradeprogresoavance.py

1 import tkinter as tk
2 from tkinter import filedialog
3 import os
4 import PIL.Image
5 from tkinter import ttk
6
7 carpetaorigen = ""
8 carpetadestino = ""
9
10 def selCarpetaOrigen():
11 global carpetaorigen
12 carpetaorigen = filedialog.askdirectory()
13 print(carpetaorigen)
14 def selCarpetaDestino():
15 global carpetadestino
16 carpetadestino = filedialog.askdirectory()
17 print(carpetadestino)
18 def iniciar():
19 listado = os.listdir(carpetaorigen)
20 print(listado)
21 for archivo in listado:
22 print(archivo)
23 imagen = PIL.Image.open(carpetaorigen+"/"+archivo)
24 datosexif = imagen._getexif()
25 fecha = datosexif[36868]
26 imagen.close()
27 nuevafecha = fecha.replace(" ","-").replace(":","_")
28 try:
29 os.rename(carpetaorigen+"/"+archivo,carpetadestino+"/"+nuevafecha+".jpg")
30 except:
31 print("el archivo ya existía")
32
33
34 raiz = tk.Tk()
35 raiz.geometry("300x300")
36 marco = tk.Frame()
37 marco.pack()
38
39 tk.Label(marco,text="Introduce la carpeta de origen").pack()
40 tk.Button(marco,text="Selecciona",command=selCarpetaOrigen).pack()
41 tk.Label(marco,text="Introduce la carpeta de destino").pack()
42 tk.Button(marco,text="Selecciona",command=selCarpetaDestino).pack()
43 tk.Button(marco,text="Vamos",command=iniciar).pack()
44 barraprogreso = ttk.Progressbar()
45 barraprogreso.pack()
46 barraprogreso.step(50)
47 raiz.mainloop()
48





Ejercicio del curso:

barradeprogresoavancedinamico.py



/Sistema/Librería OS/barradeprogresoavancedinamico.py

1 import tkinter as tk
2 from tkinter import filedialog
3 import os
4 import PIL.Image
5 from tkinter import ttk
6
7 carpetaorigen = ""
8 carpetadestino = ""
9
10
11
12
13 def selCarpetaOrigen():
14 global carpetaorigen
15 carpetaorigen = filedialog.askdirectory()
16 print(carpetaorigen)
17 def selCarpetaDestino():
18 global carpetadestino
19 carpetadestino = filedialog.askdirectory()
20 print(carpetadestino)
21 def iniciar():
22 listado = os.listdir(carpetaorigen)
23 print(listado)
24 longitud = len(listado)
25 contador = 1
26 for archivo in listado:
27 print(archivo)
28 imagen = PIL.Image.open(carpetaorigen+"/"+archivo)
29 datosexif = imagen._getexif()
30 fecha = datosexif[36868]
31 imagen.close()
32 nuevafecha = fecha.replace(" ","-").replace(":","_")
33 try:
34 os.rename(carpetaorigen+"/"+archivo,carpetadestino+"/"+nuevafecha+".jpg")
35 except:
36 print("el archivo ya existía")
37 dondeestoy = round((contador/longitud)*100)
38 print(dondeestoy)
39 progreso.set(dondeestoy)
40 contador += 1
41
42
43 raiz = tk.Tk()
44 raiz.geometry("300x300")
45 progreso = tk.IntVar()
46 marco = tk.Frame()
47 marco.pack()
48
49 tk.Label(marco,text="Introduce la carpeta de origen").pack()
50 tk.Button(marco,text="Selecciona",command=selCarpetaOrigen).pack()
51 tk.Label(marco,text="Introduce la carpeta de destino").pack()
52 tk.Button(marco,text="Selecciona",command=selCarpetaDestino).pack()
53 tk.Button(marco,text="Vamos",command=iniciar).pack()
54 barraprogreso = ttk.Progressbar(variable=progreso)
55 barraprogreso.pack()
56 barraprogreso.step(0)
57 raiz.mainloop()
58





Ejercicio del curso:

numeroarchivos.py



/Sistema/Librería OS/numeroarchivos.py

1 import tkinter as tk
2 from tkinter import filedialog
3 import os
4 import PIL.Image
5 from tkinter import ttk
6
7 carpetaorigen = ""
8 carpetadestino = ""
9
10
11
12
13 def selCarpetaOrigen():
14 global carpetaorigen
15 carpetaorigen = filedialog.askdirectory()
16 print(carpetaorigen)
17 def selCarpetaDestino():
18 global carpetadestino
19 carpetadestino = filedialog.askdirectory()
20 print(carpetadestino)
21 def iniciar():
22 listado = os.listdir(carpetaorigen)
23 print(listado)
24 longitud = len(listado)
25 contador = 1
26 for archivo in listado:
27 print(archivo)
28 imagen = PIL.Image.open(carpetaorigen+"/"+archivo)
29 datosexif = imagen._getexif()
30 fecha = datosexif[36868]
31 imagen.close()
32 nuevafecha = fecha.replace(" ","-").replace(":","_")
33 try:
34 os.rename(carpetaorigen+"/"+archivo,carpetadestino+"/"+nuevafecha+".jpg")
35 except:
36 print("el archivo ya existía")
37 dondeestoy = round((contador/longitud)*100)
38 print(dondeestoy)
39 progreso.set(dondeestoy)
40 contador += 1
41 etiquetaresultado.config(text = "Archivos procesados: "+str(longitud))
42
43
44 raiz = tk.Tk()
45 raiz.geometry("300x300")
46 progreso = tk.IntVar()
47 marco = tk.Frame()
48 marco.pack()
49
50 tk.Label(marco,text="Introduce la carpeta de origen").pack()
51 tk.Button(marco,text="Selecciona",command=selCarpetaOrigen).pack()
52 tk.Label(marco,text="Introduce la carpeta de destino").pack()
53 tk.Button(marco,text="Selecciona",command=selCarpetaDestino).pack()
54 tk.Button(marco,text="Vamos",command=iniciar).pack()
55 barraprogreso = ttk.Progressbar(variable=progreso)
56 barraprogreso.pack()
57 etiquetaresultado = tk.Label(marco,text="")
58 etiquetaresultado.pack()
59 raiz.mainloop()
60





Ejercicio del curso:

idiomaos.py



/Sistema/Librería OS/idiomaos.py

1 import tkinter as tk
2 from tkinter import filedialog
3 import os
4 import PIL.Image
5 from tkinter import ttk
6 import locale
7 import csv
8
9 carpetaorigen = ""
10 carpetadestino = ""
11
12 archivo = open("lang.csv", "r")
13 csv = csv.DictReader(archivo)
14 print(csv)
15 traducciones = []
16
17
18
19 print(traducciones)
20 idioma = locale.getdefaultlocale()[0]
21 print("El idioma de tu ordenador es:"+idioma)
22 idiomaapp = "es"
23 for linea in csv:
24 if "es" in idioma:
25 traducciones.append(linea['es'])
26
27 else:
28 traducciones.append(linea['en'])
29 print(traducciones)
30
31
32 def selCarpetaOrigen():
33 global carpetaorigen
34 carpetaorigen = filedialog.askdirectory()
35 print(carpetaorigen)
36 def selCarpetaDestino():
37 global carpetadestino
38 carpetadestino = filedialog.askdirectory()
39 print(carpetadestino)
40 def iniciar():
41 listado = os.listdir(carpetaorigen)
42 print(listado)
43 longitud = len(listado)
44 contador = 1
45 for archivo in listado:
46 print(archivo)
47 imagen = PIL.Image.open(carpetaorigen+"/"+archivo)
48 datosexif = imagen._getexif()
49 fecha = datosexif[36868]
50 imagen.close()
51 nuevafecha = fecha.replace(" ","-").replace(":","_")
52 try:
53 os.rename(carpetaorigen+"/"+archivo,carpetadestino+"/"+nuevafecha+".jpg")
54 except:
55 print("el archivo ya existía")
56 dondeestoy = round((contador/longitud)*100)
57 print(dondeestoy)
58 progreso.set(dondeestoy)
59 contador += 1
60 etiquetaresultado.config(text = traducciones[5]+" "+str(longitud))
61
62
63 raiz = tk.Tk()
64 raiz.geometry("300x300")
65 progreso = tk.IntVar()
66 marco = tk.Frame()
67 marco.pack()
68
69 tk.Label(marco,text=traducciones[0]).pack()
70 tk.Button(marco,text=traducciones[1],command=selCarpetaOrigen).pack()
71 tk.Label(marco,text=traducciones[2]).pack()
72 tk.Button(marco,text=traducciones[3],command=selCarpetaDestino).pack()
73 tk.Button(marco,text=traducciones[4],command=iniciar).pack()
74 barraprogreso = ttk.Progressbar(variable=progreso)
75 barraprogreso.pack()
76 etiquetaresultado = tk.Label(marco,text="")
77 etiquetaresultado.pack()
78 raiz.mainloop()
79





Ejercicio del curso:

csv.py



/Sistema/Librería OS/csv.py

1 import csv
2
3 archivo = open("lang.csv", "r")
4 csv = csv.DictReader(archivo)
5 print(csv)
6 traducciones = []
7 for linea in csv:
8 traducciones.append(linea)
9 print(traducciones)





Ejercicio del curso:

iconoytitulo.py



/Sistema/Librería OS/iconoytitulo.py

1 import tkinter as tk
2 from tkinter import filedialog
3 import os
4 import PIL.Image
5 from tkinter import ttk
6 import locale
7 import csv
8
9 carpetaorigen = ""
10 carpetadestino = ""
11
12 archivo = open("lang.csv", "r")
13 csv = csv.DictReader(archivo)
14 print(csv)
15 traducciones = []
16
17
18
19 print(traducciones)
20 idioma = locale.getdefaultlocale()[0]
21 print("El idioma de tu ordenador es:"+idioma)
22 idiomaapp = "es"
23 for linea in csv:
24 if "es" in idioma:
25 traducciones.append(linea['es'])
26
27 else:
28 traducciones.append(linea['en'])
29 print(traducciones)
30
31
32 def selCarpetaOrigen():
33 global carpetaorigen
34 carpetaorigen = filedialog.askdirectory()
35 print(carpetaorigen)
36 def selCarpetaDestino():
37 global carpetadestino
38 carpetadestino = filedialog.askdirectory()
39 print(carpetadestino)
40 def iniciar():
41 listado = os.listdir(carpetaorigen)
42 print(listado)
43 longitud = len(listado)
44 contador = 1
45 for archivo in listado:
46 print(archivo)
47 imagen = PIL.Image.open(carpetaorigen+"/"+archivo)
48 datosexif = imagen._getexif()
49 fecha = datosexif[36868]
50 imagen.close()
51 nuevafecha = fecha.replace(" ","-").replace(":","_")
52 try:
53 os.rename(carpetaorigen+"/"+archivo,carpetadestino+"/"+nuevafecha+".jpg")
54 except:
55 print("el archivo ya existía")
56 dondeestoy = round((contador/longitud)*100)
57 print(dondeestoy)
58 progreso.set(dondeestoy)
59 contador += 1
60 etiquetaresultado.config(text = traducciones[5]+" "+str(longitud))
61
62
63 raiz = tk.Tk()
64 raiz.geometry("300x300")
65 raiz.title("EXIF Renamer")
66 raiz.iconbitmap("logocamara.ico")
67 progreso = tk.IntVar()
68 marco = tk.Frame()
69 marco.pack()
70
71 tk.Label(marco,text=traducciones[0]).pack()
72 tk.Button(marco,text=traducciones[1],command=selCarpetaOrigen).pack()
73 tk.Label(marco,text=traducciones[2]).pack()
74 tk.Button(marco,text=traducciones[3],command=selCarpetaDestino).pack()
75 tk.Button(marco,text=traducciones[4],command=iniciar).pack()
76 barraprogreso = ttk.Progressbar(variable=progreso)
77 barraprogreso.pack()
78 etiquetaresultado = tk.Label(marco,text="")
79 etiquetaresultado.pack()
80 raiz.mainloop()
81





Ejercicio del curso:

fusion.py



/Sistema/Librería OS/fusion.py

1 import csv
2
3 archivo = open("lang.csv", "r")
4 csv = csv.DictReader(archivo)
5 print(csv)
6 traducciones = []
7 for linea in csv:
8 traducciones.append(linea)
9 print(traducciones)





Ejercicio del curso:

imagenenelpanel.py



/Sistema/Librería OS/imagenenelpanel.py

1 import tkinter as tk
2 from tkinter import filedialog
3 import os
4 import PIL.Image
5 from tkinter import ttk
6 import locale
7 import csv
8
9 carpetaorigen = ""
10 carpetadestino = ""
11
12 archivo = open("lang.csv", "r")
13 csv = csv.DictReader(archivo)
14 print(csv)
15 traducciones = []
16
17
18
19 print(traducciones)
20 idioma = locale.getdefaultlocale()[0]
21 print("El idioma de tu ordenador es:"+idioma)
22 idiomaapp = "es"
23 for linea in csv:
24 if "es" in idioma:
25 traducciones.append(linea['es'])
26
27 else:
28 traducciones.append(linea['en'])
29 print(traducciones)
30
31
32 def selCarpetaOrigen():
33 global carpetaorigen
34 carpetaorigen = filedialog.askdirectory()
35 print(carpetaorigen)
36 def selCarpetaDestino():
37 global carpetadestino
38 carpetadestino = filedialog.askdirectory()
39 print(carpetadestino)
40 def iniciar():
41 listado = os.listdir(carpetaorigen)
42 print(listado)
43 longitud = len(listado)
44 contador = 1
45 for archivo in listado:
46 print(archivo)
47 imagen = PIL.Image.open(carpetaorigen+"/"+archivo)
48 datosexif = imagen._getexif()
49 fecha = datosexif[36868]
50 imagen.close()
51 nuevafecha = fecha.replace(" ","-").replace(":","_")
52 try:
53 os.rename(carpetaorigen+"/"+archivo,carpetadestino+"/"+nuevafecha+".jpg")
54 except:
55 print("el archivo ya existía")
56 dondeestoy = round((contador/longitud)*100)
57 print(dondeestoy)
58 progreso.set(dondeestoy)
59 contador += 1
60 etiquetaresultado.config(text = traducciones[5]+" "+str(longitud))
61
62
63 raiz = tk.Tk()
64 raiz.geometry("300x300")
65 raiz.title("EXIF Renamer")
66 raiz.iconbitmap("logocamara.ico")
67 progreso = tk.IntVar()
68 marco = tk.Frame()
69 marco.pack()
70 imagen = tk.PhotoImage(file="logocamara.png")
71 tk.Label(marco, image=imagen).pack()
72 tk.Label(marco,text=traducciones[0]).pack()
73 tk.Button(marco,text=traducciones[1],command=selCarpetaOrigen).pack()
74 tk.Label(marco,text=traducciones[2]).pack()
75 tk.Button(marco,text=traducciones[3],command=selCarpetaDestino).pack()
76 tk.Button(marco,text=traducciones[4],command=iniciar).pack()
77 barraprogreso = ttk.Progressbar(marco,variable=progreso)
78 barraprogreso.pack()
79 etiquetaresultado = tk.Label(marco,text="")
80 etiquetaresultado.pack()
81 raiz.mainloop()
82





Ejercicio del curso:

imagenboton.py



/Sistema/Librería OS/imagenboton.py

1 import tkinter as tk
2 from tkinter import filedialog
3 import os
4 import PIL.Image
5 from tkinter import ttk
6 import locale
7 import csv
8
9 carpetaorigen = ""
10 carpetadestino = ""
11
12 archivo = open("lang.csv", "r")
13 csv = csv.DictReader(archivo)
14 print(csv)
15 traducciones = []
16
17
18
19 print(traducciones)
20 idioma = locale.getdefaultlocale()[0]
21 print("El idioma de tu ordenador es:"+idioma)
22 idiomaapp = "es"
23 for linea in csv:
24 if "es" in idioma:
25 traducciones.append(linea['es'])
26
27 else:
28 traducciones.append(linea['en'])
29 print(traducciones)
30
31
32 def selCarpetaOrigen():
33 global carpetaorigen
34 carpetaorigen = filedialog.askdirectory()
35 print(carpetaorigen)
36 def selCarpetaDestino():
37 global carpetadestino
38 carpetadestino = filedialog.askdirectory()
39 print(carpetadestino)
40 def iniciar():
41 listado = os.listdir(carpetaorigen)
42 print(listado)
43 longitud = len(listado)
44 contador = 1
45 for archivo in listado:
46 print(archivo)
47 imagen = PIL.Image.open(carpetaorigen+"/"+archivo)
48 datosexif = imagen._getexif()
49 fecha = datosexif[36868]
50 imagen.close()
51 nuevafecha = fecha.replace(" ","-").replace(":","_")
52 try:
53 os.rename(carpetaorigen+"/"+archivo,carpetadestino+"/"+nuevafecha+".jpg")
54 except:
55 print("el archivo ya existía")
56 dondeestoy = round((contador/longitud)*100)
57 print(dondeestoy)
58 progreso.set(dondeestoy)
59 contador += 1
60 etiquetaresultado.config(text = traducciones[5]+" "+str(longitud))
61
62
63 raiz = tk.Tk()
64 raiz.geometry("300x300")
65 raiz.title("EXIF Renamer")
66 raiz.iconbitmap("logocamara.ico")
67 progreso = tk.IntVar()
68 marco = tk.Frame()
69 marco.pack()
70 imagen = tk.PhotoImage(file="logocamara.png")
71 fondoboton= tk.PhotoImage(file='boton.png')
72 fondoboton2= tk.PhotoImage(file='boton2.png')
73 tk.Label(marco, image=imagen).pack()
74 tk.Label(marco,text=traducciones[0]).pack()
75 tk.Button(marco,text=traducciones[1],image=fondoboton,borderwidth=0,command=selCarpetaOrigen).pack()
76 tk.Label(marco,text=traducciones[2]).pack()
77 tk.Button(marco,text=traducciones[3],image=fondoboton,borderwidth=0,command=selCarpetaDestino).pack()
78 tk.Button(marco,text=traducciones[4],image=fondoboton2,borderwidth=0,command=iniciar).pack()
79 barraprogreso = ttk.Progressbar(marco,variable=progreso)
80 barraprogreso.pack()
81 etiquetaresultado = tk.Label(marco,text="")
82 etiquetaresultado.pack()
83 raiz.mainloop()
84





Ejercicio del curso:

pads.py



/Sistema/Librería OS/pads.py

1 import tkinter as tk
2 from tkinter import filedialog
3 import os
4 import PIL.Image
5 from tkinter import ttk
6 import locale
7 import csv
8
9 carpetaorigen = ""
10 carpetadestino = ""
11
12 archivo = open("lang.csv", "r")
13 csv = csv.DictReader(archivo)
14 print(csv)
15 traducciones = []
16
17
18
19 print(traducciones)
20 idioma = locale.getdefaultlocale()[0]
21 print("El idioma de tu ordenador es:"+idioma)
22 idiomaapp = "es"
23 for linea in csv:
24 if "es" in idioma:
25 traducciones.append(linea['es'])
26
27 else:
28 traducciones.append(linea['en'])
29 print(traducciones)
30
31
32 def selCarpetaOrigen():
33 global carpetaorigen
34 carpetaorigen = filedialog.askdirectory()
35 print(carpetaorigen)
36 def selCarpetaDestino():
37 global carpetadestino
38 carpetadestino = filedialog.askdirectory()
39 print(carpetadestino)
40 def iniciar():
41 listado = os.listdir(carpetaorigen)
42 print(listado)
43 longitud = len(listado)
44 contador = 1
45 for archivo in listado:
46 print(archivo)
47 imagen = PIL.Image.open(carpetaorigen+"/"+archivo)
48 datosexif = imagen._getexif()
49 fecha = datosexif[36868]
50 imagen.close()
51 nuevafecha = fecha.replace(" ","-").replace(":","_")
52 try:
53 os.rename(carpetaorigen+"/"+archivo,carpetadestino+"/"+nuevafecha+".jpg")
54 except:
55 print("el archivo ya existía")
56 dondeestoy = round((contador/longitud)*100)
57 print(dondeestoy)
58 progreso.set(dondeestoy)
59 contador += 1
60 etiquetaresultado.config(text = traducciones[5]+" "+str(longitud))
61
62
63 raiz = tk.Tk()
64 raiz.geometry("300x500")
65 raiz.title("EXIF Renamer")
66 raiz.iconbitmap("logocamara.ico")
67 progreso = tk.IntVar()
68 marco = tk.Frame()
69 marco.pack()
70 imagen = tk.PhotoImage(file="logocamara.png")
71 fondoboton= tk.PhotoImage(file='boton.png')
72 fondoboton2= tk.PhotoImage(file='boton2.png')
73 tk.Label(marco, image=imagen).pack()
74 tk.Label(marco,text=traducciones[0]).pack(pady=10)
75 tk.Button(marco,text=traducciones[1],image=fondoboton,borderwidth=0,command=selCarpetaOrigen).pack(pady=10)
76 tk.Label(marco,text=traducciones[2]).pack(pady=10)
77 tk.Button(marco,text=traducciones[3],image=fondoboton,borderwidth=0,command=selCarpetaDestino).pack(pady=10)
78 tk.Button(marco,text=traducciones[4],image=fondoboton2,borderwidth=0,command=iniciar).pack(pady=10)
79 barraprogreso = ttk.Progressbar(marco,variable=progreso)
80 barraprogreso.pack(pady=10)
81 etiquetaresultado = tk.Label(marco,text="")
82 etiquetaresultado.pack()
83 raiz.mainloop()
84





Ejercicio del curso:

creditos.py



/Sistema/Librería OS/creditos.py

1 import tkinter as tk
2 from tkinter import filedialog
3 import os
4 import PIL.Image
5 from tkinter import ttk
6 import locale
7 import csv
8
9 carpetaorigen = ""
10 carpetadestino = ""
11
12 archivo = open("lang.csv", "r")
13 csv = csv.DictReader(archivo)
14 print(csv)
15 traducciones = []
16
17
18
19 print(traducciones)
20 idioma = locale.getdefaultlocale()[0]
21 print("El idioma de tu ordenador es:"+idioma)
22 idiomaapp = "es"
23 for linea in csv:
24 if "es" in idioma:
25 traducciones.append(linea['es'])
26
27 else:
28 traducciones.append(linea['en'])
29 print(traducciones)
30
31
32 def selCarpetaOrigen():
33 global carpetaorigen
34 carpetaorigen = filedialog.askdirectory()
35 print(carpetaorigen)
36 def selCarpetaDestino():
37 global carpetadestino
38 carpetadestino = filedialog.askdirectory()
39 print(carpetadestino)
40 def iniciar():
41 listado = os.listdir(carpetaorigen)
42 print(listado)
43 longitud = len(listado)
44 contador = 1
45 for archivo in listado:
46 print(archivo)
47 imagen = PIL.Image.open(carpetaorigen+"/"+archivo)
48 datosexif = imagen._getexif()
49 fecha = datosexif[36868]
50 imagen.close()
51 nuevafecha = fecha.replace(" ","-").replace(":","_")
52 try:
53 os.rename(carpetaorigen+"/"+archivo,carpetadestino+"/"+nuevafecha+".jpg")
54 except:
55 print("el archivo ya existía")
56 dondeestoy = round((contador/longitud)*100)
57 print(dondeestoy)
58 progreso.set(dondeestoy)
59 contador += 1
60 etiquetaresultado.config(text = traducciones[5]+" "+str(longitud))
61
62
63 raiz = tk.Tk()
64 raiz.geometry("300x500")
65 raiz.title("EXIF Renamer")
66 raiz.iconbitmap("logocamara.ico")
67 progreso = tk.IntVar()
68 marco = tk.Frame()
69 marco.pack()
70 imagen = tk.PhotoImage(file="logocamara.png")
71 fondoboton= tk.PhotoImage(file='boton.png')
72 fondoboton2= tk.PhotoImage(file='boton2.png')
73 tk.Label(marco, image=imagen).pack()
74 tk.Label(marco, text="EXIF Renamer (c) 2023 Jose Vicente Carratalá").pack()
75 tk.Label(marco,text=traducciones[0]).pack(pady=10)
76 tk.Button(marco,text=traducciones[1],image=fondoboton,borderwidth=0,command=selCarpetaOrigen).pack(pady=10)
77 tk.Label(marco,text=traducciones[2]).pack(pady=10)
78 tk.Button(marco,text=traducciones[3],image=fondoboton,borderwidth=0,command=selCarpetaDestino).pack(pady=10)
79 tk.Button(marco,text=traducciones[4],image=fondoboton2,borderwidth=0,command=iniciar).pack(pady=10)
80 barraprogreso = ttk.Progressbar(marco,variable=progreso)
81 barraprogreso.pack(pady=10)
82 etiquetaresultado = tk.Label(marco,text="")
83 etiquetaresultado.pack()
84 raiz.mainloop()
85





Ejercicio del curso:

creditos.py



/Sistema/Librería OS/creditos.py

1 import tkinter as tk
2 from tkinter import filedialog
3 import os
4 import PIL.Image
5 from tkinter import ttk
6 import locale
7 import csv
8
9 carpetaorigen = ""
10 carpetadestino = ""
11
12 archivo = open("lang.csv", "r")
13 csv = csv.DictReader(archivo)
14 print(csv)
15 traducciones = []
16
17
18
19 print(traducciones)
20 idioma = locale.getdefaultlocale()[0]
21 print("El idioma de tu ordenador es:"+idioma)
22 idiomaapp = "es"
23 for linea in csv:
24 if "es" in idioma:
25 traducciones.append(linea['es'])
26
27 else:
28 traducciones.append(linea['en'])
29 print(traducciones)
30
31
32 def selCarpetaOrigen():
33 global carpetaorigen
34 carpetaorigen = filedialog.askdirectory()
35 print(carpetaorigen)
36 def selCarpetaDestino():
37 global carpetadestino
38 carpetadestino = filedialog.askdirectory()
39 print(carpetadestino)
40 def iniciar():
41 listado = os.listdir(carpetaorigen)
42 print(listado)
43 longitud = len(listado)
44 contador = 1
45 for archivo in listado:
46 print(archivo)
47 imagen = PIL.Image.open(carpetaorigen+"/"+archivo)
48 datosexif = imagen._getexif()
49 fecha = datosexif[36868]
50 imagen.close()
51 nuevafecha = fecha.replace(" ","-").replace(":","_")
52 try:
53 os.rename(carpetaorigen+"/"+archivo,carpetadestino+"/"+nuevafecha+".jpg")
54 except:
55 print("el archivo ya existía")
56 dondeestoy = round((contador/longitud)*100)
57 print(dondeestoy)
58 progreso.set(dondeestoy)
59 contador += 1
60 etiquetaresultado.config(text = traducciones[5]+" "+str(longitud))
61
62
63 raiz = tk.Tk()
64 raiz.geometry("300x500")
65 raiz.title("EXIF Renamer")
66 raiz.iconbitmap("logocamara.ico")
67 progreso = tk.IntVar()
68 marco = tk.Frame()
69 marco.pack()
70 imagen = tk.PhotoImage(file="logocamara.png")
71 fondoboton= tk.PhotoImage(file='boton.png')
72 fondoboton2= tk.PhotoImage(file='boton2.png')
73 tk.Label(marco, image=imagen).pack()
74 tk.Label(marco, text="EXIF Renamer (c) 2023 Jose Vicente Carratalá").pack()
75 tk.Label(marco,text=traducciones[0]).pack(pady=10)
76 tk.Button(marco,text=traducciones[1],image=fondoboton,borderwidth=0,command=selCarpetaOrigen).pack(pady=10)
77 tk.Label(marco,text=traducciones[2]).pack(pady=10)
78 tk.Button(marco,text=traducciones[3],image=fondoboton,borderwidth=0,command=selCarpetaDestino).pack(pady=10)
79 tk.Button(marco,text=traducciones[4],image=fondoboton2,borderwidth=0,command=iniciar).pack(pady=10)
80 barraprogreso = ttk.Progressbar(marco,variable=progreso)
81 barraprogreso.pack(pady=10)
82 etiquetaresultado = tk.Label(marco,text="")
83 etiquetaresultado.pack()
84 raiz.mainloop()
85





Ejercicio del curso:

menu.py



/Sistema/Librería OS/menu.py

1 import tkinter as tk
2 from tkinter import filedialog
3 import os
4 import PIL.Image
5 from tkinter import ttk
6 import locale
7 import csv
8
9 carpetaorigen = ""
10 carpetadestino = ""
11
12 archivo = open("lang.csv", "r")
13 csv = csv.DictReader(archivo)
14 print(csv)
15 traducciones = []
16
17
18
19 print(traducciones)
20 idioma = locale.getdefaultlocale()[0]
21 print("El idioma de tu ordenador es:"+idioma)
22 idiomaapp = "es"
23 for linea in csv:
24 if "es" in idioma:
25 traducciones.append(linea['es'])
26
27 else:
28 traducciones.append(linea['en'])
29 print(traducciones)
30
31
32 def selCarpetaOrigen():
33 global carpetaorigen
34 carpetaorigen = filedialog.askdirectory()
35 print(carpetaorigen)
36 def selCarpetaDestino():
37 global carpetadestino
38 carpetadestino = filedialog.askdirectory()
39 print(carpetadestino)
40 def iniciar():
41 listado = os.listdir(carpetaorigen)
42 print(listado)
43 longitud = len(listado)
44 contador = 1
45 for archivo in listado:
46 print(archivo)
47 imagen = PIL.Image.open(carpetaorigen+"/"+archivo)
48 datosexif = imagen._getexif()
49 fecha = datosexif[36868]
50 imagen.close()
51 nuevafecha = fecha.replace(" ","-").replace(":","_")
52 try:
53 os.rename(carpetaorigen+"/"+archivo,carpetadestino+"/"+nuevafecha+".jpg")
54 except:
55 print("el archivo ya existía")
56 dondeestoy = round((contador/longitud)*100)
57 print(dondeestoy)
58 progreso.set(dondeestoy)
59 contador += 1
60 etiquetaresultado.config(text = traducciones[5]+" "+str(longitud))
61 def ayuda():
62 print("vamos a por la ayuda")
63
64 raiz = tk.Tk()
65 raiz.geometry("300x500")
66 raiz.title("EXIF Renamer")
67 raiz.iconbitmap("logocamara.ico")
68 progreso = tk.IntVar()
69 marco = tk.Frame()
70 marco.pack()
71 imagen = tk.PhotoImage(file="logocamara.png")
72 fondoboton= tk.PhotoImage(file='boton.png')
73 fondoboton2= tk.PhotoImage(file='boton2.png')
74 tk.Label(marco, image=imagen).pack()
75 tk.Label(marco, text="EXIF Renamer (c) 2023 Jose Vicente Carratalá").pack()
76 tk.Label(marco,text=traducciones[0]).pack(pady=10)
77 tk.Button(marco,text=traducciones[1],image=fondoboton,borderwidth=0,command=selCarpetaOrigen).pack(pady=10)
78 tk.Label(marco,text=traducciones[2]).pack(pady=10)
79 tk.Button(marco,text=traducciones[3],image=fondoboton,borderwidth=0,command=selCarpetaDestino).pack(pady=10)
80 tk.Button(marco,text=traducciones[4],image=fondoboton2,borderwidth=0,command=iniciar).pack(pady=10)
81 barraprogreso = ttk.Progressbar(marco,variable=progreso)
82 barraprogreso.pack(pady=10)
83 etiquetaresultado = tk.Label(marco,text="")
84 etiquetaresultado.pack()
85
86
87 mimenu = tk.Menu(raiz)
88 raiz.config(menu=mimenu)
89 mimenu.add_cascade(label="Ayuda",command=ayuda)
90
91 raiz.mainloop()
92





Ejercicio del curso:

ventanaemergente.py



/Sistema/Librería OS/ventanaemergente.py

1 import tkinter as tk
2 from tkinter import filedialog
3 import os
4 import PIL.Image
5 from tkinter import ttk
6 import locale
7 import csv
8
9 carpetaorigen = ""
10 carpetadestino = ""
11
12 archivo = open("lang.csv", "r")
13 csv = csv.DictReader(archivo)
14 print(csv)
15 traducciones = []
16
17
18
19 print(traducciones)
20 idioma = locale.getdefaultlocale()[0]
21 print("El idioma de tu ordenador es:"+idioma)
22 idiomaapp = "es"
23 for linea in csv:
24 if "es" in idioma:
25 traducciones.append(linea['es'])
26
27 else:
28 traducciones.append(linea['en'])
29 print(traducciones)
30
31
32 def selCarpetaOrigen():
33 global carpetaorigen
34 carpetaorigen = filedialog.askdirectory()
35 print(carpetaorigen)
36 def selCarpetaDestino():
37 global carpetadestino
38 carpetadestino = filedialog.askdirectory()
39 print(carpetadestino)
40 def iniciar():
41 listado = os.listdir(carpetaorigen)
42 print(listado)
43 longitud = len(listado)
44 contador = 1
45 for archivo in listado:
46 print(archivo)
47 imagen = PIL.Image.open(carpetaorigen+"/"+archivo)
48 datosexif = imagen._getexif()
49 fecha = datosexif[36868]
50 imagen.close()
51 nuevafecha = fecha.replace(" ","-").replace(":","_")
52 try:
53 os.rename(carpetaorigen+"/"+archivo,carpetadestino+"/"+nuevafecha+".jpg")
54 except:
55 print("el archivo ya existía")
56 dondeestoy = round((contador/longitud)*100)
57 print(dondeestoy)
58 progreso.set(dondeestoy)
59 contador += 1
60 etiquetaresultado.config(text = traducciones[5]+" "+str(longitud))
61 def ayuda():
62 print("vamos a por la ayuda")
63 tk.messagebox.showinfo(
64 title="Instrucciones",
65 message='''
66 Renombrador de archivos JPG con información EXIF
67 1.-Selecciona la carpeta de origen
68 2.-Selecciona la carpeta de destino
69 3.-Pulsa el botón verde para iniciar
70 Y el sistema renombrará tus fotografías usando la información EXIF existente
71 '''
72 )
73
74 raiz = tk.Tk()
75 raiz.geometry("300x500")
76 raiz.title("EXIF Renamer")
77 raiz.iconbitmap("logocamara.ico")
78 progreso = tk.IntVar()
79 marco = tk.Frame()
80 marco.pack()
81 imagen = tk.PhotoImage(file="logocamara.png")
82 fondoboton= tk.PhotoImage(file='boton.png')
83 fondoboton2= tk.PhotoImage(file='boton2.png')
84 tk.Label(marco, image=imagen).pack()
85 tk.Label(marco, text="EXIF Renamer (c) 2023 Jose Vicente Carratalá").pack()
86 tk.Label(marco,text=traducciones[0]).pack(pady=10)
87 tk.Button(marco,text=traducciones[1],image=fondoboton,borderwidth=0,command=selCarpetaOrigen).pack(pady=10)
88 tk.Label(marco,text=traducciones[2]).pack(pady=10)
89 tk.Button(marco,text=traducciones[3],image=fondoboton,borderwidth=0,command=selCarpetaDestino).pack(pady=10)
90 tk.Button(marco,text=traducciones[4],image=fondoboton2,borderwidth=0,command=iniciar).pack(pady=10)
91 barraprogreso = ttk.Progressbar(marco,variable=progreso)
92 barraprogreso.pack(pady=10)
93 etiquetaresultado = tk.Label(marco,text="")
94 etiquetaresultado.pack()
95
96
97 mimenu = tk.Menu(raiz)
98 raiz.config(menu=mimenu)
99 mimenu.add_cascade(label="Ayuda",command=ayuda)
100
101 raiz.mainloop()
102





Ejercicio del curso:

Retoques.py



/Sistema/Librería OS/Retoques.py

1 import tkinter as tk
2 from tkinter import filedialog
3 import os
4 import PIL.Image
5 from tkinter import ttk
6 import locale
7 import csv
8 import time
9
10 carpetaorigen = ""
11 carpetadestino = ""
12
13 archivo = open("lang.csv", "r")
14 csv = csv.DictReader(archivo)
15 print(csv)
16 traducciones = []
17
18 def current_milli_time():
19 return round(time.time() * 1000)
20
21 print(traducciones)
22 idioma = locale.getdefaultlocale()[0]
23 print("El idioma de tu ordenador es:"+idioma)
24 idiomaapp = "es"
25 for linea in csv:
26 if "es" in idioma:
27 traducciones.append(linea['es'])
28
29 else:
30 traducciones.append(linea['en'])
31 print(traducciones)
32
33
34 def selCarpetaOrigen():
35 global carpetaorigen
36 carpetaorigen = filedialog.askdirectory()
37 print(carpetaorigen)
38 def selCarpetaDestino():
39 global carpetadestino
40 carpetadestino = filedialog.askdirectory()
41 print(carpetadestino)
42 def iniciar():
43 listado = os.listdir(carpetaorigen)
44 print(listado)
45 longitud = len(listado)
46 contador = 1
47 cuentaarchivo = 1
48 for archivo in listado:
49 try:
50 print(archivo)
51 imagen = PIL.Image.open(carpetaorigen+"/"+archivo)
52 datosexif = imagen._getexif()
53 fecha = datosexif[36868]
54 epoch = datosexif[306]
55 imagen.close()
56 nuevafecha = fecha.replace(" ","-").replace(":","_")
57 try:
58 os.rename(carpetaorigen+"/"+archivo,carpetadestino+"/"+nuevafecha+"-"+str(current_milli_time())+".jpg")
59 except Exception as error:
60 print(error)
61 dondeestoy = round((contador/longitud)*100)
62 print(dondeestoy)
63 progreso.set(dondeestoy)
64 contador += 1
65 etiquetaresultado.config(text = traducciones[5]+" "+str(longitud))
66 except:
67 print("error")
68 def ayuda():
69 print("vamos a por la ayuda")
70 tk.messagebox.showinfo(
71 title="Instrucciones",
72 message='''
73 Renombrador de archivos JPG con información EXIF
74 1.-Selecciona la carpeta de origen
75 2.-Selecciona la carpeta de destino
76 3.-Pulsa el botón verde para iniciar
77 Y el sistema renombrará tus fotografías usando la información EXIF existente
78 '''
79 )
80
81 raiz = tk.Tk()
82 raiz.geometry("300x500")
83 raiz.title("EXIF Renamer")
84 raiz.iconbitmap("logocamara.ico")
85 progreso = tk.IntVar()
86 marco = tk.Frame()
87 marco.pack()
88 imagen = tk.PhotoImage(file="logocamara.png")
89 fondoboton= tk.PhotoImage(file='boton.png')
90 fondoboton2= tk.PhotoImage(file='boton2.png')
91 tk.Label(marco, image=imagen).pack()
92 tk.Label(marco, text="EXIF Renamer (c) 2023 Jose Vicente Carratalá").pack()
93 tk.Label(marco,text=traducciones[0]).pack(pady=10)
94 tk.Button(marco,text=traducciones[1],image=fondoboton,borderwidth=0,command=selCarpetaOrigen).pack(pady=10)
95 tk.Label(marco,text=traducciones[2]).pack(pady=10)
96 tk.Button(marco,text=traducciones[3],image=fondoboton,borderwidth=0,command=selCarpetaDestino).pack(pady=10)
97 tk.Button(marco,text=traducciones[4],image=fondoboton2,borderwidth=0,command=iniciar).pack(pady=10)
98 barraprogreso = ttk.Progressbar(marco,variable=progreso)
99 barraprogreso.pack(pady=10)
100 etiquetaresultado = tk.Label(marco,text="")
101 etiquetaresultado.pack()
102
103
104 mimenu = tk.Menu(raiz)
105 raiz.config(menu=mimenu)
106 mimenu.add_cascade(label="Ayuda",command=ayuda)
107
108 raiz.mainloop()
109





Ejercicio del curso:

recursivo.py



/Sistema/Librería OS/ recursivo.py

1 import tkinter as tk
2 from tkinter import filedialog
3 import os
4 import PIL.Image
5 from tkinter import ttk
6 import locale
7 import csv
8 import time
9
10 carpetaorigen = ""
11 carpetadestino = ""
12
13 archivo = open("lang.csv", "r")
14 csv = csv.DictReader(archivo)
15 print(csv)
16 traducciones = []
17
18 def current_milli_time():
19 return round(time.time() * 1000)
20
21 print(traducciones)
22 idioma = locale.getdefaultlocale()[0]
23 print("El idioma de tu ordenador es:"+idioma)
24 idiomaapp = "es"
25 for linea in csv:
26 if "es" in idioma:
27 traducciones.append(linea['es'])
28 else:
29 traducciones.append(linea['en'])
30 print(traducciones)
31
32 def selCarpetaOrigen():
33 global carpetaorigen
34 carpetaorigen = filedialog.askdirectory()
35 print(carpetaorigen)
36
37 def selCarpetaDestino():
38 global carpetadestino
39 carpetadestino = filedialog.askdirectory()
40 print(carpetadestino)
41
42 def iniciar():
43 def rename_files_in_folder(folder_path):
44 listado = os.listdir(folder_path)
45 print(listado)
46 for archivo in listado:
47 try:
48 print(archivo)
49 file_path = os.path.join(folder_path, archivo)
50 if os.path.isdir(file_path):
51 # If it's a directory, recursively rename files in it
52 rename_files_in_folder(file_path)
53 else:
54 # If it's a file, rename it
55 imagen = PIL.Image.open(file_path)
56 datosexif = imagen._getexif()
57 fecha = datosexif[36868]
58 epoch = datosexif[306]
59 imagen.close()
60 nuevafecha = fecha.replace(" ","-").replace(":","_")
61 try:
62 os.rename(file_path, os.path.join(carpetadestino, nuevafecha+"-"+str(current_milli_time())+".jpg"))
63 except Exception as error:
64 print(error)
65 except:
66 print("error")
67
68 etiquetaresultado.config(text=traducciones[5] + " " + str(len(listado)))
69
70 listado = os.listdir(carpetaorigen)
71 print(listado)
72 etiquetaresultado.config(text=traducciones[5] + " " + str(len(listado)))
73 rename_files_in_folder(carpetaorigen)
74
75 def ayuda():
76 print("vamos a por la ayuda")
77 tk.messagebox.showinfo(
78 title="Instrucciones",
79 message='''
80 Renombrador de archivos JPG con información EXIF
81 1.-Selecciona la carpeta de origen
82 2.-Selecciona la carpeta de destino
83 3.-Pulsa el botón verde para iniciar
84 Y el sistema renombrará tus fotografías usando la información EXIF existente
85 '''
86 )
87
88 raiz = tk.Tk()
89 raiz.geometry("300x500")
90 raiz.title("EXIF Renamer")
91 raiz.iconbitmap("logocamara.ico")
92 progreso = tk.IntVar()
93 marco = tk.Frame()
94 marco.pack()
95 imagen = tk.PhotoImage(file="logocamara.png")
96 fondoboton= tk.PhotoImage(file='boton.png')
97 fondoboton2= tk.PhotoImage(file='boton2.png')
98 tk.Label(marco, image=imagen).pack()
99 tk.Label(marco, text="EXIF Renamer (c) 2023 Jose Vicente Carratalá").pack()
100 tk.Label(marco,text=traducciones[0]).pack(pady=10)
101 tk.Button(marco,text=traducciones[1],image=fondoboton,borderwidth=0,command=selCarpetaOrigen).pack(pady=10)
102 tk.Label(marco,text=traducciones[2]).pack(pady=10)
103 tk.Button(marco,text=traducciones[3],image=fondoboton,borderwidth=0,command=selCarpetaDestino).pack(pady=10)
104 tk.Button(marco,text=traducciones[4],image=fondoboton2,borderwidth=0,command=iniciar).pack(pady=10)
105 barraprogreso = ttk.Progressbar(marco,variable=progreso)
106 barraprogreso.pack(pady=10)
107 etiquetaresultado = tk.Label(marco,text="")
108 etiquetaresultado.pack()
109
110 mimenu = tk.Menu(raiz)
111 raiz.config(menu=mimenu)
112 mimenu.add_cascade(label="Ayuda",command=ayuda)
113
114 raiz.mainloop()





Ejercicio del curso:

recursivo guardando cada archivo en su carpeta.py



/Sistema/Librería OS/ recursivo guardando cada archivo en su carpeta.py

1 import tkinter as tk
2 from tkinter import filedialog
3 import os
4 import PIL.Image
5 from tkinter import ttk
6 import locale
7 import csv
8 import time
9
10 carpetaorigen = ""
11 carpetadestino = ""
12
13 archivo = open("lang.csv", "r")
14 csv = csv.DictReader(archivo)
15 print(csv)
16 traducciones = []
17
18 def current_milli_time():
19 return round(time.time() * 1000)
20
21 print(traducciones)
22 idioma = locale.getdefaultlocale()[0]
23 print("El idioma de tu ordenador es:"+idioma)
24 idiomaapp = "es"
25 for linea in csv:
26 if "es" in idioma:
27 traducciones.append(linea['es'])
28 else:
29 traducciones.append(linea['en'])
30 print(traducciones)
31
32 def selCarpetaOrigen():
33 global carpetaorigen
34 carpetaorigen = filedialog.askdirectory()
35 print(carpetaorigen)
36
37 def selCarpetaDestino():
38 global carpetadestino
39 carpetadestino = filedialog.askdirectory()
40 print(carpetadestino)
41
42 def rename_files_in_folder(source_folder, destination_folder):
43 listado = os.listdir(source_folder)
44 print(listado)
45 for archivo in listado:
46 try:
47 print(archivo)
48 source_path = os.path.join(source_folder, archivo)
49 if os.path.isdir(source_path):
50 # If it's a directory, recursively rename files in it
51 subfolder_destination = os.path.join(destination_folder, archivo)
52 os.makedirs(subfolder_destination, exist_ok=True)
53 rename_files_in_folder(source_path, subfolder_destination)
54 else:
55 # If it's a file, rename it and save in its original folder
56 imagen = PIL.Image.open(source_path)
57 datosexif = imagen._getexif()
58 fecha = datosexif[36868]
59 epoch = datosexif[306]
60 imagen.close()
61 nuevafecha = fecha.replace(" ","-").replace(":","_")
62 try:
63 os.rename(source_path, os.path.join(destination_folder, nuevafecha+"-"+str(current_milli_time())+".jpg"))
64 except Exception as error:
65 print(error)
66 except:
67 print("error")
68
69 def iniciar():
70 rename_files_in_folder(carpetaorigen, carpetaorigen)
71
72 def ayuda():
73 print("vamos a por la ayuda")
74 tk.messagebox.showinfo(
75 title="Instrucciones",
76 message='''
77 Renombrador de archivos JPG con información EXIF
78 1.-Selecciona la carpeta de origen
79 2.-Selecciona la carpeta de destino
80 3.-Pulsa el botón verde para iniciar
81 Y el sistema renombrará tus fotografías usando la información EXIF existente
82 '''
83 )
84
85 raiz = tk.Tk()
86 raiz.geometry("300x500")
87 raiz.title("EXIF Renamer")
88 raiz.iconbitmap("logocamara.ico")
89 progreso = tk.IntVar()
90 marco = tk.Frame()
91 marco.pack()
92 imagen = tk.PhotoImage(file="logocamara.png")
93 fondoboton= tk.PhotoImage(file='boton.png')
94 fondoboton2= tk.PhotoImage(file='boton2.png')
95 tk.Label(marco, image=imagen).pack()
96 tk.Label(marco, text="EXIF Renamer (c) 2023 Jose Vicente Carratalá").pack()
97 tk.Label(marco,text=traducciones[0]).pack(pady=10)
98 tk.Button(marco,text=traducciones[1],image=fondoboton,borderwidth=0,command=selCarpetaOrigen).pack(pady=10)
99 tk.Label(marco,text=traducciones[2]).pack(pady=10)
100 tk.Button(marco,text=traducciones[3],image=fondoboton,borderwidth=0,command=selCarpetaDestino).pack(pady=10)
101 tk.Button(marco,text=traducciones[4],image=fondoboton2,borderwidth=0,command=iniciar).pack(pady=10)
102 barraprogreso = ttk.Progressbar(marco,variable=progreso)
103 barraprogreso.pack(pady=10)
104 etiquetaresultado = tk.Label(marco,text="")
105 etiquetaresultado.pack()
106
107 mimenu = tk.Menu(raiz)
108 raiz.config(menu=mimenu)
109 mimenu.add_cascade(label="Ayuda",command=ayuda)
110
111 raiz.mainloop()





Ejercicio del curso:



Ejercicio del curso:



Ejercicio del curso:



/Sistema/Librería OS/lang.csv

1 tag,es,en
2 labelorigen,Introduce la carpeta de origen,Select source folder
3 botonorigen,Selecciona,Select
4 labeldestino,Selecciona la carpeta de destino,Select destination folder
5 botondestino,Selecciona,Select
6 botonvamos,Vamos,Let's go
7 mensajefinal,Número de archivos procesados,Number of processed files





Ejercicio del curso:



Ejercicio del curso:







8.2.-PIL

Ejercicio del curso:

PIL.py



/Sistema/PIL/PIL.py

1 import PIL





Ejercicio del curso:

cargar.py



/Sistema/PIL/cargar.py

1 import PIL.Image
2
3 imagen = PIL.Image.open("josevicente.jpg")
4 print(imagen.size)
5 anchura =imagen.size[0]
6 altura =imagen.size[1]
7 print("anchura: "+str(anchura)+",altura: "+str(altura))





Ejercicio del curso:

pixel.py



/Sistema/PIL/pixel.py

1 import PIL.Image
2
3 imagen = PIL.Image.open("josevicente.jpg")
4
5 print(imagen.size)
6 anchura =imagen.size[0]
7 altura =imagen.size[1]
8 print("anchura: "+str(anchura)+",altura: "+str(altura))
9 pixeles = imagen.load()
10 print(pixeles[0,0])





Ejercicio del curso:

repasarpixels.py



/Sistema/PIL/repasarpixels.py

1 import PIL.Image
2
3 imagen = PIL.Image.open("josevicente.jpg")
4
5 print(imagen.size)
6 anchura =imagen.size[0]
7 altura =imagen.size[1]
8 print("anchura: "+str(anchura)+",altura: "+str(altura))
9 pixeles = imagen.load()
10 print(pixeles[0,0])
11 for x in range(0,anchura):
12 for y in range(0,altura):
13 print(pixeles[x,y])





Ejercicio del curso:

escribir.py



/Sistema/PIL/escribir.py

1 import PIL.Image
2
3 imagen = PIL.Image.open("josevicente.jpg")
4
5 print(imagen.size)
6 anchura =imagen.size[0]
7 altura =imagen.size[1]
8 print("anchura: "+str(anchura)+",altura: "+str(altura))
9 pixeles = imagen.load()
10 print(pixeles[0,0])
11 for x in range(0,anchura):
12 for y in range(0,altura):
13 #print(pixeles[x,y])
14 pixeles[x,y] = (50,50,50)
15
16 imagen.save("josevicente2.jpg")





Ejercicio del curso:

reuido.py



/Sistema/PIL/reuido.py

1 import PIL.Image
2 import random
3
4 imagen = PIL.Image.open("josevicente.jpg")
5
6 print(imagen.size)
7 anchura =imagen.size[0]
8 altura =imagen.size[1]
9 print("anchura: "+str(anchura)+",altura: "+str(altura))
10 pixeles = imagen.load()
11 print(pixeles[0,0])
12 for x in range(0,anchura):
13 for y in range(0,altura):
14 #print(pixeles[x,y])
15 pixeles[x,y] = (
16 random.randint(0, 255),
17 random.randint(0, 255),
18 random.randint(0, 255)
19 )
20
21 imagen.save("josevicente2.jpg")





Ejercicio del curso:

negativo.py



/Sistema/PIL/negativo.py

1 import PIL.Image
2 import random
3
4 imagen = PIL.Image.open("josevicente.jpg")
5
6 print(imagen.size)
7 anchura =imagen.size[0]
8 altura =imagen.size[1]
9 print("anchura: "+str(anchura)+",altura: "+str(altura))
10 pixeles = imagen.load()
11 print(pixeles[0,0])
12 for x in range(0,anchura):
13 for y in range(0,altura):
14 #print(pixeles[x,y])
15 pixeles[x,y] = (
16 255-pixeles[x,y][0],
17 255-pixeles[x,y][1],
18 255-pixeles[x,y][2]
19 )
20
21 imagen.save("josevicente2.jpg")





Ejercicio del curso:

minimoymaximo.py



/Sistema/PIL/minimoymaximo.py

1 import PIL.Image
2 import random
3
4 imagen = PIL.Image.open("naturaleza.jpg")
5
6 print(imagen.size)
7 anchura =imagen.size[0]
8 altura =imagen.size[1]
9 print("anchura: "+str(anchura)+",altura: "+str(altura))
10 pixeles = imagen.load()
11 minimo = 10000000
12 minimotupla = (0,0,0)
13 print(pixeles[0,0])
14 for x in range(0,anchura):
15 for y in range(0,altura):
16 media = round((pixeles[x,y][0]+pixeles[x,y][1]+pixeles[x,y][2])/3)
17 if media < minimo:
18 minimo = media
19 minimotupla = pixeles[x,y]
20
21 print("la tupla menor es de: ",minimotupla)





Ejercicio del curso:

maximo.py



/Sistema/PIL/maximo.py

1 import PIL.Image
2 import random
3
4 imagen = PIL.Image.open("naturaleza.jpg")
5
6 print(imagen.size)
7 anchura =imagen.size[0]
8 altura =imagen.size[1]
9 print("anchura: "+str(anchura)+",altura: "+str(altura))
10 pixeles = imagen.load()
11 minimo = 10000000
12 minimotupla = (0,0,0)
13 maximo = 0
14 maximotupla = (0,0,0)
15 print(pixeles[0,0])
16 for x in range(0,anchura):
17 for y in range(0,altura):
18 media = round((pixeles[x,y][0]+pixeles[x,y][1]+pixeles[x,y][2])/3)
19 if media < minimo:
20 minimo = media
21 minimotupla = pixeles[x,y]
22 if media > maximo:
23 maximo = media
24 maximotupla = pixeles[x,y]
25
26 print("la tupla menor es de: ",minimotupla)
27 print("el mínimo de: ",minimo)
28 print("la tupla mayor es de: ",maximotupla)
29 print("el máximo de: ",maximo)
30 print("El rango teórico es de 0,255, el rango práctico es de:0,"+str(maximo-minimo))
31 factor = 255/(maximo-minimo)
32 print("el factor es de: "+str(factor))





Ejercicio del curso:

retoquepixeles.py



/Sistema/PIL/retoquepixeles.py

1 import PIL.Image
2 import random
3
4 imagen = PIL.Image.open("naturaleza.jpg")
5
6 print(imagen.size)
7 anchura =imagen.size[0]
8 altura =imagen.size[1]
9 print("anchura: "+str(anchura)+",altura: "+str(altura))
10 pixeles = imagen.load()
11 minimo = 10000000
12 minimotupla = (0,0,0)
13 maximo = 0
14 maximotupla = (0,0,0)
15 print(pixeles[0,0])
16 for x in range(0,anchura):
17 for y in range(0,altura):
18 media = round((pixeles[x,y][0]+pixeles[x,y][1]+pixeles[x,y][2])/3)
19 if media < minimo:
20 minimo = media
21 minimotupla = pixeles[x,y]
22 if media > maximo:
23 maximo = media
24 maximotupla = pixeles[x,y]
25
26 print("la tupla menor es de: ",minimotupla)
27 print("el mínimo de: ",minimo)
28 print("la tupla mayor es de: ",maximotupla)
29 print("el máximo de: ",maximo)
30 print("El rango teórico es de 0,255, el rango práctico es de:0,"+str(maximo-minimo))
31 factor = 255/(maximo-minimo)
32 print("el factor es de: "+str(factor))
33
34 for x in range(0,anchura):
35 for y in range(0,altura):
36 rojo = round((pixeles[x,y][0]-minimo)*factor)
37 verde = round((pixeles[x,y][1]-minimo)*factor)
38 azul = round((pixeles[x,y][2]-minimo)*factor)
39 pixeles[x,y] = (rojo,verde,azul)
40 imagen.save("naturaleza2.jpg")
41
42
43
44
45
46
47
48
49
50
51





Ejercicio del curso:

escogercompresion.py



/Sistema/PIL/escogercompresion.py

1 import PIL.Image
2 import random
3
4 imagen = PIL.Image.open("naturaleza.jpg")
5
6 print(imagen.size)
7 anchura =imagen.size[0]
8 altura =imagen.size[1]
9 print("anchura: "+str(anchura)+",altura: "+str(altura))
10 pixeles = imagen.load()
11 minimo = 10000000
12 minimotupla = (0,0,0)
13 maximo = 0
14 maximotupla = (0,0,0)
15 print(pixeles[0,0])
16 for x in range(0,anchura):
17 for y in range(0,altura):
18 media = round((pixeles[x,y][0]+pixeles[x,y][1]+pixeles[x,y][2])/3)
19 if media < minimo:
20 minimo = media
21 minimotupla = pixeles[x,y]
22 if media > maximo:
23 maximo = media
24 maximotupla = pixeles[x,y]
25
26 print("la tupla menor es de: ",minimotupla)
27 print("el mínimo de: ",minimo)
28 print("la tupla mayor es de: ",maximotupla)
29 print("el máximo de: ",maximo)
30 print("El rango teórico es de 0,255, el rango práctico es de:0,"+str(maximo-minimo))
31 factor = 255/(maximo-minimo)
32 print("el factor es de: "+str(factor))
33
34 for x in range(0,anchura):
35 for y in range(0,altura):
36 rojo = round((pixeles[x,y][0]-minimo)*factor)
37 verde = round((pixeles[x,y][1]-minimo)*factor)
38 azul = round((pixeles[x,y][2]-minimo)*factor)
39 pixeles[x,y] = (rojo,verde,azul)
40 imagen.save("naturaleza2.jpg", quality=100)
41
42
43
44
45
46
47
48
49
50
51





Ejercicio del curso:

repasarcarpeta.py



/Sistema/PIL/repasarcarpeta.py

1 import PIL.Image
2 import random
3 import os
4
5 listado = os.listdir("../../naturaleza")
6 for archivo in listado:
7 imagen = PIL.Image.open("../../naturaleza/"+archivo)
8
9 print(imagen.size)
10 anchura =imagen.size[0]
11 altura =imagen.size[1]
12 print("anchura: "+str(anchura)+",altura: "+str(altura))
13 pixeles = imagen.load()
14 minimo = 10000000
15 minimotupla = (0,0,0)
16 maximo = 0
17 maximotupla = (0,0,0)
18 print(pixeles[0,0])
19 for x in range(0,anchura):
20 for y in range(0,altura):
21 media = round((pixeles[x,y][0]+pixeles[x,y][1]+pixeles[x,y][2])/3)
22 if media < minimo:
23 minimo = media
24 minimotupla = pixeles[x,y]
25 if media > maximo:
26 maximo = media
27 maximotupla = pixeles[x,y]
28
29 print("la tupla menor es de: ",minimotupla)
30 print("el mínimo de: ",minimo)
31 print("la tupla mayor es de: ",maximotupla)
32 print("el máximo de: ",maximo)
33 print("El rango teórico es de 0,255, el rango práctico es de:0,"+str(maximo-minimo))
34 factor = 255/(maximo-minimo)
35 print("el factor es de: "+str(factor))
36
37 for x in range(0,anchura):
38 for y in range(0,altura):
39 rojo = round((pixeles[x,y][0]-minimo)*factor)
40 verde = round((pixeles[x,y][1]-minimo)*factor)
41 azul = round((pixeles[x,y][2]-minimo)*factor)
42 pixeles[x,y] = (rojo,verde,azul)
43 imagen.save("../../naturaleza2/"+archivo, quality=100)
44
45
46
47
48
49
50
51
52
53
54





Ejercicio del curso:

interfazdeusuario.py



/Sistema/PIL/interfazdeusuario.py

1 import PIL.Image
2 import random
3 import os
4 import tkinter as tk
5 from tkinter import filedialog
6 from tkinter import ttk
7 import locale
8 import csv
9
10
11 carpetaorigen = ""
12 carpetadestino = ""
13
14 archivo = open("lang.csv", "r")
15 csv = csv.DictReader(archivo)
16 print(csv)
17 traducciones = []
18
19
20
21 print(traducciones)
22 idioma = locale.getdefaultlocale()[0]
23 print("El idioma de tu ordenador es:"+idioma)
24 idiomaapp = "es"
25 for linea in csv:
26 if "es" in idioma:
27 traducciones.append(linea['es'])
28
29 else:
30 traducciones.append(linea['en'])
31 print(traducciones)
32
33
34 def selCarpetaOrigen():
35 global carpetaorigen
36 carpetaorigen = filedialog.askdirectory()
37 print(carpetaorigen)
38 def selCarpetaDestino():
39 global carpetadestino
40 carpetadestino = filedialog.askdirectory()
41 print(carpetadestino)
42 def iniciar():
43 listado = os.listdir(carpetaorigen)
44 for archivo in listado:
45 imagen = PIL.Image.open(carpetaorigen+"/"+archivo)
46
47 print(imagen.size)
48 anchura =imagen.size[0]
49 altura =imagen.size[1]
50 print("anchura: "+str(anchura)+",altura: "+str(altura))
51 pixeles = imagen.load()
52 minimo = 10000000
53 minimotupla = (0,0,0)
54 maximo = 0
55 maximotupla = (0,0,0)
56 print(pixeles[0,0])
57 for x in range(0,anchura):
58 for y in range(0,altura):
59 media = round((pixeles[x,y][0]+pixeles[x,y][1]+pixeles[x,y][2])/3)
60 if media < minimo:
61 minimo = media
62 minimotupla = pixeles[x,y]
63 if media > maximo:
64 maximo = media
65 maximotupla = pixeles[x,y]
66
67 print("la tupla menor es de: ",minimotupla)
68 print("el mínimo de: ",minimo)
69 print("la tupla mayor es de: ",maximotupla)
70 print("el máximo de: ",maximo)
71 print("El rango teórico es de 0,255, el rango práctico es de:0,"+str(maximo-minimo))
72 factor = 255/(maximo-minimo)
73 print("el factor es de: "+str(factor))
74
75 for x in range(0,anchura):
76 for y in range(0,altura):
77 rojo = round((pixeles[x,y][0]-minimo)*factor)
78 verde = round((pixeles[x,y][1]-minimo)*factor)
79 azul = round((pixeles[x,y][2]-minimo)*factor)
80 pixeles[x,y] = (rojo,verde,azul)
81 imagen.save(carpetadestino+"/"+archivo, quality=100)
82 def ayuda():
83 print("vamos a por la ayuda")
84 tk.messagebox.showinfo(
85 title="Instrucciones",
86 message='''
87 Renombrador de archivos JPG con información EXIF
88 1.-Selecciona la carpeta de origen
89 2.-Selecciona la carpeta de destino
90 3.-Pulsa el botón verde para iniciar
91 Y el sistema renombrará tus fotografías usando la información EXIF existente
92 '''
93 )
94
95 raiz = tk.Tk()
96 raiz.geometry("300x500")
97 raiz.title("EXIF Renamer")
98 raiz.iconbitmap("logocamara.ico")
99 progreso = tk.IntVar()
100 marco = tk.Frame()
101 marco.pack()
102 imagen = tk.PhotoImage(file="logocamara.png")
103 fondoboton= tk.PhotoImage(file='boton.png')
104 fondoboton2= tk.PhotoImage(file='boton2.png')
105 tk.Label(marco, image=imagen).pack()
106 tk.Label(marco, text="EXIF Renamer (c) 2023 Jose Vicente Carratalá").pack()
107 tk.Label(marco,text=traducciones[0]).pack(pady=10)
108 tk.Button(marco,text=traducciones[1],image=fondoboton,borderwidth=0,command=selCarpetaOrigen).pack(pady=10)
109 tk.Label(marco,text=traducciones[2]).pack(pady=10)
110 tk.Button(marco,text=traducciones[3],image=fondoboton,borderwidth=0,command=selCarpetaDestino).pack(pady=10)
111 tk.Button(marco,text=traducciones[4],image=fondoboton2,borderwidth=0,command=iniciar).pack(pady=10)
112 barraprogreso = ttk.Progressbar(marco,variable=progreso)
113 barraprogreso.pack(pady=10)
114 etiquetaresultado = tk.Label(marco,text="")
115 etiquetaresultado.pack()
116
117
118 mimenu = tk.Menu(raiz)
119 raiz.config(menu=mimenu)
120 mimenu.add_cascade(label="Ayuda",command=ayuda)
121
122 raiz.mainloop()
123
124
125
126
127
128
129
130
131
132
133
134
135





Ejercicio del curso:



Ejercicio del curso:



Ejercicio del curso:







8.3.-Recursivo

Ejercicio del curso:

os.py



/Sistema/Recursivo/os.py

1 import os
2 listado = os.listdir("C:\\Users\\Admin\\Desktop")
3 print(listado)





Ejercicio del curso:

osrecursivo.py



/Sistema/Recursivo/osrecursivo.py

1 import os
2 def listadoRecursivo(directorio):
3 listado = os.listdir(directorio)
4 for elemento in listado:
5 ruta = (directorio+"/"+elemento)
6 if os.path.isdir(ruta):
7 print("es carpeta: "+ruta)
8 else:
9 print("es archivo: "+ruta)
10
11
12 listadoRecursivo("C:\\Users\\Admin\\Desktop")





Ejercicio del curso:

osrecursivoahora si.py



/Sistema/Recursivo/osrecursivoahora si.py

1 import os
2 def listadoRecursivo(directorio):
3 listado = os.listdir(directorio)
4 for elemento in listado:
5 ruta = (directorio+"/"+elemento)
6 if os.path.isdir(ruta):
7 print("es carpeta: "+ruta)
8 listadoRecursivo(ruta)
9 else:
10 print("es archivo: "+ruta)
11
12
13 listadoRecursivo("C:\\Users\\Admin\\Desktop")





Ejercicio del curso:

tamañoarchivo.py



/Sistema/Recursivo/tamañoarchivo.py

1 import os
2 def listadoRecursivo(directorio):
3 listado = os.listdir(directorio)
4 for elemento in listado:
5 ruta = (directorio+"/"+elemento)
6 if os.path.isdir(ruta):
7 print("es carpeta: "+ruta)
8 listadoRecursivo(ruta)
9 else:
10 estadisticas = os.stat(ruta)
11 kb = estadisticas.st_size / (1024)
12 print("es archivo: "+ruta+" y pesa "+str(kb)+"KB")
13
14
15
16 listadoRecursivo("C:/Users/Admin/Desktop")





Ejercicio del curso:

sqlite.py



/Sistema/Recursivo/sqlite.py

1 import os
2 import sqlite3 as db
3 import sys
4 conexion = db.connect("disco2.sqlite")
5 cursor = conexion.cursor()
6 cursor.execute('''
7 CREATE TABLE IF NOT EXISTS "elementos" (
8 "Identificador" INTEGER,
9 "ruta" TEXT,
10 "tamanio" NUMERIC,
11 "tipo" TEXT,
12 PRIMARY KEY("Identificador" AUTOINCREMENT)
13 );
14 ''')
15 def listadoRecursivo(directorio):
16 listado = os.listdir(directorio)
17 for elemento in listado:
18 ruta = (directorio+"/"+elemento)
19 if os.path.isdir(ruta):
20 print("es carpeta: "+ruta)
21 listadoRecursivo(ruta)
22 cursor.execute('''
23 INSERT INTO elementos VALUES(
24 NULL,
25 "'''+ruta+'''",
26 "0",
27 "carpeta"
28 )
29 ''')
30 conexion.commit()
31 else:
32 estadisticas = os.stat(ruta)
33 kb = estadisticas.st_size / (1024)
34 print("es archivo: "+ruta+" y pesa "+str(kb)+"KB")
35 cursor.execute('''
36 INSERT INTO elementos VALUES(
37 NULL,
38 "'''+ruta+'''",
39 '''+str(kb)+''',
40 "archivo"
41 )
42 ''')
43 conexion.commit()
44
45
46 listadoRecursivo("C:/Users/Admin/Desktop")





Ejercicio del curso:

ui.py



/Sistema/Recursivo/ui.py

1 import os
2 import sqlite3 as db
3 import sys
4 import tkinter as tk
5 from tkinter import filedialog
6 from tkinter import ttk
7 import locale
8 import csv
9
10 conexion = db.connect("disco2.sqlite")
11 cursor = conexion.cursor()
12 cursor.execute('''
13 CREATE TABLE IF NOT EXISTS "elementos" (
14 "Identificador" INTEGER,
15 "ruta" TEXT,
16 "tamanio" NUMERIC,
17 "tipo" TEXT,
18 PRIMARY KEY("Identificador" AUTOINCREMENT)
19 );
20 ''')
21
22 carpetaorigen = ""
23 carpetadestino = ""
24
25 archivo = open("lang.csv", "r")
26 csv = csv.DictReader(archivo)
27 print(csv)
28 traducciones = []
29
30
31
32 print(traducciones)
33 idioma = locale.getdefaultlocale()[0]
34 print("El idioma de tu ordenador es:"+idioma)
35 idiomaapp = "es"
36 for linea in csv:
37 if "es" in idioma:
38 traducciones.append(linea['es'])
39
40 else:
41 traducciones.append(linea['en'])
42 print(traducciones)
43
44
45 def selCarpetaOrigen():
46 global carpetaorigen
47 carpetaorigen = filedialog.askdirectory()
48 print(carpetaorigen)
49 def selCarpetaDestino():
50 global carpetadestino
51 carpetadestino = filedialog.askdirectory()
52 print(carpetadestino)
53 def iniciar():
54 listadoRecursivo(carpetaorigen)
55 def ayuda():
56 print("vamos a por la ayuda")
57 tk.messagebox.showinfo(
58 title="Instrucciones",
59 message='''
60 Renombrador de archivos JPG con información EXIF
61 1.-Selecciona la carpeta de origen
62 2.-Selecciona la carpeta de destino
63 3.-Pulsa el botón verde para iniciar
64 Y el sistema renombrará tus fotografías usando la información EXIF existente
65 '''
66 )
67 def listadoRecursivo(directorio):
68 listado = os.listdir(directorio)
69 for elemento in listado:
70 ruta = (directorio+"/"+elemento)
71 if os.path.isdir(ruta):
72 print("es carpeta: "+ruta)
73 listadoRecursivo(ruta)
74 cursor.execute('''
75 INSERT INTO elementos VALUES(
76 NULL,
77 "'''+ruta+'''",
78 "0",
79 "carpeta"
80 )
81 ''')
82 conexion.commit()
83 else:
84 estadisticas = os.stat(ruta)
85 kb = estadisticas.st_size / (1024)
86 print("es archivo: "+ruta+" y pesa "+str(kb)+"KB")
87 cursor.execute('''
88 INSERT INTO elementos VALUES(
89 NULL,
90 "'''+ruta+'''",
91 '''+str(kb)+''',
92 "archivo"
93 )
94 ''')
95 conexion.commit()
96
97 raiz = tk.Tk()
98 raiz.geometry("300x500")
99 raiz.title("EXIF Renamer")
100 raiz.iconbitmap("logocamara.ico")
101 progreso = tk.IntVar()
102 marco = tk.Frame()
103 marco.pack()
104 imagen = tk.PhotoImage(file="logocamara.png")
105 fondoboton= tk.PhotoImage(file='boton.png')
106 fondoboton2= tk.PhotoImage(file='boton2.png')
107 tk.Label(marco, image=imagen).pack()
108 tk.Label(marco, text="EXIF Renamer (c) 2023 Jose Vicente Carratalá").pack()
109 tk.Label(marco,text=traducciones[0]).pack(pady=10)
110 tk.Button(marco,text=traducciones[1],image=fondoboton,borderwidth=0,command=selCarpetaOrigen).pack(pady=10)
111
112 tk.Button(marco,text=traducciones[4],image=fondoboton2,borderwidth=0,command=iniciar).pack(pady=10)
113 barraprogreso = ttk.Progressbar(marco,variable=progreso)
114 barraprogreso.pack(pady=10)
115 etiquetaresultado = tk.Label(marco,text="")
116 etiquetaresultado.pack()
117
118
119 mimenu = tk.Menu(raiz)
120 raiz.config(menu=mimenu)
121 mimenu.add_cascade(label="Ayuda",command=ayuda)
122
123
124
125
126
127
128
129





Ejercicio del curso:







Ejercicio del curso:







Ejercicio del curso:



Ejercicio del curso:



9.-Comunicacion de red

9.1.-Requests

Ejercicio del curso:

librería.py



/Comunicacion de red/Requests/librería.py

1 #pip install requests
2 import requests
3





Ejercicio del curso:

pedir web.py



/Comunicacion de red/Requests/pedir web.py

1 #pip install requests
2 import requests
3
4 with requests.Session() as misesion:
5 pagina = misesion.get("https://jocarsa.com")
6 print(pagina.content)





Ejercicio del curso:

buscar en el DOM.py



/Comunicacion de red/Requests/buscar en el DOM.py

1 #pip install requests
2 #pip install bs4
3 #pip install lxml
4 import requests
5 from bs4 import BeautifulSoup
6 from requests.exceptions import HTTPError
7
8 with requests.Session() as misesion:
9 pagina = misesion.get("https://jocarsa.com")
10 #print(pagina.content)
11
12 for direccion in ['https://jocarsa.com']:
13 try:
14 respuesta = requests.get(direccion)
15 respuesta.raise_for_status()
16 except HTTPError as mierror:
17 print(mierror)
18 except Exception as errorpython:
19 print(errorpython)
20 else:
21 respuesta.encoding ='utf-8'
22 sopa = BeautifulSoup(respuesta.text,'lxml')
23 textos = sopa.find_all("title")
24 if len(textos) == 0:
25 print("No tienes etiqueta title y está mal")
26 else:
27 print("Si tienes etiqueta title y está bien")
28 print("Y la longitud de tu título es de: "+str(len(str(textos[0]))))
29
30
31
32





Ejercicio del curso:

etiquetatitulo.py



/Comunicacion de red/Requests/etiquetatitulo.py

1 #pip install requests
2 #pip install bs4
3 #pip install lxml
4 import requests
5 from bs4 import BeautifulSoup
6 from requests.exceptions import HTTPError
7
8 with requests.Session() as misesion:
9 pagina = misesion.get("https://jocarsa.com")
10 #print(pagina.content)
11
12 for direccion in ['https://jocarsa.com']:
13 try:
14 respuesta = requests.get(direccion)
15 respuesta.raise_for_status()
16 except HTTPError as mierror:
17 print(mierror)
18 except Exception as errorpython:
19 print(errorpython)
20 else:
21 respuesta.encoding ='utf-8'
22 sopa = BeautifulSoup(respuesta.text,'lxml')
23 textos = sopa.find_all("title")
24 if len(textos) == 0:
25 print("No tienes etiqueta title y está mal")
26 else:
27 print("Si tienes etiqueta title y está bien")
28 print("Y la longitud de tu título es de: "+str(len(str(textos[0]))))
29
30
31
32





Ejercicio del curso:

interfazdeusaurio.py



/Comunicacion de red/Requests/interfazdeusaurio.py

1 #pip install requests
2 #pip install bs4
3 #pip install lxml
4 import requests
5 from bs4 import BeautifulSoup
6 from requests.exceptions import HTTPError
7 import tkinter as tk
8
9 with requests.Session() as misesion:
10 pagina = misesion.get("https://jocarsa.com")
11 #print(pagina.content)
12
13 for direccion in ['https://jocarsa.com']:
14 try:
15 respuesta = requests.get(direccion)
16 respuesta.raise_for_status()
17 except HTTPError as mierror:
18 print(mierror)
19 except Exception as errorpython:
20 print(errorpython)
21 else:
22 respuesta.encoding ='utf-8'
23 sopa = BeautifulSoup(respuesta.text,'lxml')
24 textos = sopa.find_all("title")
25 if len(textos) == 0:
26 print("No tienes etiqueta title y está mal")
27 else:
28 print("Si tienes etiqueta title y está bien")
29 print("Y la longitud de tu título es de: "+str(len(str(textos[0]))))
30
31
32 raiz = tk.Tk()
33 raiz.geometry("300x500")
34 raiz.title("Comprobador SEO")
35 marco = tk.Frame(raiz)
36 marco.pack()
37
38
39 raiz.mainloop()
40
41





Ejercicio del curso:

widgets.py



/Comunicacion de red/Requests/widgets.py

1 #pip install requests
2 #pip install bs4
3 #pip install lxml
4 import requests
5 from bs4 import BeautifulSoup
6 from requests.exceptions import HTTPError
7 import tkinter as tk
8
9 with requests.Session() as misesion:
10 pagina = misesion.get("https://jocarsa.com")
11 #print(pagina.content)
12
13 for direccion in ['https://jocarsa.com']:
14 try:
15 respuesta = requests.get(direccion)
16 respuesta.raise_for_status()
17 except HTTPError as mierror:
18 print(mierror)
19 except Exception as errorpython:
20 print(errorpython)
21 else:
22 respuesta.encoding ='utf-8'
23 sopa = BeautifulSoup(respuesta.text,'lxml')
24 textos = sopa.find_all("title")
25 if len(textos) == 0:
26 print("No tienes etiqueta title y está mal")
27 else:
28 print("Si tienes etiqueta title y está bien")
29 print("Y la longitud de tu título es de: "+str(len(str(textos[0]))))
30
31 def compruebaSEO():
32 pass
33
34 raiz = tk.Tk()
35 raiz.geometry("300x500")
36 raiz.title("Comprobador SEO")
37
38 miurl = tk.StringVar(raiz)
39
40 marco = tk.Frame(raiz)
41 marco.pack()
42
43 tk.Label(marco,text="Introduce la URL que quieres comprobar:").pack(pady=10)
44 tk.Entry(marco,textvariable=miurl,width=30).pack(pady=10)
45 tk.Button(marco,command=compruebaSEO,text="Comprobar").pack(pady=10)
46
47
48 raiz.mainloop()
49
50





Ejercicio del curso:

comando.py



/Comunicacion de red/Requests/comando.py

1 #pip install requests
2 #pip install bs4
3 #pip install lxml
4 import requests
5 from bs4 import BeautifulSoup
6 from requests.exceptions import HTTPError
7 import tkinter as tk
8
9 def compruebaSEO():
10 try:
11 respuesta = requests.get(miurl.get())
12 respuesta.raise_for_status()
13 except HTTPError as mierror:
14 print(mierror)
15 except Exception as errorpython:
16 print(errorpython)
17 else:
18 respuesta.encoding ='utf-8'
19 sopa = BeautifulSoup(respuesta.text,'lxml')
20 textos = sopa.find_all("title")
21 if len(textos) == 0:
22 print("No tienes etiqueta title y está mal")
23 else:
24 print("Si tienes etiqueta title y está bien")
25 print("Y la longitud de tu título es de: "+str(len(str(textos[0]))))
26
27 raiz = tk.Tk()
28 raiz.geometry("300x500")
29 raiz.title("Comprobador SEO")
30
31 miurl = tk.StringVar(raiz)
32
33 marco = tk.Frame(raiz)
34 marco.pack()
35
36 tk.Label(marco,text="Introduce la URL que quieres comprobar:").pack(pady=10)
37 tk.Entry(marco,textvariable=miurl,width=30).pack(pady=10)
38 tk.Button(marco,command=compruebaSEO,text="Comprobar").pack(pady=10)
39
40
41 raiz.mainloop()
42
43





Ejercicio del curso:

salidaporventana.py



/Comunicacion de red/Requests/salidaporventana.py

1 #pip install requests
2 #pip install bs4
3 #pip install lxml
4 import requests
5 from bs4 import BeautifulSoup
6 from requests.exceptions import HTTPError
7 import tkinter as tk
8
9 def compruebaSEO():
10 try:
11 respuesta = requests.get(miurl.get())
12 respuesta.raise_for_status()
13 except HTTPError as mierror:
14 print(mierror)
15 except Exception as errorpython:
16 print(errorpython)
17 else:
18 respuesta.encoding ='utf-8'
19 sopa = BeautifulSoup(respuesta.text,'lxml')
20 textos = sopa.find_all("title")
21 campodetexto.insert(tk.END, 'Comprobación de título\n')
22 if len(textos) == 0:
23 campodetexto.insert(tk.END, 'No se encuentra etiqueta de título\n')
24 else:
25 campodetexto.insert(tk.END, 'Se ha encontrado un título:\n')
26 campodetexto.insert(tk.END, str(textos[0])+"\n")
27 campodetexto.insert(tk.END, "Longitud del título: "+str(len(str(textos[0])))+"\n")
28
29 raiz = tk.Tk()
30 raiz.geometry("600x800")
31 raiz.title("Comprobador SEO")
32
33 miurl = tk.StringVar(raiz)
34
35 marco = tk.Frame(raiz)
36 marco.pack()
37
38 tk.Label(marco,text="Introduce la URL que quieres comprobar:").pack(pady=10)
39 tk.Entry(marco,textvariable=miurl,width=30).pack(pady=10)
40 tk.Button(marco,command=compruebaSEO,text="Comprobar").pack(pady=10)
41 campodetexto = tk.Text(marco, height=40, width=70)
42 campodetexto.pack()
43
44
45 raiz.mainloop()
46
47





Ejercicio del curso:

iconos.py



/Comunicacion de red/Requests/iconos.py

1 #pip install requests
2 #pip install bs4
3 #pip install lxml
4 import requests
5 from bs4 import BeautifulSoup
6 from requests.exceptions import HTTPError
7 import tkinter as tk
8
9 def compruebaSEO():
10 try:
11 respuesta = requests.get(miurl.get())
12 respuesta.raise_for_status()
13 except HTTPError as mierror:
14 print(mierror)
15 except Exception as errorpython:
16 print(errorpython)
17 else:
18 respuesta.encoding ='utf-8'
19 sopa = BeautifulSoup(respuesta.text,'lxml')
20 textos = sopa.find_all("title")
21
22 if len(textos) == 0:
23 campodetexto.image_create(tk.END, image = ko)
24 campodetexto.insert(tk.END, '\n')
25 campodetexto.insert(tk.END, 'Comprobación de título\n')
26 campodetexto.insert(tk.END, 'No se encuentra etiqueta de título\n')
27
28 else:
29 campodetexto.image_create(tk.END, image = ok)
30 campodetexto.insert(tk.END, '\n')
31 campodetexto.insert(tk.END, 'Comprobación de título\n')
32 campodetexto.insert(tk.END, 'Se ha encontrado un título:\n')
33 campodetexto.insert(tk.END, str(textos[0])+"\n")
34 campodetexto.insert(tk.END, "Longitud del título: "+str(len(str(textos[0])))+"\n")
35
36 raiz = tk.Tk()
37 raiz.geometry("600x800")
38 raiz.title("Comprobador SEO")
39
40 miurl = tk.StringVar(raiz)
41
42 marco = tk.Frame(raiz)
43 marco.pack()
44
45 ok = tk.PhotoImage(file = "ok.png")
46 ko = tk.PhotoImage(file = "ko.png")
47
48 tk.Label(marco,text="Introduce la URL que quieres comprobar:").pack(pady=10)
49 tk.Entry(marco,textvariable=miurl,width=30).pack(pady=10)
50 tk.Button(marco,command=compruebaSEO,text="Comprobar").pack(pady=10)
51 campodetexto = tk.Text(marco, height=40, width=70,font="Arial 10")
52 campodetexto.pack()
53
54
55 raiz.mainloop()
56
57





Ejercicio del curso:

comprobarurl.py



/Comunicacion de red/Requests/comprobarurl.py

1 #pip install requests
2 #pip install bs4
3 #pip install lxml
4 import requests
5 from bs4 import BeautifulSoup
6 from requests.exceptions import HTTPError
7 import tkinter as tk
8
9 def compruebaSEO():
10 urlstring = ""
11 if not "http" in miurl.get():
12 urlstring = "https://"+ miurl.get()
13 else:
14 urlstring = miurl.get()
15 try:
16 respuesta = requests.get(urlstring)
17 respuesta.raise_for_status()
18 except HTTPError as mierror:
19 print(mierror)
20 except Exception as errorpython:
21 print(errorpython)
22 else:
23 respuesta.encoding ='utf-8'
24 sopa = BeautifulSoup(respuesta.text,'lxml')
25 textos = sopa.find_all("title")
26
27 if len(textos) == 0:
28 campodetexto.image_create(tk.END, image = ko)
29 campodetexto.insert(tk.END, '\n')
30 campodetexto.insert(tk.END, 'Comprobación de título\n')
31 campodetexto.insert(tk.END, 'No se encuentra etiqueta de título\n')
32
33 else:
34 campodetexto.image_create(tk.END, image = ok)
35 campodetexto.insert(tk.END, '\n')
36 campodetexto.insert(tk.END, 'Comprobación de título\n')
37 campodetexto.insert(tk.END, 'Se ha encontrado un título:\n')
38 campodetexto.insert(tk.END, str(textos[0])+"\n")
39 campodetexto.insert(tk.END, "Longitud del título: "+str(len(str(textos[0])))+"\n")
40
41 raiz = tk.Tk()
42 raiz.geometry("600x800")
43 raiz.title("Comprobador SEO")
44
45 miurl = tk.StringVar(raiz)
46
47 marco = tk.Frame(raiz)
48 marco.pack()
49
50 ok = tk.PhotoImage(file = "ok.png")
51 ko = tk.PhotoImage(file = "ko.png")
52
53 tk.Label(marco,text="Introduce la URL que quieres comprobar:").pack(pady=10)
54 tk.Entry(marco,textvariable=miurl,width=30).pack(pady=10)
55 tk.Button(marco,command=compruebaSEO,text="Comprobar").pack(pady=10)
56 campodetexto = tk.Text(marco, height=40, width=70,font="Arial 10")
57 campodetexto.pack()
58
59
60 raiz.mainloop()
61
62





Ejercicio del curso:

descripcion.py



/Comunicacion de red/Requests/descripcion.py

1 #pip install requests
2 #pip install bs4
3 #pip install lxml
4 import requests
5 from bs4 import BeautifulSoup
6 from requests.exceptions import HTTPError
7 import tkinter as tk
8
9 def compruebaSEO():
10 urlstring = ""
11 if not "http" in miurl.get():
12 urlstring = "https://"+ miurl.get()
13 else:
14 urlstring = miurl.get()
15 try:
16 respuesta = requests.get(urlstring)
17 respuesta.raise_for_status()
18 except HTTPError as mierror:
19 print(mierror)
20 except Exception as errorpython:
21 print(errorpython)
22 else:
23 respuesta.encoding ='utf-8'
24 sopa = BeautifulSoup(respuesta.text,'lxml')
25 # Búsqueda de título
26 textos = sopa.find_all("title")
27 if len(textos) == 0:
28 campodetexto.image_create(tk.END, image = ko)
29 campodetexto.insert(tk.END, '\n')
30 campodetexto.insert(tk.END, 'Comprobación de título\n')
31 campodetexto.insert(tk.END, 'No se encuentra etiqueta de título\n')
32
33 else:
34 campodetexto.image_create(tk.END, image = ok)
35 campodetexto.insert(tk.END, '\n')
36 campodetexto.insert(tk.END, 'Comprobación de título\n')
37 campodetexto.insert(tk.END, 'Se ha encontrado un título:\n')
38 campodetexto.insert(tk.END, str(textos[0])+"\n")
39 campodetexto.insert(tk.END, "Longitud del título: "+str(len(str(textos[0])))+"\n")
40 # Búsqueda de descripción
41 textos = sopa.find_all("meta", {"name" : "description"})
42 if len(textos) == 0:
43 campodetexto.image_create(tk.END, image = ko)
44 campodetexto.insert(tk.END, '\n')
45 campodetexto.insert(tk.END, 'Comprobación de descripción\n')
46 campodetexto.insert(tk.END, 'No se encuentra etiqueta de descripción\n')
47
48 else:
49 campodetexto.image_create(tk.END, image = ok)
50 campodetexto.insert(tk.END, '\n')
51 campodetexto.insert(tk.END, 'Comprobación de descripción\n')
52 campodetexto.insert(tk.END, 'Se ha encontrado una descripción:\n')
53 campodetexto.insert(tk.END, str(textos[0])+"\n")
54 campodetexto.insert(tk.END, "Longitud de la descripción: "+str(len(str(textos[0])))+"\n")
55
56 raiz = tk.Tk()
57 raiz.geometry("600x800")
58 raiz.title("Comprobador SEO")
59
60 miurl = tk.StringVar(raiz)
61
62 marco = tk.Frame(raiz)
63 marco.pack()
64
65 ok = tk.PhotoImage(file = "ok.png")
66 ko = tk.PhotoImage(file = "ko.png")
67
68 tk.Label(marco,text="Introduce la URL que quieres comprobar:").pack(pady=10)
69 tk.Entry(marco,textvariable=miurl,width=30).pack(pady=10)
70 tk.Button(marco,command=compruebaSEO,text="Comprobar").pack(pady=10)
71 campodetexto = tk.Text(marco, height=40, width=70,font="Arial 10")
72 campodetexto.pack()
73
74
75 raiz.mainloop()
76
77





Ejercicio del curso:

treeview.py



/Comunicacion de red/Requests/treeview.py

1 #pip install requests
2 #pip install bs4
3 #pip install lxml
4 import requests
5 from bs4 import BeautifulSoup
6 from requests.exceptions import HTTPError
7 import tkinter as tk
8 from tkinter import ttk
9
10 def compruebaSEO():
11 urlstring = ""
12 if not "http" in miurl.get():
13 urlstring = "https://"+ miurl.get()
14 else:
15 urlstring = miurl.get()
16 try:
17 respuesta = requests.get(urlstring)
18 respuesta.raise_for_status()
19 except HTTPError as mierror:
20 print(mierror)
21 except Exception as errorpython:
22 print(errorpython)
23 else:
24 respuesta.encoding ='utf-8'
25 sopa = BeautifulSoup(respuesta.text,'lxml')
26 # Búsqueda de título
27 textos = sopa.find_all("title")
28 if len(textos) == 0:
29 arbol.insert('', 'end', text="1", values=('ko', 'Titulo', 'No existe'))
30 else:
31 arbol.insert('', 'end', text="1", values=('ok', 'Titulo', str(textos[0])))
32 # Búsqueda de descripción
33 textos = sopa.find_all("meta", {"name" : "description"})
34 if len(textos) == 0:
35 arbol.insert('', 'end', text="1", values=('ko', 'Descripción', 'No existe'))
36 else:
37 arbol.insert('', 'end', text="1", values=('ok', 'Descripción', str(textos[0])))
38
39 raiz = tk.Tk()
40 raiz.geometry("600x800")
41 raiz.title("Comprobador SEO")
42
43 miurl = tk.StringVar(raiz)
44
45 marco = tk.Frame(raiz)
46 marco.pack()
47
48 ok = tk.PhotoImage(file = "ok.png")
49 ko = tk.PhotoImage(file = "ko.png")
50
51 tk.Label(marco,text="Introduce la URL que quieres comprobar:").pack(pady=10)
52 entrada = tk.Entry(marco,textvariable=miurl,width=30)
53 entrada.pack(pady=10)
54 entrada.insert(0, "https://jocarsa.com")
55 tk.Button(marco,command=compruebaSEO,text="Comprobar").pack(pady=10)
56 #campodetexto = tk.Text(marco, height=1, width=4,font="Arial 10")
57 arbol = ttk.Treeview(raiz, column=("Nombre", "Telefono", "Email"), show='headings', height=5)
58 arbol.column("# 1", anchor=tk.CENTER,width=10)
59 arbol.heading("# 1", text="Resultado")
60 arbol.column("# 2", anchor=tk.CENTER,width=200)
61 arbol.heading("# 2", text="Marcador")
62 arbol.column("# 3", anchor=tk.CENTER,width=400)
63 arbol.heading("# 3", text="Comentario")
64
65
66 arbol.pack()
67
68 raiz.mainloop()
69
70





Ejercicio del curso:

contar palabras.py



/Comunicacion de red/Requests/contar palabras.py

1 #pip install requests
2 #pip install bs4
3 #pip install lxml
4 import requests
5 from bs4 import BeautifulSoup
6 from requests.exceptions import HTTPError
7 import tkinter as tk
8 from tkinter import ttk
9 import operator
10 from collections import Counter
11 import re
12
13
14
15 def compruebaSEO():
16 urlstring = ""
17 if not "http" in miurl.get():
18 urlstring = "https://"+ miurl.get()
19 else:
20 urlstring = miurl.get()
21 try:
22 respuesta = requests.get(urlstring)
23 respuesta.raise_for_status()
24 except HTTPError as mierror:
25 print(mierror)
26 except Exception as errorpython:
27 print(errorpython)
28 else:
29 respuesta.encoding ='utf-8'
30 sopa = BeautifulSoup(respuesta.text,'lxml')
31 # Búsqueda de título
32 textos = sopa.find_all("title")
33 if len(textos) == 0:
34 arbol.insert('', 'end', text="1", values=('ko', 'Titulo', 'No existe'))
35 else:
36 arbol.insert('', 'end', text="1", values=('ok', 'Titulo', str(textos[0])))
37 # Búsqueda de descripción
38 textos = sopa.find_all("meta", {"name" : "description"})
39 if len(textos) == 0:
40 arbol.insert('', 'end', text="1", values=('ko', 'Descripción', 'No existe'))
41 else:
42 arbol.insert('', 'end', text="1", values=('ok', 'Descripción', str(textos[0])))
43 #palabras mas repetidas
44 spanish_stop_words = [
45 "a", "al", "ante", "bajo", "cabe", "con", "contra", "de", "desde", "e", "el", "en", "entre", "hacia", "hasta", "la",
46 "las", "le", "les", "lo", "los", "me", "mi", "mis", "mía", "mías", "mío", "míos", "nada", "ni", "no", "nos", "nosotros",
47 "nuestra", "nuestras", "nuestro", "nuestros", "o", "os", "otra", "otras", "otro", "otros", "para", "pero", "por", "que",
48 "se", "si", "sin", "sobre", "sois", "somos", "son", "su", "sus", "tanto", "te", "tu", "tus", "tú", "un", "una", "uno",
49 "unos", "vosotros", "vuestra", "vuestras", "vuestro", "vuestros", "y", "ya"
50 ]
51 text = sopa.get_text()
52 processed_text = re.sub(r'\W+', ' ', text.lower())
53 words = processed_text.split()
54 words = [word for word in words if word not in spanish_stop_words and not word.isdigit()]
55 word_counts = Counter(words)
56 most_common = word_counts.most_common(5)
57 cadena= ""
58 for word, count in most_common:
59 print(word, count)
60 cadena+= word+":"+str(count)+" - "
61 arbol.insert('', 'end', text="1", values=('ok', 'Palabras clave', cadena))
62
63 raiz = tk.Tk()
64 raiz.geometry("600x800")
65 raiz.title("Comprobador SEO")
66
67 miurl = tk.StringVar(raiz)
68
69 marco = tk.Frame(raiz)
70 marco.pack()
71
72 ok = tk.PhotoImage(file = "ok.png")
73 ko = tk.PhotoImage(file = "ko.png")
74
75 tk.Label(marco,text="Introduce la URL que quieres comprobar:").pack(pady=10)
76 entrada = tk.Entry(marco,textvariable=miurl,width=30)
77 entrada.pack(pady=10)
78 entrada.insert(0, "https://jocarsa.com")
79 tk.Button(marco,command=compruebaSEO,text="Comprobar").pack(pady=10)
80 #campodetexto = tk.Text(marco, height=1, width=4,font="Arial 10")
81 arbol = ttk.Treeview(raiz, column=("Nombre", "Telefono", "Email"), show='headings', height=50)
82 arbol.column("# 1", anchor=tk.CENTER,width=10)
83 arbol.heading("# 1", text="Resultado")
84 arbol.column("# 2", anchor=tk.CENTER,width=200)
85 arbol.heading("# 2", text="Marcador")
86 arbol.column("# 3", anchor=tk.CENTER,width=400)
87 arbol.heading("# 3", text="Comentario")
88 arbol.tag_configure("left_align", anchor="w")
89
90 arbol.pack()
91
92 raiz.mainloop()
93
94





Ejercicio del curso:



9.2.-crawler

Ejercicio del curso:

guardar en base.py



/Comunicacion de red/crawler/guardar en base.py

1 #pip install requests
2 #pip install bs4
3 #pip install lxml
4 import requests
5 from bs4 import BeautifulSoup
6 from requests.exceptions import HTTPError
7
8
9 def compruebaEnlaces(url):
10 urlstring = ""
11 if not "http" in url:
12 urlstring = "https://"+ url
13 else:
14 urlstring = url
15 try:
16 respuesta = requests.get(urlstring)
17 respuesta.raise_for_status()
18 except HTTPError as mierror:
19 print(mierror)
20 except Exception as errorpython:
21 print(errorpython)
22 else:
23 respuesta.encoding ='utf-8'
24 sopa = BeautifulSoup(respuesta.text,'lxml')
25 textos = sopa.find_all("title")
26 titulo = str(textos[0])
27 textos = sopa.find_all("meta", {"name" : "description"})
28 descripcion = str(textos[0])
29
30
31 compruebaEnlaces("https://jocarsa.com")
32
33
34
35
36
37





Ejercicio del curso:

guardar en base.py



/Comunicacion de red/crawler/guardar en base.py

1 #pip install requests
2 #pip install bs4
3 #pip install lxml
4 import requests
5 from bs4 import BeautifulSoup
6 from requests.exceptions import HTTPError
7 import sqlite3 as db
8 import sys
9 import re
10
11 conexion = db.connect("buscador.sqlite")
12 cursor = conexion.cursor()
13 cursor.execute('''
14 CREATE TABLE IF NOT EXISTS "webs" (
15 "Identificador" INTEGER,
16 "titulo" TEXT,
17 "descripcion" TEXT,
18 "url" TEXT,
19 PRIMARY KEY("Identificador" AUTOINCREMENT)
20 );
21 ''')
22
23 def compruebaEnlaces(url):
24 urlstring = ""
25 if not "http" in url:
26 urlstring = "https://"+ url
27 else:
28 urlstring = url
29 try:
30 respuesta = requests.get(urlstring)
31 respuesta.raise_for_status()
32 except HTTPError as mierror:
33 print(mierror)
34 except Exception as errorpython:
35 print(errorpython)
36 else:
37 respuesta.encoding ='utf-8'
38 sopa = BeautifulSoup(respuesta.text,'lxml')
39 textos = sopa.find_all("title")
40 titulo = str(textos[0])
41 textos = sopa.find_all("meta", {"name" : "description"})
42 descripcion = str(textos[0])
43 cadena = '''
44 INSERT INTO webs VALUES(
45 NULL,
46 "'''+titulo.replace('"',"'")+'''",
47 "'''+descripcion.replace('"',"'")+'''",
48 "'''+url.replace('"',"'")+'''"
49 )
50 '''
51 print(cadena)
52 cursor.execute(cadena)
53 conexion.commit()
54
55
56 compruebaEnlaces("https://jocarsa.com")
57
58
59
60
61
62





Ejercicio del curso:

buscar a.py



/Comunicacion de red/crawler/buscar a.py

1 #pip install requests
2 #pip install bs4
3 #pip install lxml
4 import requests
5 from bs4 import BeautifulSoup
6 from requests.exceptions import HTTPError
7 import sqlite3 as db
8 import sys
9 import re
10
11 conexion = db.connect("buscador.sqlite")
12 cursor = conexion.cursor()
13 cursor.execute('''
14 CREATE TABLE IF NOT EXISTS "webs" (
15 "Identificador" INTEGER,
16 "titulo" TEXT,
17 "descripcion" TEXT,
18 "url" TEXT,
19 PRIMARY KEY("Identificador" AUTOINCREMENT)
20 );
21 ''')
22
23 def compruebaEnlaces(url):
24 urlstring = ""
25 if not "http" in url:
26 urlstring = "https://"+ url
27 else:
28 urlstring = url
29 try:
30 respuesta = requests.get(urlstring)
31 respuesta.raise_for_status()
32 except HTTPError as mierror:
33 print(mierror)
34 except Exception as errorpython:
35 print(errorpython)
36 else:
37 respuesta.encoding ='utf-8'
38 sopa = BeautifulSoup(respuesta.text,'lxml')
39 textos = sopa.find_all("title")
40 titulo = str(textos[0])
41 textos = sopa.find_all("meta", {"name" : "description"})
42 descripcion = str(textos[0])
43 cadena = '''
44 INSERT INTO webs VALUES(
45 NULL,
46 "'''+titulo.replace('"',"'")+'''",
47 "'''+descripcion.replace('"',"'")+'''",
48 "'''+url.replace('"',"'")+'''"
49 )
50 '''
51 print(cadena)
52 cursor.execute(cadena)
53 conexion.commit()
54 enlaces = sopa.find_all("a")
55 print(enlaces)
56 for enlace in enlaces:
57 if "http" in str(enlace):
58 print(enlace['href'])
59
60
61
62 compruebaEnlaces("https://escuelamastermedia.es/")
63
64
65
66
67
68





Ejercicio del curso:

sleep.py



/Comunicacion de red/crawler/sleep.py

1 #pip install requests
2 #pip install bs4
3 #pip install lxml
4 import requests
5 from bs4 import BeautifulSoup
6 from requests.exceptions import HTTPError
7 import sqlite3 as db
8 import sys
9 import re
10 import time
11
12 conexion = db.connect("buscador.sqlite")
13 cursor = conexion.cursor()
14 cursor.execute('''
15 CREATE TABLE IF NOT EXISTS "webs" (
16 "Identificador" INTEGER,
17 "titulo" TEXT,
18 "descripcion" TEXT,
19 "url" TEXT,
20 PRIMARY KEY("Identificador" AUTOINCREMENT)
21 );
22 ''')
23
24 def compruebaEnlaces(url):
25 urlstring = ""
26 if not "http" in url:
27 urlstring = "https://"+ url
28 else:
29 urlstring = url
30 try:
31 respuesta = requests.get(urlstring)
32 respuesta.raise_for_status()
33 except HTTPError as mierror:
34 print(mierror)
35 except Exception as errorpython:
36 print(errorpython)
37 else:
38 respuesta.encoding ='utf-8'
39 sopa = BeautifulSoup(respuesta.text,'lxml')
40 textos = sopa.find_all("title")
41 titulo = str(textos[0])
42 textos = sopa.find_all("meta", {"name" : "description"})
43 descripcion = str(textos[0])
44 cadena = '''
45 INSERT INTO webs VALUES(
46 NULL,
47 "'''+titulo.replace('"',"'")+'''",
48 "'''+descripcion.replace('"',"'")+'''",
49 "'''+url.replace('"',"'")+'''"
50 )
51 '''
52 print(cadena)
53 cursor.execute(cadena)
54 conexion.commit()
55 enlaces = sopa.find_all("a")
56 print(enlaces)
57 for enlace in enlaces:
58 if "http" in str(enlace):
59 print(enlace['href'])
60 time.sleep(5)
61 compruebaEnlaces(enlace['href'])
62
63
64
65 compruebaEnlaces("https://escuelamastermedia.es/")
66
67
68
69
70
71





Ejercicio del curso:

busquedainversa.py



/Comunicacion de red/crawler/busquedainversa.py

1 #pip install requests
2 #pip install bs4
3 #pip install lxml
4 import requests
5 from bs4 import BeautifulSoup
6 from requests.exceptions import HTTPError
7 import sqlite3 as db
8 import sys
9 import re
10 import time
11
12 conexion = db.connect("buscador.sqlite")
13 cursor = conexion.cursor()
14 cursor.execute('''
15 CREATE TABLE IF NOT EXISTS "webs" (
16 "Identificador" INTEGER,
17 "titulo" TEXT,
18 "descripcion" TEXT,
19 "url" TEXT,
20 PRIMARY KEY("Identificador" AUTOINCREMENT)
21 );
22 ''')
23
24 def compruebaEnlaces(url):
25 urlstring = ""
26 if not "http" in url:
27 urlstring = "https://"+ url
28 else:
29 urlstring = url
30 try:
31 respuesta = requests.get(urlstring)
32 respuesta.raise_for_status()
33 except HTTPError as mierror:
34 print(mierror)
35 except Exception as errorpython:
36 print(errorpython)
37 else:
38 respuesta.encoding ='utf-8'
39 sopa = BeautifulSoup(respuesta.text,'lxml')
40 textos = sopa.find_all("title")
41 titulo = str(textos[0])
42 textos = sopa.find_all("meta", {"name" : "description"})
43 descripcion = str(textos[0])
44 cadena = '''
45 INSERT INTO webs VALUES(
46 NULL,
47 "'''+titulo.replace('"',"'")+'''",
48 "'''+descripcion.replace('"',"'")+'''",
49 "'''+url.replace('"',"'")+'''"
50 )
51 '''
52 print(cadena)
53 cursor.execute(cadena)
54 conexion.commit()
55 enlaces = sopa.find_all("a")
56 print(enlaces)
57 for enlace in reversed(enlaces):
58 if "http" in str(enlace):
59 print(enlace['href'])
60 time.sleep(5)
61 compruebaEnlaces(enlace['href'])
62
63
64
65 compruebaEnlaces("https://escuelamastermedia.es/")
66
67
68
69
70
71





Ejercicio del curso:

try.py



/Comunicacion de red/crawler/try.py

1 #pip install requests
2 #pip install bs4
3 #pip install lxml
4 import requests
5 from bs4 import BeautifulSoup
6 from requests.exceptions import HTTPError
7 import sqlite3 as db
8 import sys
9 import re
10 import time
11
12 conexion = db.connect("buscador.sqlite")
13 cursor = conexion.cursor()
14 cursor.execute('''
15 CREATE TABLE IF NOT EXISTS "webs" (
16 "Identificador" INTEGER,
17 "titulo" TEXT,
18 "descripcion" TEXT,
19 "url" TEXT,
20 PRIMARY KEY("Identificador" AUTOINCREMENT)
21 );
22 ''')
23
24 def compruebaEnlaces(url):
25 urlstring = ""
26 if not "http" in url:
27 urlstring = "https://"+ url
28 else:
29 urlstring = url
30 try:
31 respuesta = requests.get(urlstring)
32 respuesta.raise_for_status()
33 except HTTPError as mierror:
34 print(mierror)
35 except Exception as errorpython:
36 print(errorpython)
37 else:
38 try:
39 respuesta.encoding ='utf-8'
40 sopa = BeautifulSoup(respuesta.text,'lxml')
41 textos = sopa.find_all("title")
42 titulo = str(textos[0])
43 textos = sopa.find_all("meta", {"name" : "description"})
44 descripcion = str(textos[0])
45 cadena = '''
46 INSERT INTO webs VALUES(
47 NULL,
48 "'''+titulo.replace('"',"'")+'''",
49 "'''+descripcion.replace('"',"'")+'''",
50 "'''+url.replace('"',"'")+'''"
51 )
52 '''
53 print(cadena)
54 cursor.execute(cadena)
55 conexion.commit()
56 enlaces = sopa.find_all("a")
57 print(enlaces)
58 for enlace in reversed(enlaces):
59 if "http" in str(enlace):
60 print(enlace['href'])
61 time.sleep(5)
62 compruebaEnlaces(enlace['href'])
63 except:
64 print("Ha habido algun error")
65
66
67
68 compruebaEnlaces("https://escuelamastermedia.es/")
69
70
71
72
73
74





Ejercicio del curso:

shuffle.py



/Comunicacion de red/crawler/shuffle.py

1 #pip install requests
2 #pip install bs4
3 #pip install lxml
4 import requests
5 from bs4 import BeautifulSoup
6 from requests.exceptions import HTTPError
7 import sqlite3 as db
8 import sys
9 import re
10 import time
11 import random
12
13 conexion = db.connect("buscador.sqlite")
14 cursor = conexion.cursor()
15 cursor.execute('''
16 CREATE TABLE IF NOT EXISTS "webs" (
17 "Identificador" INTEGER,
18 "titulo" TEXT,
19 "descripcion" TEXT,
20 "url" TEXT,
21 PRIMARY KEY("Identificador" AUTOINCREMENT)
22 );
23 ''')
24
25 def compruebaEnlaces(url):
26 urlstring = ""
27 if not "http" in url:
28 urlstring = "https://"+ url
29 else:
30 urlstring = url
31 try:
32 respuesta = requests.get(urlstring)
33 respuesta.raise_for_status()
34 except HTTPError as mierror:
35 print(mierror)
36 except Exception as errorpython:
37 print(errorpython)
38 else:
39 try:
40 respuesta.encoding ='utf-8'
41 sopa = BeautifulSoup(respuesta.text,'lxml')
42 textos = sopa.find_all("title")
43 titulo = str(textos[0])
44 textos = sopa.find_all("meta", {"name" : "description"})
45 descripcion = str(textos[0])
46 cadena = '''
47 INSERT INTO webs VALUES(
48 NULL,
49 "'''+titulo.replace('"',"'")+'''",
50 "'''+descripcion.replace('"',"'")+'''",
51 "'''+url.replace('"',"'")+'''"
52 )
53 '''
54 print(cadena)
55 cursor.execute(cadena)
56 conexion.commit()
57 enlaces = sopa.find_all("a")
58 print(enlaces)
59 aleatorio = random.sample( enlaces, len(enlaces) )
60 print("barajo")
61 print(aleatorio)
62 for enlace in aleatorio:
63 if "http" in str(enlace):
64 print(enlace['href'])
65 time.sleep(5)
66 compruebaEnlaces(enlace['href'])
67 except:
68 print("Ha habido algun error")
69
70
71
72 compruebaEnlaces("https://elpais.com/")
73
74
75
76
77
78





Ejercicio del curso:

tiemporandom.py



/Comunicacion de red/crawler/tiemporandom.py

1 #pip install requests
2 #pip install bs4
3 #pip install lxml
4 import requests
5 from bs4 import BeautifulSoup
6 from requests.exceptions import HTTPError
7 import sqlite3 as db
8 import sys
9 import re
10 import time
11 import random
12
13 conexion = db.connect("buscador.sqlite")
14 cursor = conexion.cursor()
15 cursor.execute('''
16 CREATE TABLE IF NOT EXISTS "webs" (
17 "Identificador" INTEGER,
18 "titulo" TEXT,
19 "descripcion" TEXT,
20 "url" TEXT,
21 PRIMARY KEY("Identificador" AUTOINCREMENT)
22 );
23 ''')
24
25 def compruebaEnlaces(url):
26 urlstring = ""
27 if not "http" in url:
28 urlstring = "https://"+ url
29 else:
30 urlstring = url
31 try:
32 respuesta = requests.get(urlstring)
33 respuesta.raise_for_status()
34 except HTTPError as mierror:
35 print(mierror)
36 except Exception as errorpython:
37 print(errorpython)
38 else:
39 try:
40 respuesta.encoding ='utf-8'
41 sopa = BeautifulSoup(respuesta.text,'lxml')
42 textos = sopa.find_all("title")
43 titulo = str(textos[0])
44 textos = sopa.find_all("meta", {"name" : "description"})
45 descripcion = str(textos[0])
46 cadena = '''
47 INSERT INTO webs VALUES(
48 NULL,
49 "'''+titulo.replace('"',"'")+'''",
50 "'''+descripcion.replace('"',"'")+'''",
51 "'''+url.replace('"',"'")+'''"
52 )
53 '''
54 print(cadena)
55 cursor.execute(cadena)
56 conexion.commit()
57 enlaces = sopa.find_all("a")
58 print(enlaces)
59 aleatorio = random.sample( enlaces, len(enlaces) )
60 print("barajo")
61 print(aleatorio)
62 for enlace in aleatorio:
63 if "http" in str(enlace):
64 print(enlace['href'])
65 segundos = random.randint(2, 6)
66 time.sleep(segundos)
67 compruebaEnlaces(enlace['href'])
68 except:
69 print("Ha habido algun error")
70
71
72
73 compruebaEnlaces("https://elpais.com/")
74
75
76
77
78
79





Ejercicio del curso:







9.3.-crear un bot

Ejercicio del curso:

cursor en pantalla.py



/Comunicacion de red/crear un bot/cursor en pantalla.py

1 #pip install pyautogui
2 import pyautogui
3
4 print(pyautogui.position())
5





Ejercicio del curso:

escribir.py



/Comunicacion de red/crear un bot/escribir.py

1 #pip install pyautogui
2 import pyautogui
3 print(pyautogui.position())
4 pyautogui.moveTo(1821,56)
5





Ejercicio del curso:

click.py



/Comunicacion de red/crear un bot/click.py

1 #pip install pyautogui
2 import pyautogui
3 print(pyautogui.position())
4 pyautogui.moveTo(319,126)
5 pyautogui.click()





Ejercicio del curso:

doble click.py



/Comunicacion de red/crear un bot/doble click.py

1 #pip install pyautogui
2 import pyautogui
3 print(pyautogui.position())
4 pyautogui.moveTo(319,126)
5 pyautogui.tripleClick()
6 pyautogui.write('Hello world!')
7 pyautogui.press('enter')
8
9





Ejercicio del curso:

recursivo.py



/Comunicacion de red/crear un bot/recursivo.py

1 #pip install pyautogui
2 import pyautogui
3 import time
4 def buscar(texto):
5 print(pyautogui.position())
6 pyautogui.moveTo(319,126)
7 pyautogui.tripleClick()
8 pyautogui.write(texto)
9 pyautogui.press('enter')
10
11 busqueda = ['manzanas','peras','limones','uva','platano']
12
13 for busca in busqueda:
14 buscar(busca)
15 #y aquí hago cosas
16 time.sleep(4)
17
18





Ejercicio del curso:

chaty.py



/Comunicacion de red/crear un bot/chaty.py

1 #pip install pyautogui
2 import pyautogui
3 import time
4 def buscar(texto):
5 delay1 = 2
6 delay2 = 30
7 print(pyautogui.position())
8 #nuevo chat
9 pyautogui.moveTo(100,100,delay1/2)
10 pyautogui.click()
11 time.sleep(delay1)
12 #click en casilla de pregunta
13 pyautogui.moveTo(900,950,delay1/2)
14 pyautogui.click()
15 time.sleep(delay1)
16 #escribir pregunta
17 pyautogui.write(texto)
18 pyautogui.press('enter')
19 time.sleep(delay2)
20 #subir scroll
21 pyautogui.moveTo(1918,83,delay1/2)
22 pyautogui.click()
23 time.sleep(delay1)
24 #copiar texto
25 pyautogui.moveTo(1428,185,delay1/2)
26 pyautogui.click()
27 time.sleep(delay1)
28 #segunda pestaña
29 pyautogui.moveTo(348,12,delay1/2)
30 pyautogui.click()
31 time.sleep(delay1)
32 # estilos
33 pyautogui.moveTo(341,156,delay1/2)
34 pyautogui.click()
35 time.sleep(delay1)
36 # estilo 1
37 pyautogui.moveTo(378,425,delay1/2)
38 pyautogui.click()
39 time.sleep(delay1)
40 # final de pagina
41 pyautogui.moveTo(1857,1010,delay1/2)
42 pyautogui.click()
43 time.sleep(delay1)
44 # escribir
45 pyautogui.write(texto)
46 pyautogui.press('enter')
47 #estilos
48 pyautogui.moveTo(341,156,delay1/2)
49 pyautogui.click()
50 time.sleep(delay1)
51 #parrafo
52 pyautogui.moveTo(378,207,delay1/2)
53 pyautogui.click()
54 time.sleep(delay1)
55 # menu editar
56 pyautogui.moveTo(147,117,delay1/2)
57 pyautogui.click()
58 time.sleep(delay1)
59 # menu pegar
60 pyautogui.moveTo(171,297,delay1/2)
61 pyautogui.click()
62 time.sleep(delay1)
63 pyautogui.press('enter')
64 time.sleep(delay1)
65 # pestaña 1
66 pyautogui.moveTo(125,14,delay1/2)
67 pyautogui.click()
68 time.sleep(delay1)
69
70
71
72 busqueda = ['lenguajes de marcas','programacion de aplicaciones','bases de datos','sistemas informáticos','entornos de desarrollo']
73
74 for busca in busqueda:
75 buscar(busca)
76
77
78





9.4.-flask

Ejercicio del curso:

servidor.py



/Comunicacion de red/flask/servidor.py

1 import flask
2
3





Ejercicio del curso:

ruta.py



/Comunicacion de red/flask/ruta.py

1 from flask import Flask
2 app = Flask(__name__)
3
4 @app.route('/')
5 def hello_world():
6 cadena = ""
7 for i in range(0,10):
8 cadena = cadena + '<h1>Hello, World!</h1>'
9 return cadena





Ejercicio del curso:

copia (10).py



/Comunicacion de red/flask/ copia (10).py

1 from flask import Flask
2 from flask import request
3 from flask import render_template
4 import sqlite3 as db
5 import sys
6 app = Flask(__name__)
7
8
9 @app.route('/')
10 def inicio():
11 return render_template("index.html")
12
13 @app.route('/busca', methods=['GET', 'POST'])
14 def prueba():
15
16 loquebusco = request.form.get('criterio')
17 conexion = db.connect("buscador.sqlite")
18 cursor = conexion.cursor()
19 cursor.execute('''
20 SELECT * FROM webs WHERE titulo LIKE "%'''+loquebusco+'''%"
21 ''')
22 datos = cursor.fetchall()
23 cadena = ""
24 for i in datos:
25 cadena += "<h3>"+i[1]+"</h3><h4>"+i[2]+"</h4><p>"+i[3]+"</p>"
26
27
28 conexion.commit()
29 return render_template("busca.html",contenido=cadena)
30





Ejercicio del curso:

copia (11).py



/Comunicacion de red/flask/ copia (11).py

1 from flask import Flask
2 from flask import request
3 from flask import render_template
4 import sqlite3 as db
5 import sys
6 from bs4 import BeautifulSoup
7 app = Flask(__name__)
8
9
10 @app.route('/')
11 def inicio():
12 return render_template("index.html")
13
14 @app.route('/busca', methods=['GET', 'POST'])
15 def prueba():
16
17 loquebusco = request.form.get('criterio')
18 conexion = db.connect("buscador.sqlite")
19 cursor = conexion.cursor()
20 cursor.execute('''
21 SELECT * FROM webs WHERE titulo LIKE "%'''+loquebusco+'''%"
22 ''')
23 datos = cursor.fetchall()
24 cadena = ""
25 for i in datos:
26 soup = BeautifulSoup(i[1], 'html.parser')
27 titulo = soup.title.string
28 soup = BeautifulSoup(i[2], 'html.parser')
29 meta_tag = soup.find('meta', {'name': 'description'})
30 descripcion = meta_tag.get('content')
31 cadena += "<h3>"+titulo+"</h3><h4>"+descripcion+"</h4><p><a href='"+i[3]+"'>"+i[3]+"</a></p>"
32
33
34 conexion.commit()
35 return render_template("busca.html",contenido=cadena)
36





Ejercicio del curso:

copia (2).py



/Comunicacion de red/flask/ copia (2).py

1 from flask import Flask
2 app = Flask(__name__)
3
4 @app.route('/')
5 def inicio():
6 return "Esta es la página principal"
7
8 @app.route('/sobremi')
9 def sobremi():
10 return "Esta es la página sobre mi"
11
12 @app.route('/proyectos')
13 def proyectos():
14 return "Esta es la página de proyectos"
15
16 @app.route('/contacto')
17 def contacto():
18 return "Esta es la página de contacto"





Ejercicio del curso:

copia (3).py



/Comunicacion de red/flask/ copia (3).py

1 from flask import Flask
2 app = Flask(__name__)
3
4 cabecera = '''
5 <!doctype html>
6 <html>
7 <head>
8 </head>
9 <body>
10 <h1>La web de Jose Vicente</h1>
11 <nav>
12 <ul>
13 <li><a href="/">Inicio</a></li>
14 <li><a href="/sobremi">Sobre mi</a></li>
15 <li><a href="/proyectos">Proyectos</a></li>
16 <li><a href="/contacto">Contacto</a></li>
17 </ul>
18 </nav>
19 '''
20
21 @app.route('/')
22 def inicio():
23 return cabecera+"Esta es la página principal"
24
25 @app.route('/sobremi')
26 def sobremi():
27 return cabecera+"Esta es la página sobre mi"
28
29 @app.route('/proyectos')
30 def proyectos():
31 return cabecera+"Esta es la página de proyectos"
32
33 @app.route('/contacto')
34 def contacto():
35 return cabecera+"Esta es la página de contacto"





Ejercicio del curso:

copia (4).py



/Comunicacion de red/flask/ copia (4).py

1 from flask import Flask
2 from flask import request
3 app = Flask(__name__)
4
5 cabecera = '''
6 <!doctype html>
7 <html>
8 <head>
9 </head>
10 <body>
11 <h1>La web de Jose Vicente</h1>
12 <nav>
13 <ul>
14 <li><a href="/">Inicio</a></li>
15 <li><a href="/sobremi">Sobre mi</a></li>
16 <li><a href="/proyectos">Proyectos</a></li>
17 <li><a href="/contacto">Contacto</a></li>
18 </ul>
19 </nav>
20 <form method="POST" action="prueba">
21 <input type="text" name="edad">
22 <input type="submit">
23 </form>
24 '''
25
26 @app.route('/')
27 def inicio():
28 return cabecera+"Esta es la página principal"
29
30 @app.route('/sobremi')
31 def sobremi():
32 return cabecera+"Esta es la página sobre mi"
33
34 @app.route('/proyectos')
35 def proyectos():
36 return cabecera+"Esta es la página de proyectos"
37
38 @app.route('/contacto')
39 def contacto():
40 return cabecera+"Esta es la página de contacto"
41
42 @app.route('/prueba', methods=['GET', 'POST'])
43 def prueba():
44 edad = request.form.get('edad')
45 return "el doble de tu edad es de: "+str(int(edad)*2)
46





Ejercicio del curso:

copia (5).py



/Comunicacion de red/flask/ copia (5).py

1 from flask import Flask
2 from flask import request
3 app = Flask(__name__)
4
5 cabecera = '''
6 <!doctype html>
7 <html>
8 <head>
9 </head>
10 <body>
11 <h1>Buscador</h1>
12
13 <form method="POST" action="prueba">
14 <input type="text" name="busca">
15 <input type="submit">
16 </form>
17 '''
18
19 @app.route('/')
20 def inicio():
21 return cabecera+"Esta es la página principal"
22
23
24
25 @app.route('/prueba', methods=['GET', 'POST'])
26 def prueba():
27 loquebusco = request.form.get('busca')
28 return "Voy a buscar: "+loquebusco
29





Ejercicio del curso:

copia (6).py



/Comunicacion de red/flask/ copia (6).py

1 from flask import Flask
2 from flask import request
3 from flask import render_template
4 app = Flask(__name__)
5
6
7 @app.route('/')
8 def inicio():
9 return render_template("index.html")
10
11
12





Ejercicio del curso:

copia (7).py



/Comunicacion de red/flask/ copia (7).py

1 from flask import Flask
2 from flask import request
3 from flask import render_template
4 app = Flask(__name__)
5
6
7 @app.route('/')
8 def inicio():
9 return render_template("index.html")
10
11 @app.route('/busca', methods=['GET', 'POST'])
12 def prueba():
13 loquebusco = request.form.get('criterio')
14 return "Voy a buscar: "+loquebusco
15





Ejercicio del curso:

copia (8).py



/Comunicacion de red/flask/ copia (8).py

1 from flask import Flask
2 from flask import request
3 from flask import render_template
4 app = Flask(__name__)
5
6
7 @app.route('/')
8 def inicio():
9 return render_template("index.html")
10
11 @app.route('/busca', methods=['GET', 'POST'])
12 def prueba():
13 loquebusco = request.form.get('criterio')
14 return render_template("busca.html",contenido="variable que viene desde Python")
15





Ejercicio del curso:

copia (9).py



/Comunicacion de red/flask/ copia (9).py

1 from flask import Flask
2 from flask import request
3 from flask import render_template
4 import sqlite3 as db
5 import sys
6 app = Flask(__name__)
7
8
9 @app.route('/')
10 def inicio():
11 return render_template("index.html")
12
13 @app.route('/busca', methods=['GET', 'POST'])
14 def prueba():
15
16 loquebusco = request.form.get('criterio')
17 conexion = db.connect("buscador.sqlite")
18 cursor = conexion.cursor()
19 cursor.execute('''
20 SELECT * FROM webs WHERE titulo LIKE "%'''+loquebusco+'''%"
21 ''')
22 datos = cursor.fetchall()
23
24 for i in datos:
25 print("Identificador:",i[0],"\n titulo:",i[1],"\n descripcion: ",i[2],"\n url:",i[3])
26
27 conexion.commit()
28 return render_template("busca.html",contenido="variable que viene desde Python")
29





Ejercicio del curso:

copia.py



/Comunicacion de red/flask/ copia.py

1 from flask import Flask
2 app = Flask(__name__)
3
4 @app.route('/')
5 def hello_world():
6 cadena = ""
7 for i in range(0,10):
8 cadena = cadena + '<h1>Hola mundo!</h1>'
9 return cadena





Ejercicio del curso:



/Comunicacion de red/flask/app.py

1 from flask import Flask
2 from flask import request
3 from flask import render_template
4 import sqlite3 as db
5 import sys
6 from bs4 import BeautifulSoup
7 app = Flask(__name__)
8
9
10
11 @app.route('/')
12 def inicio():
13 return render_template("index.html")
14
15 @app.route('/busca', methods=['GET', 'POST'])
16 def prueba():
17
18 loquebusco = request.form.get('criterio')
19 conexion = db.connect("buscador.sqlite")
20 cursor = conexion.cursor()
21 cursor.execute('''
22 SELECT * FROM webs WHERE titulo LIKE "%'''+loquebusco+'''%"
23 ''')
24 datos = cursor.fetchall()
25 cadena = ""
26 for i in datos:
27 soup = BeautifulSoup(i[1], 'html.parser')
28 titulo = soup.title.string
29 soup = BeautifulSoup(i[2], 'html.parser')
30 meta_tag = soup.find('meta', {'name': 'description'})
31 descripcion = meta_tag.get('content')
32 cadena += "<h3>"+titulo+"</h3><h4>"+descripcion+"</h4><p><a href='"+i[3]+"'>"+i[3]+"</a></p>"
33
34
35 conexion.commit()
36 return render_template("busca.html",contenido=cadena)
37
38 if __name__ == '__main__':
39 app.run(host='0.0.0.0', port=80)





Ejercicio del curso:



9.4.1.-templates

Ejercicio del curso:



/Comunicacion de red/flask/templates/busca.html

1 <!doctype html>
2 <html>
3 <head>
4 <style>
5 body{
6 font-family:sans-serif;
7 padding:50px;
8 text-align:center;
9 }
10 h3{
11 font-size:14px;
12 text-align:left;
13 border-top:1px solid grey;
14 padding-top:10px;
15 }
16 h4{
17 font-size:12px;
18 text-align:left;
19 }
20 a{text-align:left;}
21 </style>
22 </head>
23 <body>
24 <h1>Buscador</h1>
25 {% block contenido %}
26 {{contenido | safe}}
27 {% endblock %}
28 </body>
29 </html>





Ejercicio del curso:



/Comunicacion de red/flask/templates/estilo.css






Ejercicio del curso:



/Comunicacion de red/flask/templates/index.html

1 <!doctype html>
2 <html>
3 <head>
4 <style>
5 body{
6 font-family:sans-serif;
7 padding:50px;
8 text-align:center;
9 }
10 </style>
11 </head>
12 <body>
13 <h1>Buscador</h1>
14 <form action="/busca" method="POST">
15 <input type="text" name="criterio">
16 </form>
17 </body>
18 </html>





9.4.2.-__pycache__

Ejercicio del curso:

311.pyc







9.5.-Ubuntu

Ejercicio del curso:

instalar python.txt



/Comunicacion de red/Ubuntu/instalar python.txt

1 sudo apt-get install python
2 sudo apt-get install python3-pip





Ejercicio del curso:

instalar sqlite.txt



/Comunicacion de red/Ubuntu/instalar sqlite.txt

1 sudo apt-get install sqlite





Ejercicio del curso:

pip.txt



/Comunicacion de red/Ubuntu/pip.txt

1 pip install flask
2 pip install bs4





Ejercicio del curso:

navegar.txt



/Comunicacion de red/Ubuntu/navegar.txt

1 ls
2 cd flask
3 ls
4 python app.py
5 sudo apt-get install python3-bs4
6 sudo apt-get install python3-flask





10.-Graficas

10.1.-matplotlib

Ejercicio del curso:

importacion.py



/Graficas/matplotlib/importacion.py

1 #pip install matplotlib
2 import matplotlib as plot





Ejercicio del curso:

barrs.py



/Graficas/matplotlib/barrs.py

1 #pip install matplotlib
2 import matplotlib.pyplot as plot
3
4 lenguajes = ['Python', 'C++', 'Java', 'PHP', 'Javascript']
5 posicion = [20,8,6,4,2]
6
7 plot.bar(lenguajes, posicion, align='center', alpha=0.5)
8 plot.ylabel('Uso de lenguajes de programación')
9 plot.title('Lenguajes de programación')
10
11 plot.show()





Ejercicio del curso:

importacion.py



/Graficas/matplotlib/importacion.py

1 #pip install matplotlib
2 import matplotlib as plot





Ejercicio del curso:

guardar.py



/Graficas/matplotlib/guardar.py

1 #pip install matplotlib
2 import matplotlib.pyplot as plot
3
4 lenguajes = ['Python', 'C++', 'Java', 'PHP', 'Javascript']
5 posicion = [20,8,6,4,2]
6
7 plot.bar(lenguajes, posicion, align='center', alpha=0.5)
8 plot.ylabel('Uso de lenguajes de programación')
9 plot.title('Lenguajes de programación')
10
11 plot.savefig("grafica.png")





Ejercicio del curso:

colores.py



/Graficas/matplotlib/colores.py

1 #pip install matplotlib
2 import matplotlib.pyplot as plot
3
4 lenguajes = ['Python', 'C++', 'Java', 'PHP', 'Javascript']
5 posicion = [20,8,6,4,2]
6
7 plot.bar(lenguajes, posicion, align='center', color=['red', 'green', 'blue', 'yellow', 'cyan'])
8 plot.ylabel('Uso de lenguajes de programación')
9 plot.title('Lenguajes de programación')
10
11 plot.show()





Ejercicio del curso:

coloresparametricos.py



/Graficas/matplotlib/coloresparametricos.py

1 #pip install matplotlib
2 import matplotlib.pyplot as plot
3
4 lenguajes = ['Python', 'C++', 'Java', 'PHP', 'Javascript']
5 posicion = [20,8,6,4,2]
6
7 colores = ['red', 'green', 'blue', 'yellow', 'cyan']
8
9 plot.bar(lenguajes, posicion, align='center', color=colores)
10 plot.ylabel('Uso de lenguajes de programación')
11 plot.title('Lenguajes de programación')
12
13 plot.show()





Ejercicio del curso:

coloresparametricos.py



/Graficas/matplotlib/coloresparametricos.py

1 #pip install matplotlib
2 import matplotlib.pyplot as plot
3
4 lenguajes = ['Python', 'C++', 'Java', 'PHP', 'Javascript']
5 posicion = [20,8,6,4,2]
6
7 colores = ['#ff0000', '#00ff00', '#0000ff', 'yellow', 'cyan']
8
9 plot.bar(lenguajes, posicion, align='center', color=colores)
10 plot.ylabel('Uso de lenguajes de programación')
11 plot.title('Lenguajes de programación')
12
13 plot.show()





Ejercicio del curso:

coloresparametricos.py



/Graficas/matplotlib/coloresparametricos.py

1 #pip install matplotlib
2 import matplotlib.pyplot as plot
3 import random as rand
4
5 def rgb_to_hex(r, g, b):
6 return '#{:02x}{:02x}{:02x}'.format(r, g, b)
7
8 lenguajes = ['Python', 'C++', 'Java', 'PHP', 'Javascript']
9 posicion = [20,8,6,4,2]
10
11 colores = []
12 for i in range(0,50):
13 rojo = rand.randint(0, 255)
14 verde = rand.randint(0, 255)
15 azul = rand.randint(0, 255)
16 colores.append(rgb_to_hex(rojo, verde, azul))
17
18 plot.bar(lenguajes, posicion, align='center', color=colores)
19 plot.ylabel('Uso de lenguajes de programación')
20 plot.title('Lenguajes de programación')
21
22 plot.show()





Ejercicio del curso:

graficatarta.py



/Graficas/matplotlib/graficatarta.py

1 #pip install matplotlib
2 import matplotlib.pyplot as plot
3
4 numeros = [35, 25, 25, 15]
5
6 plot.pie(numeros)
7 plot.show()





Ejercicio del curso:

graficatarta.py



/Graficas/matplotlib/graficatarta.py

1 #pip install matplotlib
2 import matplotlib.pyplot as plot
3
4 numeros = [35, 25, 25, 15]
5 etiquetas = ["Python","C++","PHP","Javascript"]
6 plot.pie(numeros,labels = etiquetas)
7 plot.show()





10.2.-guardararchivo

Ejercicio del curso:

guardaarchivo.py



/Graficas/guardararchivo/guardaarchivo.py

1 import requests
2
3 url = 'https://jocarsa.com/log/registros.csv'
4 contenido = requests.get(url, allow_redirects=True)
5
6 open('registros.csv', 'wb').write(contenido.content)





Ejercicio del curso:

creasqlite.py



/Graficas/guardararchivo/creasqlite.py

1 import requests
2 import sqlite3
3 import pandas as pd
4
5 #Descarga de archivo
6 ##url = 'https://jocarsa.com/log/registros.csv'
7 ##contenido = requests.get(url, allow_redirects=True)
8 ##open('registros.csv', 'wb').write(contenido.content)
9 #Creación de base de datos
10 conn = sqlite3.connect('registros.sqlite')
11 cursor = conn.cursor()
12 cursor.execute('''
13 CREATE TABLE IF NOT EXISTS "registros" (
14 "Identificador" INTEGER,
15 "epoch" TEXT,
16 "anio" TEXT,
17 "mes" TEXT,
18 "dia" TEXT,
19 "hora" TEXT,
20 "minuto" TEXT,
21 "segundo" TEXT,
22 "ip" TEXT,
23 "navegador" TEXT,
24 "pagina" TEXT,
25 "post" TEXT,
26 "get" TEXT,
27 "sesion" TEXT,
28 PRIMARY KEY("Identificador" AUTOINCREMENT)
29 );
30 ''')
31
32 # load the data into a Pandas DataFrame
33 registros = pd.read_csv('registros.csv')
34 # write the data to a sqlite table
35 registros.to_sql('registros', conn, if_exists='append', index = False)
36
37
38
39
40
41
42





Ejercicio del curso:

creasqlitesinerror.py



/Graficas/guardararchivo/creasqlitesinerror.py

1 import requests
2 import sqlite3
3 import pandas as pd
4
5 #Descarga de archivo
6 url = 'https://jocarsa.com/log/registros.csv'
7 contenido = requests.get(url, allow_redirects=True)
8 open('registros.csv', 'wb').write(contenido.content)
9 #Creación de base de datos
10 conn = sqlite3.connect('registros.sqlite')
11 cursor = conn.cursor()
12 cursor.execute('''
13 CREATE TABLE IF NOT EXISTS "registros" (
14 "Identificador" INTEGER,
15 "epoch" TEXT,
16 "anio" TEXT,
17 "mes" TEXT,
18 "dia" TEXT,
19 "hora" TEXT,
20 "minuto" TEXT,
21 "segundo" TEXT,
22 "ip" TEXT,
23 "navegador" TEXT,
24 "pagina" TEXT,
25 "post" TEXT,
26 "get" TEXT,
27 "sesion" TEXT,
28 PRIMARY KEY("Identificador" AUTOINCREMENT)
29 );
30 ''')
31
32 # load the data into a Pandas DataFrame
33 registros = pd.read_csv('registros.csv', usecols=["epoch", "anio","mes","dia","hora","minuto","segundo","ip","navegador","pagina","post","get","sesion"], low_memory=False)
34
35 # write the data to a sqlite table
36 registros.to_sql('registros', conn, if_exists='append', index = False)
37
38
39
40
41
42
43





Ejercicio del curso:

borrar.py



/Graficas/guardararchivo/borrar.py

1 import requests
2 import sqlite3
3 import pandas as pd
4
5 #Descarga de archivo
6 url = 'https://jocarsa.com/log/registros.csv'
7 contenido = requests.get(url, allow_redirects=True)
8 open('registros.csv', 'wb').write(contenido.content)
9 #Creación de base de datos
10 conn = sqlite3.connect('registros.sqlite')
11 cursor = conn.cursor()
12 cursor.execute('''
13 CREATE TABLE IF NOT EXISTS "registros" (
14 "Identificador" INTEGER,
15 "epoch" TEXT,
16 "anio" TEXT,
17 "mes" TEXT,
18 "dia" TEXT,
19 "hora" TEXT,
20 "minuto" TEXT,
21 "segundo" TEXT,
22 "ip" TEXT,
23 "navegador" TEXT,
24 "pagina" TEXT,
25 "post" TEXT,
26 "get" TEXT,
27 "sesion" TEXT,
28 PRIMARY KEY("Identificador" AUTOINCREMENT)
29 );
30 ''')
31 cursor.execute('''
32 DELETE FROM registros;
33 ''')
34
35 # load the data into a Pandas DataFrame
36 registros = pd.read_csv('registros.csv', usecols=["epoch", "anio","mes","dia","hora","minuto","segundo","ip","navegador","pagina","post","get","sesion"], low_memory=False)
37
38 # write the data to a sqlite table
39 registros.to_sql('registros', conn, if_exists='append', index = False)
40
41
42
43
44
45
46





Ejercicio del curso:

visitantes cada hora.py



/Graficas/guardararchivo/visitantes cada hora.py

1 import requests
2 import sqlite3
3 import pandas as pd
4
5 #Descarga de archivo
6 url = 'https://jocarsa.com/log/registros.csv'
7 contenido = requests.get(url, allow_redirects=True)
8 open('registros.csv', 'wb').write(contenido.content)
9 #Creación de base de datos
10 conn = sqlite3.connect('registros.sqlite')
11 cursor = conn.cursor()
12 cursor.execute('''
13 CREATE TABLE IF NOT EXISTS "registros" (
14 "Identificador" INTEGER,
15 "epoch" TEXT,
16 "anio" TEXT,
17 "mes" TEXT,
18 "dia" TEXT,
19 "hora" TEXT,
20 "minuto" TEXT,
21 "segundo" TEXT,
22 "ip" TEXT,
23 "navegador" TEXT,
24 "pagina" TEXT,
25 "post" TEXT,
26 "get" TEXT,
27 "sesion" TEXT,
28 PRIMARY KEY("Identificador" AUTOINCREMENT)
29 );
30 ''')
31 cursor.execute('''
32 DELETE FROM registros;
33 ''')
34
35 # load the data into a Pandas DataFrame
36 registros = pd.read_csv('registros.csv', usecols=["epoch", "anio","mes","dia","hora","minuto","segundo","ip","navegador","pagina","post","get","sesion"], low_memory=False)
37
38 # write the data to a sqlite table
39 registros.to_sql('registros', conn, if_exists='append', index = False)
40
41 # Leer registros
42
43 cursor.execute('''
44 SELECT COUNT(hora),hora
45 FROM registros
46 GROUP BY CAST(hora as decimal)
47 ''')
48 datos = cursor.fetchall()
49
50 for i in datos:
51 print("Visitas:",i[0],"\t hora:",i[1])
52
53 conn.commit()
54
55
56
57
58





Ejercicio del curso:

grafica.py



/Graficas/guardararchivo/grafica.py

1 import requests
2 import sqlite3
3 import pandas as pd
4 import matplotlib.pyplot as plot
5
6 #Descarga de archivo
7 url = 'https://jocarsa.com/log/registros.csv'
8 contenido = requests.get(url, allow_redirects=True)
9 open('registros.csv', 'wb').write(contenido.content)
10 #Creación de base de datos
11 conn = sqlite3.connect('registros.sqlite')
12 cursor = conn.cursor()
13 cursor.execute('''
14 CREATE TABLE IF NOT EXISTS "registros" (
15 "Identificador" INTEGER,
16 "epoch" TEXT,
17 "anio" TEXT,
18 "mes" TEXT,
19 "dia" TEXT,
20 "hora" TEXT,
21 "minuto" TEXT,
22 "segundo" TEXT,
23 "ip" TEXT,
24 "navegador" TEXT,
25 "pagina" TEXT,
26 "post" TEXT,
27 "get" TEXT,
28 "sesion" TEXT,
29 PRIMARY KEY("Identificador" AUTOINCREMENT)
30 );
31 ''')
32 cursor.execute('''
33 DELETE FROM registros;
34 ''')
35
36 # load the data into a Pandas DataFrame
37 registros = pd.read_csv('registros.csv', usecols=["epoch", "anio","mes","dia","hora","minuto","segundo","ip","navegador","pagina","post","get","sesion"], low_memory=False)
38
39 # write the data to a sqlite table
40 registros.to_sql('registros', conn, if_exists='append', index = False)
41
42 # Leer registros
43
44 cursor.execute('''
45 SELECT COUNT(hora),hora
46 FROM registros
47 GROUP BY CAST(hora as decimal)
48 ''')
49 datos = cursor.fetchall()
50
51 horas = []
52 visitas = []
53
54 for i in datos:
55 print("Visitas:",i[0],"\t hora:",i[1])
56 if i[1] is not None:
57 horas.append(i[0])
58 visitas.append(i[1])
59
60
61 conn.commit()
62
63 print(horas)
64 print(visitas)
65
66 plot.bar(visitas, horas, align='center')
67 plot.ylabel('Horas')
68 plot.title('Visitantes cada hora')
69
70 plot.show()
71
72
73
74





Ejercicio del curso:

graficafiltrada.py



/Graficas/guardararchivo/graficafiltrada.py

1 import requests
2 import sqlite3
3 import pandas as pd
4 import matplotlib.pyplot as plot
5
6 #Descarga de archivo
7 url = 'https://jocarsa.com/log/registros.csv'
8 contenido = requests.get(url, allow_redirects=True)
9 open('registros.csv', 'wb').write(contenido.content)
10 #Creación de base de datos
11 conn = sqlite3.connect('registros.sqlite')
12 cursor = conn.cursor()
13 cursor.execute('''
14 CREATE TABLE IF NOT EXISTS "registros" (
15 "Identificador" INTEGER,
16 "epoch" TEXT,
17 "anio" TEXT,
18 "mes" TEXT,
19 "dia" TEXT,
20 "hora" TEXT,
21 "minuto" TEXT,
22 "segundo" TEXT,
23 "ip" TEXT,
24 "navegador" TEXT,
25 "pagina" TEXT,
26 "post" TEXT,
27 "get" TEXT,
28 "sesion" TEXT,
29 PRIMARY KEY("Identificador" AUTOINCREMENT)
30 );
31 ''')
32 cursor.execute('''
33 DELETE FROM registros;
34 ''')
35
36 # load the data into a Pandas DataFrame
37 registros = pd.read_csv('registros.csv', usecols=["epoch", "anio","mes","dia","hora","minuto","segundo","ip","navegador","pagina","post","get","sesion"], low_memory=False)
38
39 # write the data to a sqlite table
40 registros.to_sql('registros', conn, if_exists='append', index = False)
41
42 # Leer registros
43
44 cursor.execute('''
45 SELECT COUNT(hora),hora
46 FROM registros
47 WHERE
48
49 navegador NOT LIKE '%bot%'
50 AND
51 navegador NOT LIKE '%spider%'
52 AND
53 navegador NOT LIKE '%crawl%'
54
55 GROUP BY CAST(hora as decimal)
56 ''')
57 datos = cursor.fetchall()
58
59 horas = []
60 visitas = []
61
62 for i in datos:
63 print("Visitas:",i[0],"\t hora:",i[1])
64 if i[1] is not None:
65 horas.append(i[0])
66 visitas.append(i[1])
67
68
69 conn.commit()
70
71 print(horas)
72 print(visitas)
73
74 plot.bar(visitas, horas, align='center')
75 plot.ylabel('Horas')
76 plot.title('Visitantes cada hora')
77
78 plot.show()
79
80
81
82





Ejercicio del curso:

tartabots.py



/Graficas/guardararchivo/tartabots.py

1 import requests
2 import sqlite3
3 import pandas as pd
4 import matplotlib.pyplot as plot
5
6 #Descarga de archivo
7 url = 'https://jocarsa.com/log/registros.csv'
8 contenido = requests.get(url, allow_redirects=True)
9 open('registros.csv', 'wb').write(contenido.content)
10 #Creación de base de datos
11 conn = sqlite3.connect('registros.sqlite')
12 cursor = conn.cursor()
13 cursor.execute('''
14 CREATE TABLE IF NOT EXISTS "registros" (
15 "Identificador" INTEGER,
16 "epoch" TEXT,
17 "anio" TEXT,
18 "mes" TEXT,
19 "dia" TEXT,
20 "hora" TEXT,
21 "minuto" TEXT,
22 "segundo" TEXT,
23 "ip" TEXT,
24 "navegador" TEXT,
25 "pagina" TEXT,
26 "post" TEXT,
27 "get" TEXT,
28 "sesion" TEXT,
29 PRIMARY KEY("Identificador" AUTOINCREMENT)
30 );
31 ''')
32 cursor.execute('''
33 DELETE FROM registros;
34 ''')
35
36 # load the data into a Pandas DataFrame
37 registros = pd.read_csv('registros.csv', usecols=["epoch", "anio","mes","dia","hora","minuto","segundo","ip","navegador","pagina","post","get","sesion"], low_memory=False)
38
39 # write the data to a sqlite table
40 registros.to_sql('registros', conn, if_exists='append', index = False)
41
42 # Leer registros
43
44 cursor.execute('''
45 SELECT COUNT(navegador)
46 FROM registros
47 WHERE
48
49 navegador NOT LIKE '%bot%'
50 AND
51 navegador NOT LIKE '%spider%'
52 AND
53 navegador NOT LIKE '%crawl%'
54
55
56 ''')
57 datos = cursor.fetchall()
58
59 numeros = []
60
61 for i in datos:
62 numeros.append(i[0])
63
64 cursor.execute('''
65 SELECT COUNT(navegador)
66 FROM registros
67 WHERE
68
69 navegador LIKE '%bot%'
70 OR
71 navegador LIKE '%spider%'
72 OR
73 navegador LIKE '%crawl%'
74
75
76
77 ''')
78 datos = cursor.fetchall()
79
80
81
82 for i in datos:
83 numeros.append(i[0])
84
85
86
87 conn.commit()
88
89
90 etiquetas = ["Humanos","Bots"]
91 plot.pie(numeros,labels = etiquetas)
92 plot.show()
93
94
95
96





Ejercicio del curso:



Ejercicio del curso:











10.3.-subplots

Ejercicio del curso:

subplots.py



/Graficas/subplots/subplots.py

1 import matplotlib.pyplot as plt
2 import numpy as np
3
4 #plot 1:
5 x = np.array([0, 1, 2, 3])
6 y = np.array([3, 8, 1, 10])
7
8 plt.subplot(2, 2, 1)
9 plt.plot(x,y)
10
11 #plot 2:
12 x = np.array([0, 1, 2, 3])
13 y = np.array([10, 20, 30, 40])
14
15 plt.subplot(2, 2, 2)
16 plt.plot(x,y)
17
18 #plot 3:
19 x = np.array([0, 1, 2, 3])
20 y = np.array([3, 8, 1, 10])
21
22 plt.subplot(2, 2, 3)
23 plt.plot(x,y)
24
25 #plot 4:
26 x = np.array([0, 1, 2, 3])
27 y = np.array([10, 20, 30, 40])
28
29 plt.subplot(2, 2, 4)
30 plt.plot(x,y)
31
32 plt.show()





10.4.-numpy

Ejercicio del curso:

comparacion.html



/Graficas/numpy/comparacion.html

1 <!doctype html>
2 <html>
3 <head></head>
4 <body>
5 <script>
6 var inicio = new Date()
7 var einicio = inicio.now
8 var n = 1.0000000064
9 for(var i = 0;i<100000000;i++){
10 n *= 1.00000000065
11 }
12 console.log(n)
13 var final = new Date()
14 var efinal = inicio.now
15 console.log(final-inicio)
16 </script>
17 </body>
18 </html>





Ejercicio del curso:

pruebavelocidad.py



/Graficas/numpy/pruebavelocidad.py

1 import time
2
3 einicio = int(time.time())
4 n = 1.0000000064
5 for i in range (0,100000000):
6 n *= 1.00000000065
7
8 efinal = int(time.time())
9 print(efinal-einicio)





Ejercicio del curso:

numpy.py



/Graficas/numpy/numpy.py

1 import numpy





Ejercicio del curso:

numpy arrays.py



/Graficas/numpy/numpy arrays.py

1 import numpy as np
2
3 arr = np.array([1, 2, 3, 4, 5])
4
5 print(arr)
6
7 print(type(arr))





Ejercicio del curso:

numpy arrays 2d.py



/Graficas/numpy/numpy arrays 2d.py

1 import numpy as np
2
3 arr = np.array([[1, 2, 3], [4, 5, 6]])
4
5 print(arr)





10.5.-panel de control

Ejercicio del curso:

panel.py



/Graficas/panel de control/panel.py

1 import matplotlib.pyplot as plt
2 import numpy as np
3
4
5 #plot 1:
6 x = np.array([0, 1, 2, 3])
7 y = np.array([3, 8, 1, 10])
8
9 plt.subplot(2, 2, 1)
10 plt.plot(x,y)
11
12 #plot 2:
13 x = np.array([0, 1, 2, 3])
14 y = np.array([10, 20, 30, 40])
15
16 plt.subplot(2, 2, 2)
17 plt.plot(x,y)
18
19 #plot 3:
20 x = np.array([0, 1, 2, 3])
21 y = np.array([3, 8, 1, 10])
22
23 plt.subplot(2, 2, 3)
24 plt.plot(x,y)
25
26 #plot 4:
27 x = np.array([0, 1, 2, 3])
28 y = np.array([10, 20, 30, 40])
29
30 plt.subplot(2, 2, 4)
31 plt.plot(x,y)
32
33 plt.show()





Ejercicio del curso:

panel.py



/Graficas/panel de control/panel.py

1 import requests
2 import sqlite3
3 import pandas as pd
4 import matplotlib.pyplot as plot
5 import numpy as np
6
7
8 #plot 1:
9 x = np.array([0, 1, 2, 3])
10 y = np.array([3, 8, 1, 10])
11
12 plot.subplot(2, 2, 1)
13 plot.plot(x,y)
14
15 #plot 2:
16 x = np.array([0, 1, 2, 3])
17 y = np.array([10, 20, 30, 40])
18
19 plot.subplot(2, 2, 2)
20 plot.plot(x,y)
21
22 #plot 3:
23 x = np.array([0, 1, 2, 3])
24 y = np.array([3, 8, 1, 10])
25
26 plot.subplot(2, 2, 3)
27 plot.plot(x,y)
28
29 #plot 4:
30 x = np.array([0, 1, 2, 3])
31 y = np.array([10, 20, 30, 40])
32
33 plot.subplot(2, 2, 4)
34 plot.plot(x,y)
35
36 plot.show()





Ejercicio del curso:

panel.py



/Graficas/panel de control/panel.py

1 import requests
2 import sqlite3
3 import pandas as pd
4 import matplotlib.pyplot as plot
5 import numpy as np
6
7 #Descarga de archivo
8 url = 'https://jocarsa.com/log/registros.csv'
9 contenido = requests.get(url, allow_redirects=True)
10 open('registros.csv', 'wb').write(contenido.content)
11 #Creación de base de datos
12 conn = sqlite3.connect('registros.sqlite')
13 cursor = conn.cursor()
14 cursor.execute('''
15 CREATE TABLE IF NOT EXISTS "registros" (
16 "Identificador" INTEGER,
17 "epoch" TEXT,
18 "anio" TEXT,
19 "mes" TEXT,
20 "dia" TEXT,
21 "hora" TEXT,
22 "minuto" TEXT,
23 "segundo" TEXT,
24 "ip" TEXT,
25 "navegador" TEXT,
26 "pagina" TEXT,
27 "post" TEXT,
28 "get" TEXT,
29 "sesion" TEXT,
30 PRIMARY KEY("Identificador" AUTOINCREMENT)
31 );
32 ''')
33 cursor.execute('''
34 DELETE FROM registros;
35 ''')
36
37 # load the data into a Pandas DataFrame
38 registros = pd.read_csv('registros.csv', usecols=["epoch", "anio","mes","dia","hora","minuto","segundo","ip","navegador","pagina","post","get","sesion"], low_memory=False)
39
40 # write the data to a sqlite table
41 registros.to_sql('registros', conn, if_exists='append', index = False)
42
43 #plot 1:#####################################################
44 cursor.execute('''
45 SELECT COUNT(navegador)
46 FROM registros
47 WHERE
48
49 navegador NOT LIKE '%bot%'
50 AND
51 navegador NOT LIKE '%spider%'
52 AND
53 navegador NOT LIKE '%crawl%'
54
55
56 ''')
57 datos = cursor.fetchall()
58 numeros = []
59 for i in datos:
60 numeros.append(i[0])
61 cursor.execute('''
62 SELECT COUNT(navegador)
63 FROM registros
64 WHERE
65
66 navegador LIKE '%bot%'
67 OR
68 navegador LIKE '%spider%'
69 OR
70 navegador LIKE '%crawl%'
71 ''')
72 datos = cursor.fetchall()
73 for i in datos:
74 numeros.append(i[0])
75 conn.commit()
76 etiquetas = ["Humanos","Bots"]
77 plot.subplot(2, 2, 1)
78 plot.pie(numeros,labels = etiquetas)
79 plot.title('Bots')
80 #plot 1:#####################################################
81
82 #plot 2:
83 x = np.array([0, 1, 2, 3])
84 y = np.array([10, 20, 30, 40])
85
86 plot.subplot(2, 2, 2)
87 plot.plot(x,y)
88
89 #plot 3:
90 x = np.array([0, 1, 2, 3])
91 y = np.array([3, 8, 1, 10])
92
93 plot.subplot(2, 2, 3)
94 plot.plot(x,y)
95
96 #plot 4:
97 x = np.array([0, 1, 2, 3])
98 y = np.array([10, 20, 30, 40])
99
100 plot.subplot(2, 2, 4)
101 plot.plot(x,y)
102
103 plot.show()





Ejercicio del curso:

panel.py



/Graficas/panel de control/panel.py

1 import requests
2 import sqlite3
3 import pandas as pd
4 import matplotlib.pyplot as plot
5 import numpy as np
6
7 #Descarga de archivo
8 url = 'https://jocarsa.com/log/registros.csv'
9 contenido = requests.get(url, allow_redirects=True)
10 open('registros.csv', 'wb').write(contenido.content)
11 #Creación de base de datos
12 conn = sqlite3.connect('registros.sqlite')
13 cursor = conn.cursor()
14 cursor.execute('''
15 CREATE TABLE IF NOT EXISTS "registros" (
16 "Identificador" INTEGER,
17 "epoch" TEXT,
18 "anio" TEXT,
19 "mes" TEXT,
20 "dia" TEXT,
21 "hora" TEXT,
22 "minuto" TEXT,
23 "segundo" TEXT,
24 "ip" TEXT,
25 "navegador" TEXT,
26 "pagina" TEXT,
27 "post" TEXT,
28 "get" TEXT,
29 "sesion" TEXT,
30 PRIMARY KEY("Identificador" AUTOINCREMENT)
31 );
32 ''')
33 cursor.execute('''
34 DELETE FROM registros;
35 ''')
36
37 # load the data into a Pandas DataFrame
38 registros = pd.read_csv('registros.csv', usecols=["epoch", "anio","mes","dia","hora","minuto","segundo","ip","navegador","pagina","post","get","sesion"], low_memory=False)
39
40 # write the data to a sqlite table
41 registros.to_sql('registros', conn, if_exists='append', index = False)
42
43 #plot 1:#####################################################
44 cursor.execute('''
45 SELECT COUNT(navegador)
46 FROM registros
47 WHERE
48
49 navegador NOT LIKE '%bot%'
50 AND
51 navegador NOT LIKE '%spider%'
52 AND
53 navegador NOT LIKE '%crawl%'
54
55
56 ''')
57 datos = cursor.fetchall()
58 numeros = []
59 for i in datos:
60 numeros.append(i[0])
61 cursor.execute('''
62 SELECT COUNT(navegador)
63 FROM registros
64 WHERE
65
66 navegador LIKE '%bot%'
67 OR
68 navegador LIKE '%spider%'
69 OR
70 navegador LIKE '%crawl%'
71 ''')
72 datos = cursor.fetchall()
73 for i in datos:
74 numeros.append(i[0])
75 conn.commit()
76 etiquetas = ["Humanos","Bots"]
77 plot.subplot(2, 2, 1)
78 plot.pie(numeros,labels = etiquetas)
79 plot.title('Bots')
80 #plot 1:#####################################################
81
82 #plot 2:#####################################################
83 cursor.execute('''
84 SELECT COUNT(hora),hora
85 FROM registros
86 WHERE
87
88 navegador NOT LIKE '%bot%'
89 AND
90 navegador NOT LIKE '%spider%'
91 AND
92 navegador NOT LIKE '%crawl%'
93
94 GROUP BY CAST(hora as decimal)
95 ''')
96 datos = cursor.fetchall()
97 horas = []
98 visitas = []
99 for i in datos:
100 print("Visitas:",i[0],"\t hora:",i[1])
101 if i[1] is not None:
102 horas.append(i[0])
103 visitas.append(i[1])
104 conn.commit()
105 plot.subplot(2, 2, 2)
106 plot.bar(visitas, horas, align='center')
107 plot.ylabel('Horas')
108 plot.title('Visitantes cada hora')
109
110 #plot 2:#####################################################
111
112 #plot 3:
113 x = np.array([0, 1, 2, 3])
114 y = np.array([3, 8, 1, 10])
115
116 plot.subplot(2, 2, 3)
117 plot.plot(x,y)
118
119 #plot 4:
120 x = np.array([0, 1, 2, 3])
121 y = np.array([10, 20, 30, 40])
122
123 plot.subplot(2, 2, 4)
124 plot.plot(x,y)
125
126 plot.show()





Ejercicio del curso:

panel.py



/Graficas/panel de control/panel.py

1 import requests
2 import sqlite3
3 import pandas as pd
4 import matplotlib.pyplot as plot
5 import numpy as np
6
7 #Descarga de archivo
8 url = 'https://jocarsa.com/log/registros.csv'
9 contenido = requests.get(url, allow_redirects=True)
10 open('registros.csv', 'wb').write(contenido.content)
11 #Creación de base de datos
12 conn = sqlite3.connect('registros.sqlite')
13 cursor = conn.cursor()
14 cursor.execute('''
15 CREATE TABLE IF NOT EXISTS "registros" (
16 "Identificador" INTEGER,
17 "epoch" TEXT,
18 "anio" TEXT,
19 "mes" TEXT,
20 "dia" TEXT,
21 "hora" TEXT,
22 "minuto" TEXT,
23 "segundo" TEXT,
24 "ip" TEXT,
25 "navegador" TEXT,
26 "pagina" TEXT,
27 "post" TEXT,
28 "get" TEXT,
29 "sesion" TEXT,
30 PRIMARY KEY("Identificador" AUTOINCREMENT)
31 );
32 ''')
33 cursor.execute('''
34 DELETE FROM registros;
35 ''')
36
37 # load the data into a Pandas DataFrame
38 registros = pd.read_csv('registros.csv', usecols=["epoch", "anio","mes","dia","hora","minuto","segundo","ip","navegador","pagina","post","get","sesion"], low_memory=False)
39
40 # write the data to a sqlite table
41 registros.to_sql('registros', conn, if_exists='append', index = False)
42
43 #plot 1:#####################################################
44 cursor.execute('''
45 SELECT COUNT(navegador)
46 FROM registros
47 WHERE
48
49 navegador NOT LIKE '%bot%'
50 AND
51 navegador NOT LIKE '%spider%'
52 AND
53 navegador NOT LIKE '%crawl%'
54
55
56 ''')
57 datos = cursor.fetchall()
58 numeros = []
59 for i in datos:
60 numeros.append(i[0])
61 cursor.execute('''
62 SELECT COUNT(navegador)
63 FROM registros
64 WHERE
65
66 navegador LIKE '%bot%'
67 OR
68 navegador LIKE '%spider%'
69 OR
70 navegador LIKE '%crawl%'
71 ''')
72 datos = cursor.fetchall()
73 for i in datos:
74 numeros.append(i[0])
75 conn.commit()
76 etiquetas = ["Humanos","Bots"]
77 plot.subplot(3, 3, 1)
78 plot.pie(numeros,labels = etiquetas)
79 plot.title('Bots')
80 #plot 1:#####################################################
81
82 #plot 2:#####################################################
83 cursor.execute('''
84 SELECT COUNT(hora),hora
85 FROM registros
86 WHERE
87
88 navegador NOT LIKE '%bot%'
89 AND
90 navegador NOT LIKE '%spider%'
91 AND
92 navegador NOT LIKE '%crawl%'
93
94 GROUP BY CAST(hora as decimal)
95 ''')
96 datos = cursor.fetchall()
97 horas = []
98 visitas = []
99 for i in datos:
100 print("Visitas:",i[0],"\t hora:",i[1])
101 if i[1] is not None:
102 horas.append(i[0])
103 visitas.append(i[1])
104 conn.commit()
105 plot.subplot(3, 3, 2)
106 plot.bar(visitas, horas, align='center')
107 plot.ylabel('Horas')
108 plot.title('Visitantes cada hora')
109
110 #plot 2:#####################################################
111
112 #plot 3:
113 x = np.array([0, 1, 2, 3])
114 y = np.array([3, 8, 1, 10])
115
116 plot.subplot(3, 3, 3)
117 plot.plot(x,y)
118
119 #plot 4:
120 x = np.array([0, 1, 2, 3])
121 y = np.array([10, 20, 30, 40])
122
123 plot.subplot(3, 3, 4)
124 plot.plot(x,y)
125
126 plot.show()





Ejercicio del curso:

panel.py



/Graficas/panel de control/panel.py

1 import requests
2 import sqlite3
3 import pandas as pd
4 import matplotlib.pyplot as plot
5 import numpy as np
6
7 #Descarga de archivo
8 url = 'https://jocarsa.com/log/registros.csv'
9 contenido = requests.get(url, allow_redirects=True)
10 open('registros.csv', 'wb').write(contenido.content)
11 #Creación de base de datos
12 conn = sqlite3.connect('registros.sqlite')
13 cursor = conn.cursor()
14 cursor.execute('''
15 CREATE TABLE IF NOT EXISTS "registros" (
16 "Identificador" INTEGER,
17 "epoch" TEXT,
18 "anio" TEXT,
19 "mes" TEXT,
20 "dia" TEXT,
21 "hora" TEXT,
22 "minuto" TEXT,
23 "segundo" TEXT,
24 "ip" TEXT,
25 "navegador" TEXT,
26 "pagina" TEXT,
27 "post" TEXT,
28 "get" TEXT,
29 "sesion" TEXT,
30 PRIMARY KEY("Identificador" AUTOINCREMENT)
31 );
32 ''')
33 cursor.execute('''
34 DELETE FROM registros;
35 ''')
36
37 # load the data into a Pandas DataFrame
38 registros = pd.read_csv('registros.csv', usecols=["epoch", "anio","mes","dia","hora","minuto","segundo","ip","navegador","pagina","post","get","sesion"], low_memory=False)
39
40 # write the data to a sqlite table
41 registros.to_sql('registros', conn, if_exists='append', index = False)
42
43 #plot 1:#####################################################
44 cursor.execute('''
45 SELECT COUNT(navegador)
46 FROM registros
47 WHERE
48
49 navegador NOT LIKE '%bot%'
50 AND
51 navegador NOT LIKE '%spider%'
52 AND
53 navegador NOT LIKE '%crawl%'
54
55
56 ''')
57 datos = cursor.fetchall()
58 numeros = []
59 for i in datos:
60 numeros.append(i[0])
61 cursor.execute('''
62 SELECT COUNT(navegador)
63 FROM registros
64 WHERE
65
66 navegador LIKE '%bot%'
67 OR
68 navegador LIKE '%spider%'
69 OR
70 navegador LIKE '%crawl%'
71 ''')
72 datos = cursor.fetchall()
73 for i in datos:
74 numeros.append(i[0])
75 conn.commit()
76 etiquetas = ["Humanos","Bots"]
77 plot.subplot(3, 3, 1)
78 plot.pie(numeros,labels = etiquetas)
79 plot.title('Bots')
80 #plot 1:#####################################################
81
82 #plot 2:#####################################################
83 cursor.execute('''
84 SELECT COUNT(hora),hora
85 FROM registros
86 WHERE
87
88 navegador NOT LIKE '%bot%'
89 AND
90 navegador NOT LIKE '%spider%'
91 AND
92 navegador NOT LIKE '%crawl%'
93
94 GROUP BY CAST(hora as decimal)
95 ''')
96 datos = cursor.fetchall()
97 horas = []
98 visitas = []
99 for i in datos:
100 print("Visitas:",i[0],"\t hora:",i[1])
101 if i[1] is not None:
102 horas.append(i[0])
103 visitas.append(i[1])
104 conn.commit()
105 plot.subplot(3, 3, 2)
106 plot.bar(visitas, horas, align='center')
107 plot.ylabel('Horas')
108 plot.title('Visitantes cada hora')
109
110 #plot 2:#####################################################
111
112 #plot 3:#####################################################
113 cursor.execute('''
114 SELECT COUNT(navegador) FROM registros
115 WHERE navegador LIKE '%Macintosh%'
116 ''')
117 datos = cursor.fetchall()
118 numeros2 = []
119 for i in datos:
120 numeros2.append(i[0])
121 cursor.execute('''
122 SELECT COUNT(navegador) FROM registros
123 WHERE navegador LIKE '%Windows%'
124 ''')
125 datos = cursor.fetchall()
126 for i in datos:
127 numeros2.append(i[0])
128 conn.commit()
129 etiquetas = ["Mac","Windows"]
130 plot.subplot(3, 3, 3)
131 print(numeros2)
132 print(etiquetas)
133 plot.pie(numeros2,labels = etiquetas)
134 plot.title('Windows versus Mac')
135 #plot 3:#####################################################
136
137 #plot 4:
138 x = np.array([0, 1, 2, 3])
139 y = np.array([10, 20, 30, 40])
140
141 plot.subplot(3, 3, 4)
142 plot.plot(x,y)
143
144 plot.show()





Ejercicio del curso:

panel.py



/Graficas/panel de control/panel.py

1 import requests
2 import sqlite3
3 import pandas as pd
4 import matplotlib.pyplot as plot
5 import numpy as np
6 import os
7 import time
8 try:
9 fechadecreacion = int(os.path.getmtime('registros.csv'))
10 print(fechadecreacion)
11 fechaactual = int(time.time())
12 diferencia = fechaactual - fechadecreacion
13 print(diferencia)
14 if diferencia > 3600:
15 #Descarga de archivo
16 url = 'https://jocarsa.com/log/registros.csv'
17 contenido = requests.get(url, allow_redirects=True)
18 open('registros.csv', 'wb').write(contenido.content)
19 except:
20 #Descarga de archivo
21 url = 'https://jocarsa.com/log/registros.csv'
22 contenido = requests.get(url, allow_redirects=True)
23 open('registros.csv', 'wb').write(contenido.content)
24 #Creación de base de datos
25 conn = sqlite3.connect('registros.sqlite')
26 cursor = conn.cursor()
27 cursor.execute('''
28 CREATE TABLE IF NOT EXISTS "registros" (
29 "Identificador" INTEGER,
30 "epoch" TEXT,
31 "anio" TEXT,
32 "mes" TEXT,
33 "dia" TEXT,
34 "hora" TEXT,
35 "minuto" TEXT,
36 "segundo" TEXT,
37 "ip" TEXT,
38 "navegador" TEXT,
39 "pagina" TEXT,
40 "post" TEXT,
41 "get" TEXT,
42 "sesion" TEXT,
43 PRIMARY KEY("Identificador" AUTOINCREMENT)
44 );
45 ''')
46 cursor.execute('''
47 DELETE FROM registros;
48 ''')
49
50 # load the data into a Pandas DataFrame
51 registros = pd.read_csv('registros.csv', usecols=["epoch", "anio","mes","dia","hora","minuto","segundo","ip","navegador","pagina","post","get","sesion"], low_memory=False)
52
53 # write the data to a sqlite table
54 registros.to_sql('registros', conn, if_exists='append', index = False)
55
56 #plot 1:#####################################################
57 cursor.execute('''
58 SELECT COUNT(navegador)
59 FROM registros
60 WHERE
61
62 navegador NOT LIKE '%bot%'
63 AND
64 navegador NOT LIKE '%spider%'
65 AND
66 navegador NOT LIKE '%crawl%'
67
68
69 ''')
70 datos = cursor.fetchall()
71 numeros = []
72 for i in datos:
73 numeros.append(i[0])
74 cursor.execute('''
75 SELECT COUNT(navegador)
76 FROM registros
77 WHERE
78
79 navegador LIKE '%bot%'
80 OR
81 navegador LIKE '%spider%'
82 OR
83 navegador LIKE '%crawl%'
84 ''')
85 datos = cursor.fetchall()
86 for i in datos:
87 numeros.append(i[0])
88 conn.commit()
89 etiquetas = ["Humanos","Bots"]
90 plot.subplot(3, 3, 1)
91 plot.pie(numeros,labels = etiquetas)
92 plot.title('Bots')
93 #plot 1:#####################################################
94
95 #plot 2:#####################################################
96 cursor.execute('''
97 SELECT COUNT(hora),hora
98 FROM registros
99 WHERE
100
101 navegador NOT LIKE '%bot%'
102 AND
103 navegador NOT LIKE '%spider%'
104 AND
105 navegador NOT LIKE '%crawl%'
106
107 GROUP BY CAST(hora as decimal)
108 ''')
109 datos = cursor.fetchall()
110 horas = []
111 visitas = []
112 for i in datos:
113 print("Visitas:",i[0],"\t hora:",i[1])
114 if i[1] is not None:
115 horas.append(i[0])
116 visitas.append(i[1])
117 conn.commit()
118 plot.subplot(3, 3, 2)
119 plot.bar(visitas, horas, align='center')
120 plot.ylabel('Horas')
121 plot.title('Visitantes cada hora')
122
123 #plot 2:#####################################################
124
125 #plot 3:#####################################################
126 cursor.execute('''
127 SELECT COUNT(navegador) FROM registros
128 WHERE navegador LIKE '%Macintosh%'
129 ''')
130 datos = cursor.fetchall()
131 numeros2 = []
132 for i in datos:
133 numeros2.append(i[0])
134 cursor.execute('''
135 SELECT COUNT(navegador) FROM registros
136 WHERE navegador LIKE '%Windows%'
137 ''')
138 datos = cursor.fetchall()
139 for i in datos:
140 numeros2.append(i[0])
141 conn.commit()
142 etiquetas = ["Mac","Windows"]
143 plot.subplot(3, 3, 3)
144 print(numeros2)
145 print(etiquetas)
146 plot.pie(numeros2,labels = etiquetas)
147 plot.title('Windows versus Mac')
148 #plot 3:#####################################################
149
150 #plot 4:
151 x = np.array([0, 1, 2, 3])
152 y = np.array([10, 20, 30, 40])
153
154 plot.subplot(3, 3, 4)
155 plot.plot(x,y)
156
157 plot.show()





Ejercicio del curso:



Ejercicio del curso:



Ejercicio del curso:



/Graficas/panel de control/registros.sqbpro

1 <?xml version="1.0" encoding="UTF-8"?><sqlb_project><db path="C:/Users/Admin/Documents/GitHub/python/501-Graficas/505-panel de control/registros.sqlite" readonly="0" foreign_keys="1" case_sensitive_like="0" temp_store="0" wal_autocheckpoint="1000" synchronous="2"/><attached/><window><main_tabs open="structure browser pragmas query" current="3"/></window><tab_structure><column_width id="0" width="300"/><column_width id="1" width="0"/><column_width id="2" width="100"/><column_width id="3" width="1681"/><column_width id="4" width="0"/><expanded_item id="0" parent="1"/><expanded_item id="1" parent="1"/><expanded_item id="2" parent="1"/><expanded_item id="3" parent="1"/></tab_structure><tab_browse><current_table name="4,9:mainregistros"/><default_encoding codec=""/><browse_table_settings><table schema="main" name="registros" show_row_id="0" encoding="" plot_x_axis="" unlock_view_pk="_rowid_"><sort/><column_widths><column index="1" value="91"/><column index="2" value="77"/><column index="3" value="46"/><column index="4" value="40"/><column index="5" value="40"/><column index="6" value="40"/><column index="7" value="52"/><column index="8" value="63"/><column index="9" value="262"/><column index="10" value="300"/><column index="11" value="300"/><column index="12" value="300"/><column index="13" value="300"/><column index="14" value="188"/></column_widths><filter_values/><conditional_formats/><row_id_formats/><display_formats/><hidden_columns/><plot_y_axes/><global_filter/></table></browse_table_settings></tab_browse><tab_sql><sql name="SQL 1">SELECT * FROM registros
2
3 WHERE navegador LIKE '%Macintosh%'
4
5 </sql><current_tab id="0"/></tab_sql></sqlb_project>





10.6.-TKinter

Ejercicio del curso:

canvas.py



/Graficas/TKinter/canvas.py

1 import tkinter as tk
2
3 raiz = tk.Tk()
4 raiz.geometry("512x512")
5 raiz.mainloop()





Ejercicio del curso:

canvas.py



/Graficas/TKinter/canvas.py

1 import tkinter as tk
2
3 raiz = tk.Tk()
4 raiz.geometry("512x512")
5 lienzo = tk.Canvas()
6 lienzo.pack()
7 raiz.mainloop()





Ejercicio del curso:

canvas.py



/Graficas/TKinter/canvas.py

1 import tkinter as tk
2
3 raiz = tk.Tk()
4 raiz.geometry("512x512")
5 lienzo = tk.Canvas()
6 lienzo.pack()
7 lienzo.create_rectangle(10,10,20,20,fill="red")
8 lienzo.create_rectangle(50,50,70,70,fill="blue")
9 raiz.mainloop()





Ejercicio del curso:

bucle.py



/Graficas/TKinter/bucle.py

1 import time
2
3 def bucle():
4 print("hola")
5 time.sleep(1)
6 bucle()
7
8 bucle()





Ejercicio del curso:

bucle.py



/Graficas/TKinter/bucle.py

1 import time
2 import tkinter as tk
3 import random
4
5 def bucle():
6 print("hola")
7 x = random.randint(0,512)
8 y = random.randint(0,512)
9 lienzo.create_rectangle(x,y,x+10,y+10,fill="red")
10 time.sleep(1)
11 bucle()
12
13
14 raiz = tk.Tk()
15 raiz.geometry("512x512")
16 lienzo = tk.Canvas()
17 lienzo.pack()
18
19
20
21
22 bucle()





Ejercicio del curso:

bucle.py



/Graficas/TKinter/bucle.py

1 import tkinter as tk
2
3 class Aplicacion(object):
4 def __init__(self,master):
5 self.master = master
6 self.master.after(1000,self.bucle)
7 def bucle(self):
8 print("el programa ha arrancando y empezará a dar vueltas")
9 lienzo.create_rectangle(10,10,20,20,fill="red")
10 self.master.after(1000,self.bucle)
11 raiz = tk.Tk()
12 raiz.geometry("512x512")
13 lienzo = tk.Canvas()
14 lienzo.pack()
15
16 aplicacion = Aplicacion(raiz)
17
18





Ejercicio del curso:

bucle.py



/Graficas/TKinter/bucle.py

1 import tkinter as tk
2 import random
3
4 class Aplicacion(object):
5 def __init__(self,master):
6 self.master = master
7 self.master.after(1000,self.bucle)
8 def bucle(self):
9 x = random.randint(0,512)
10 y = random.randint(0,512)
11 lienzo.create_rectangle(x,y,x+10,y+10,fill="red")
12 print("el programa ha arrancando y empezará a dar vueltas")
13 lienzo.create_rectangle(10,10,20,20,fill="red")
14 self.master.after(1000,self.bucle)
15 raiz = tk.Tk()
16 raiz.geometry("512x512")
17 lienzo = tk.Canvas()
18 lienzo.pack()
19
20 aplicacion = Aplicacion(raiz)
21
22





Ejercicio del curso:

bucle.py



/Graficas/TKinter/bucle.py

1 import tkinter as tk
2 import random
3
4 class Aplicacion(object):
5 def __init__(self,master):
6 self.master = master
7 self.master.after(1000,self.bucle)
8 def bucle(self):
9 x = random.randint(0,512)
10 y = random.randint(0,512)
11 lienzo.create_rectangle(x,y,x+10,y+10,fill="red")
12 #print("el programa ha arrancando y empezará a dar vueltas")
13 lienzo.create_rectangle(10,10,20,20,fill="red")
14 self.master.after(100,self.bucle)
15 raiz = tk.Tk()
16 raiz.geometry("512x512")
17 lienzo = tk.Canvas(width=512, height=512)
18 lienzo.pack()
19
20 aplicacion = Aplicacion(raiz)
21
22





Ejercicio del curso:

bucle.py



/Graficas/TKinter/bucle.py

1 import tkinter as tk
2 import random as rand
3
4 def rgb_to_hex(r, g, b):
5 return '#{:02x}{:02x}{:02x}'.format(r, g, b)
6
7 class Aplicacion(object):
8 def __init__(self,master):
9 self.master = master
10 self.master.after(1000,self.bucle)
11 def bucle(self):
12 x = rand.randint(0,512)
13 y = rand.randint(0,512)
14 rojo = rand.randint(0, 255)
15 verde = rand.randint(0, 255)
16 azul = rand.randint(0, 255)
17 micolor = rgb_to_hex(rojo, verde, azul)
18 lienzo.create_rectangle(x,y,x+10,y+10,fill=micolor)
19 #print("el programa ha arrancando y empezará a dar vueltas")
20 lienzo.create_rectangle(10,10,20,20,fill="red")
21 self.master.after(100,self.bucle)
22 raiz = tk.Tk()
23 raiz.geometry("512x512")
24 lienzo = tk.Canvas(width=512, height=512)
25 lienzo.pack()
26
27 aplicacion = Aplicacion(raiz)
28
29





Ejercicio del curso:

bucle.py



/Graficas/TKinter/bucle.py

1 import tkinter as tk
2 import random as rand
3
4 def rgb_to_hex(r, g, b):
5 return '#{:02x}{:02x}{:02x}'.format(r, g, b)
6
7 class Aplicacion(object):
8 def __init__(self,master):
9 self.master = master
10 self.master.after(1000,self.bucle)
11 def bucle(self):
12 x = rand.randint(0,512)
13 y = rand.randint(0,512)
14 rojo = rand.randint(0, 255)
15 verde = rand.randint(0, 255)
16 azul = rand.randint(0, 255)
17 micolor = rgb_to_hex(rojo, verde, azul)
18 lienzo.create_oval(x,y,x+10,y+10,fill=micolor)
19 #print("el programa ha arrancando y empezará a dar vueltas")
20 lienzo.create_rectangle(10,10,20,20,fill="red")
21 self.master.after(100,self.bucle)
22 raiz = tk.Tk()
23 raiz.geometry("512x512")
24 lienzo = tk.Canvas(width=512, height=512)
25 lienzo.pack()
26
27 aplicacion = Aplicacion(raiz)
28
29





Ejercicio del curso:

bucle.py



/Graficas/TKinter/bucle.py

1 import tkinter as tk
2 import random as rand
3
4 def rgb_to_hex(r, g, b):
5 return '#{:02x}{:02x}{:02x}'.format(r, g, b)
6
7 class Persona():
8 def __init__(self):
9 self.x = 256
10 self.y = 256
11 rojo = rand.randint(0, 255)
12 verde = rand.randint(0, 255)
13 azul = rand.randint(0, 255)
14 self.color = rgb_to_hex(rojo, verde, azul)
15
16 persona1 = Persona()
17 print(persona1)
18 class Aplicacion(object):
19 def __init__(self,master):
20 self.master = master
21 self.master.after(1000,self.bucle)
22 def bucle(self):
23
24 lienzo.create_oval(
25 persona1.x,
26 persona1.y,
27 persona1.x+10,
28 persona1.y+10,
29 fill=persona1.color
30 )
31
32 lienzo.create_rectangle(10,10,20,20,fill="red")
33 self.master.after(100,self.bucle)
34 raiz = tk.Tk()
35 raiz.geometry("512x512")
36 lienzo = tk.Canvas(width=512, height=512)
37 lienzo.pack()
38
39 aplicacion = Aplicacion(raiz)
40
41





Ejercicio del curso:

bucle.py



/Graficas/TKinter/bucle.py

1 import tkinter as tk
2 import random as rand
3
4 def rgb_to_hex(r, g, b):
5 return '#{:02x}{:02x}{:02x}'.format(r, g, b)
6
7 class Persona():
8 def __init__(self):
9 self.x = 256
10 self.y = 256
11 rojo = rand.randint(0, 255)
12 verde = rand.randint(0, 255)
13 azul = rand.randint(0, 255)
14 self.color = rgb_to_hex(rojo, verde, azul)
15
16 persona1 = Persona()
17 print(persona1)
18 class Aplicacion(object):
19 def __init__(self,master):
20 self.master = master
21 self.master.after(1000,self.bucle)
22 def bucle(self):
23 persona1.x+=2
24 persona1.y+=2
25 lienzo.create_oval(
26 persona1.x,
27 persona1.y,
28 persona1.x+10,
29 persona1.y+10,
30 fill=persona1.color
31 )
32
33 lienzo.create_rectangle(10,10,20,20,fill="red")
34 self.master.after(100,self.bucle)
35 raiz = tk.Tk()
36 raiz.geometry("512x512")
37 lienzo = tk.Canvas(width=512, height=512)
38 lienzo.pack()
39
40 aplicacion = Aplicacion(raiz)
41
42





Ejercicio del curso:

bucle.py



/Graficas/TKinter/bucle.py

1 import tkinter as tk
2 import random as rand
3 import math
4
5 def rgb_to_hex(r, g, b):
6 return '#{:02x}{:02x}{:02x}'.format(r, g, b)
7
8 class Persona():
9 def __init__(self):
10 self.x = 256
11 self.y = 256
12 rojo = rand.randint(0, 255)
13 verde = rand.randint(0, 255)
14 azul = rand.randint(0, 255)
15 self.color = rgb_to_hex(rojo, verde, azul)
16 self.direccion = rand.randint(0, 365)
17
18 persona1 = Persona()
19 print(persona1)
20 class Aplicacion(object):
21 def __init__(self,master):
22 self.master = master
23 self.master.after(1000,self.bucle)
24 def bucle(self):
25 persona1.x += math.cos(persona1.direccion)
26 persona1.y+=math.sin(persona1.direccion)
27 lienzo.create_oval(
28 persona1.x,
29 persona1.y,
30 persona1.x+10,
31 persona1.y+10,
32 fill=persona1.color
33 )
34
35 lienzo.create_rectangle(10,10,20,20,fill="red")
36 self.master.after(100,self.bucle)
37 raiz = tk.Tk()
38 raiz.geometry("512x512")
39 lienzo = tk.Canvas(width=512, height=512)
40 lienzo.pack()
41
42 aplicacion = Aplicacion(raiz)
43
44





Ejercicio del curso:

bucle.py



/Graficas/TKinter/bucle.py

1 import tkinter as tk
2 import random as rand
3 import math
4
5 def rgb_to_hex(r, g, b):
6 return '#{:02x}{:02x}{:02x}'.format(r, g, b)
7
8 class Persona():
9 def __init__(self):
10 self.x = 256
11 self.y = 256
12 rojo = rand.randint(0, 255)
13 verde = rand.randint(0, 255)
14 azul = rand.randint(0, 255)
15 self.color = rgb_to_hex(rojo, verde, azul)
16 self.direccion = rand.randint(0, 365)
17
18 persona1 = Persona()
19 print(persona1)
20 class Aplicacion(object):
21 def __init__(self,master):
22 self.master = master
23 self.master.after(1000,self.bucle)
24 def bucle(self):
25 persona1.x += math.cos(persona1.direccion)*5
26 persona1.y+=math.sin(persona1.direccion)*5
27 if persona1.x < 0 or persona1.y < 0 or persona1.x > 511 or persona1.y > 511:
28 persona1.direccion += 180
29 lienzo.create_oval(
30 persona1.x,
31 persona1.y,
32 persona1.x+10,
33 persona1.y+10,
34 fill=persona1.color
35 )
36
37 lienzo.create_rectangle(10,10,20,20,fill="red")
38 self.master.after(100,self.bucle)
39 raiz = tk.Tk()
40 raiz.geometry("512x512")
41 lienzo = tk.Canvas(width=512, height=512)
42 lienzo.pack()
43
44 aplicacion = Aplicacion(raiz)
45
46





Ejercicio del curso:

bucle.py



/Graficas/TKinter/bucle.py

1 import tkinter as tk
2 import random as rand
3 import math
4
5 def rgb_to_hex(r, g, b):
6 return '#{:02x}{:02x}{:02x}'.format(r, g, b)
7
8 class Persona():
9 def __init__(self):
10 self.x = 256
11 self.y = 256
12 rojo = rand.randint(0, 255)
13 verde = rand.randint(0, 255)
14 azul = rand.randint(0, 255)
15 self.color = rgb_to_hex(rojo, verde, azul)
16 self.direccion = rand.randint(0, 365)
17 def mueve():
18 self.x += math.cos(self.direccion)*5
19 self.y+=math.sin(self.direccion)*5
20 if self.x < 0 or self.y < 0 or self.x > 511 or self.y > 511:
21 self.direccion += 180
22
23 persona1 = Persona()
24 print(persona1)
25 class Aplicacion(object):
26 def __init__(self,master):
27 self.master = master
28 self.master.after(1000,self.bucle)
29 def bucle(self):
30 persona1.mueve()
31 lienzo.create_oval(
32 persona1.x,
33 persona1.y,
34 persona1.x+10,
35 persona1.y+10,
36 fill=persona1.color
37 )
38
39 lienzo.create_rectangle(10,10,20,20,fill="red")
40 self.master.after(100,self.bucle)
41 raiz = tk.Tk()
42 raiz.geometry("512x512")
43 lienzo = tk.Canvas(width=512, height=512)
44 lienzo.pack()
45
46 aplicacion = Aplicacion(raiz)
47
48





Ejercicio del curso:

bucle.py



/Graficas/TKinter/bucle.py

1 import tkinter as tk
2 import random as rand
3 import math
4
5 def rgb_to_hex(r, g, b):
6 return '#{:02x}{:02x}{:02x}'.format(r, g, b)
7
8 class Persona():
9 def __init__(self):
10 self.x = 256
11 self.y = 256
12 rojo = rand.randint(0, 255)
13 verde = rand.randint(0, 255)
14 azul = rand.randint(0, 255)
15 self.color = rgb_to_hex(rojo, verde, azul)
16 self.direccion = rand.randint(0, 365)
17 def mueve(self):
18 self.x += math.cos(self.direccion)*5
19 self.y+=math.sin(self.direccion)*5
20 if self.x < 0 or self.y < 0 or self.x > 511 or self.y > 511:
21 self.direccion += 180
22 def dibuja(self):
23 lienzo.create_oval(
24 self.x,
25 self.y,
26 self.x+10,
27 self.y+10,
28 fill=self.color
29 )
30
31 persona1 = Persona()
32 print(persona1)
33 class Aplicacion(object):
34 def __init__(self,master):
35 self.master = master
36 self.master.after(1000,self.bucle)
37 def bucle(self):
38 persona1.mueve()
39 persona1.dibuja()
40 self.master.after(100,self.bucle)
41 raiz = tk.Tk()
42 raiz.geometry("512x512")
43 lienzo = tk.Canvas(width=512, height=512)
44 lienzo.pack()
45
46 aplicacion = Aplicacion(raiz)
47
48





Ejercicio del curso:

bucle.py



/Graficas/TKinter/bucle.py

1 import tkinter as tk
2 import random as rand
3 import math
4
5 def rgb_to_hex(r, g, b):
6 return '#{:02x}{:02x}{:02x}'.format(r, g, b)
7
8 class Persona():
9 def __init__(self):
10 self.x = 256
11 self.y = 256
12 rojo = rand.randint(0, 255)
13 verde = rand.randint(0, 255)
14 azul = rand.randint(0, 255)
15 self.color = rgb_to_hex(rojo, verde, azul)
16 self.direccion = rand.randint(0, 365)
17 def mueve(self):
18 self.x += math.cos(self.direccion)*5
19 self.y+=math.sin(self.direccion)*5
20 if self.x < 0 or self.y < 0 or self.x > 511 or self.y > 511:
21 self.direccion += 180
22 def dibuja(self):
23 lienzo.create_oval(
24 self.x,
25 self.y,
26 self.x+10,
27 self.y+10,
28 fill=self.color
29 )
30
31 personas = []
32 for i in range(0,200):
33 personas.append(Persona())
34
35
36 class Aplicacion(object):
37 def __init__(self,master):
38 self.master = master
39 self.master.after(1000,self.bucle)
40 def bucle(self):
41 for persona in personas:
42 persona.mueve()
43 persona.dibuja()
44 self.master.after(10,self.bucle)
45 raiz = tk.Tk()
46 raiz.geometry("512x512")
47 lienzo = tk.Canvas(width=512, height=512)
48 lienzo.pack()
49
50 aplicacion = Aplicacion(raiz)
51
52





Ejercicio del curso:

bucle.py



/Graficas/TKinter/bucle.py

1 import tkinter as tk
2 import random as rand
3 import math
4
5 def rgb_to_hex(r, g, b):
6 return '#{:02x}{:02x}{:02x}'.format(r, g, b)
7
8 class Persona():
9 def __init__(self):
10 self.x = 256
11 self.y = 256
12 rojo = rand.randint(0, 255)
13 verde = rand.randint(0, 255)
14 azul = rand.randint(0, 255)
15 self.color = rgb_to_hex(rojo, verde, azul)
16 self.direccion = rand.randint(0, 365)
17 def mueve(self):
18 self.x += math.cos(self.direccion)*5
19 self.y+=math.sin(self.direccion)*5
20 if self.x < 0 or self.y < 0 or self.x > 511 or self.y > 511:
21 self.direccion += 180
22 def dibuja(self):
23 lienzo.create_oval(
24 self.x,
25 self.y,
26 self.x+10,
27 self.y+10,
28 fill=self.color
29 )
30
31 personas = []
32 for i in range(0,200):
33 personas.append(Persona())
34
35
36 class Aplicacion(object):
37 def __init__(self,master):
38 self.master = master
39 self.master.after(1000,self.bucle)
40 def bucle(self):
41 lienzo.delete('all')
42 for persona in personas:
43 persona.mueve()
44 persona.dibuja()
45 self.master.after(10,self.bucle)
46 raiz = tk.Tk()
47 raiz.geometry("512x512")
48 lienzo = tk.Canvas(width=512, height=512)
49 lienzo.pack()
50
51 aplicacion = Aplicacion(raiz)
52
53





10.7.-Sonidos

Ejercicio del curso:

sonido.py



/Graficas/Sonidos/sonido.py

1 #pip install playsound
2 from playsound import playsound
3
4 # for playing note.wav file
5 playsound('/path/note.wav')
6 print('playing sound using playsound')





Ejercicio del curso:

pipiano.py



/Graficas/Sonidos/pipiano.py

1 #pip install playsound
2 from playsound import playsound
3
4 # for playing note.wav file
5 playsound('mp3/A4.mp3')
6 print('playing sound using playsound')





Ejercicio del curso:

notas.py



/Graficas/Sonidos/notas.py

1 #pip install playsound
2 from playsound import playsound
3 import os
4 directorio = 'mp3/'
5 notas = []
6 for archivo in os.listdir("mp3"):
7 # check if current path is a file
8 if os.path.isfile(os.path.join(directorio, archivo)):
9 print("es archivo")
10 notas.append(directorio+archivo)
11 for nota in notas:
12 playsound(nota)
13 print('playing sound using playsound')





Ejercicio del curso:

notas.py



/Graficas/Sonidos/notas.py

1 #pip install playsound
2 import threading
3 from playsound import playsound
4 import os
5 import time
6
7 directorio = 'mp3/'
8 notas = []
9 for archivo in os.listdir("mp3"):
10 if os.path.isfile(os.path.join(directorio, archivo)):
11 notas.append(directorio+archivo)
12
13 def alert():
14 threading.Thread(target=playsound, args=('mp3/A4.mp3',), daemon=True).start()
15
16
17 def bucle():
18 alert()
19 time.sleep(1)
20 bucle()
21
22 bucle()
23
24





Ejercicio del curso:

notas.py



/Graficas/Sonidos/notas.py

1 #pip install playsound
2 import threading
3 from playsound import playsound
4 import os
5 import time
6 import random as rand
7
8 directorio = 'mp3/'
9 notas = []
10 for archivo in os.listdir("mp3"):
11 if os.path.isfile(os.path.join(directorio, archivo)):
12 notas.append(directorio+archivo)
13
14 def alert():
15 longitud = len(notas)
16 aleatorio = rand.randint(0,longitud)
17 threading.Thread(target=playsound, args=(notas[aleatorio],), daemon=True).start()
18
19
20 def bucle():
21 alert()
22 time.sleep(1)
23 bucle()
24
25 bucle()
26
27





Ejercicio del curso:

notas.py



/Graficas/Sonidos/notas.py

1 #pip install playsound==1.2.2
2 import threading
3 from playsound import playsound
4 import os
5 import time
6 import random as rand
7
8 directorio = 'mp3/'
9 notas = []
10 reproducciones = []
11 for archivo in os.listdir("mp3"):
12 if os.path.isfile(os.path.join(directorio, archivo)):
13 notas.append(directorio+archivo)
14
15 def alert():
16 longitud = len(notas)
17 aleatorio = rand.randint(0,longitud)
18 reproducciones.append(threading.Thread(target=playsound, args=(notas[aleatorio],), daemon=True).start())
19
20 def cierra():
21 print("voy a cerrar")
22
23 def bucle():
24 alert()
25 time.sleep(1)
26 bucle()
27
28 bucle()
29
30





Ejercicio del curso:

notas.py



/Graficas/Sonidos/notas.py

1 import tkinter as tk
2 import random as rand
3 import math
4 import threading
5 from playsound import playsound
6 import os
7 import time
8
9 directorio = 'mp3/'
10 notas = []
11 reproducciones = []
12 for archivo in os.listdir("mp3"):
13 if os.path.isfile(os.path.join(directorio, archivo)):
14 notas.append(directorio+archivo)
15
16 def tocaNota(indice):
17 reproducciones.append(threading.Thread(target=playsound, args=(notas[indice],), daemon=True).start())
18
19 def rgb_to_hex(r, g, b):
20 return '#{:02x}{:02x}{:02x}'.format(r, g, b)
21
22 class Persona():
23 def __init__(self):
24 self.x = 256
25 self.y = 256
26 rojo = rand.randint(0, 255)
27 verde = rand.randint(0, 255)
28 azul = rand.randint(0, 255)
29 self.color = rgb_to_hex(rojo, verde, azul)
30 self.direccion = rand.randint(0, 365)
31 def mueve(self):
32 self.x += math.cos(self.direccion)*5
33 self.y+=math.sin(self.direccion)*5
34 if self.x < 0 or self.y < 0 or self.x > 511 or self.y > 511:
35 self.direccion += 180
36
37 def dibuja(self):
38 lienzo.create_oval(
39 self.x,
40 self.y,
41 self.x+10,
42 self.y+10,
43 fill=self.color
44 )
45
46 personas = []
47 for i in range(0,int(len(notas)/10)):
48 personas.append(Persona())
49
50
51 class Aplicacion(object):
52 def __init__(self,master):
53 self.master = master
54 self.master.after(1000,self.bucle)
55 def bucle(self):
56 lienzo.delete('all')
57 for i in range(0,len(personas)):
58 personas[i].mueve()
59 personas[i].dibuja()
60 if personas[i].x < 0 or personas[i].y < 0 or personas[i].x > 511 or personas[i].y > 511:
61 tocaNota(i)
62 self.master.after(10,self.bucle)
63 raiz = tk.Tk()
64 raiz.geometry("512x512")
65 lienzo = tk.Canvas(width=512, height=512)
66 lienzo.pack()
67
68 aplicacion = Aplicacion(raiz)
69
70





Ejercicio del curso:

notas.py



/Graficas/Sonidos/notas.py

1 import tkinter as tk
2 import random as rand
3 import math
4 import threading
5 from playsound import playsound
6 import os
7 import time
8
9 directorio = 'mp3/'
10 notas = []
11 reproducciones = []
12 for archivo in os.listdir("mp3"):
13 if os.path.isfile(os.path.join(directorio, archivo)):
14 notas.append(directorio+archivo)
15
16 def tocaNota(indice):
17 reproducciones.append(threading.Thread(target=playsound, args=(notas[indice],), daemon=True).start())
18
19 def rgb_to_hex(r, g, b):
20 return '#{:02x}{:02x}{:02x}'.format(r, g, b)
21
22 class Persona():
23 def __init__(self):
24 self.x = 256
25 self.y = 256
26 rojo = rand.randint(0, 255)
27 verde = rand.randint(0, 255)
28 azul = rand.randint(0, 255)
29 self.color = rgb_to_hex(rojo, verde, azul)
30 self.direccion = rand.randint(0, 365)
31 def mueve(self):
32 self.x += math.cos(self.direccion)*5
33 self.y+=math.sin(self.direccion)*5
34 if self.x < 0 or self.y < 0 or self.x > 511 or self.y > 511:
35 self.direccion += 180
36
37 def dibuja(self):
38 lienzo.create_oval(
39 self.x,
40 self.y,
41 self.x+10,
42 self.y+10,
43 fill=self.color
44 )
45
46 personas = []
47 for i in range(0,int(len(notas)/10)):
48 personas.append(Persona())
49
50
51 class Aplicacion(object):
52 def __init__(self,master):
53 self.master = master
54 self.master.after(1000,self.bucle)
55 def bucle(self):
56 lienzo.delete('all')
57 for i in range(0,len(personas)):
58 personas[i].mueve()
59 personas[i].dibuja()
60 if personas[i].x < 0 or personas[i].y < 0 or personas[i].x > 511 or personas[i].y > 511:
61 tocaNota(i)
62 self.master.after(10,self.bucle)
63 raiz = tk.Tk()
64 raiz.geometry("512x512")
65 lienzo = tk.Canvas(width=512, height=512)
66 lienzo.pack()
67
68 aplicacion = Aplicacion(raiz)
69
70





Ejercicio del curso:

notas.py



/Graficas/Sonidos/notas.py

1 import tkinter as tk
2 import random as rand
3 import math
4 import threading
5 from playsound import playsound
6 import os
7 import time
8
9 directorio = 'mp3/'
10 notas = []
11 reproducciones = []
12 for archivo in os.listdir("mp3"):
13 if os.path.isfile(os.path.join(directorio, archivo)):
14 notas.append(directorio+archivo)
15
16 def tocaNota(indice):
17 reproducciones.append(threading.Thread(target=playsound, args=(notas[indice],), daemon=True).start())
18
19 def rgb_to_hex(r, g, b):
20 return '#{:02x}{:02x}{:02x}'.format(r, g, b)
21
22 class Persona():
23 def __init__(self):
24 self.x = 256
25 self.y = 256
26 rojo = rand.randint(0, 255)
27 verde = rand.randint(0, 255)
28 azul = rand.randint(0, 255)
29 self.color = rgb_to_hex(rojo, verde, azul)
30 self.direccion = rand.randint(0, 365)
31 def mueve(self):
32 self.x += math.cos(self.direccion)*5
33 self.y+=math.sin(self.direccion)*5
34 if self.x < 0 or self.y < 0 or self.x > 511 or self.y > 511:
35 self.direccion += 180
36
37 def dibuja(self):
38 lienzo.create_oval(
39 self.x,
40 self.y,
41 self.x+10,
42 self.y+10,
43 fill=self.color
44 )
45
46 personas = []
47 for i in range(0,int(len(notas)/10)):
48 personas.append(Persona())
49
50
51 class Aplicacion(object):
52 def __init__(self,master):
53 self.master = master
54 self.master.after(1000,self.bucle)
55 def bucle(self):
56 lienzo.delete('all')
57 for i in range(0,len(personas)):
58 personas[i].mueve()
59 personas[i].dibuja()
60 if personas[i].x < 0 or personas[i].y < 0 or personas[i].x > 511 or personas[i].y > 511:
61 tocaNota(i)
62 self.master.after(10,self.bucle)
63 raiz = tk.Tk()
64 raiz.geometry("512x512")
65 raiz.configure(bg='black')
66 lienzo = tk.Canvas(width=512, height=512)
67 lienzo.configure(bg='black')
68 lienzo.place(relx=0.5, rely=0.5, anchor=tk.CENTER)
69
70 aplicacion = Aplicacion(raiz)
71
72





Ejercicio del curso:

notas.py



/Graficas/Sonidos/notas.py

1 import tkinter as tk
2 import random as rand
3 import math
4 import threading
5 from playsound import playsound
6 import os
7 import time
8
9 anchura = 300
10
11
12 directorio = 'mp3/'
13 notas = []
14 reproducciones = []
15 for archivo in os.listdir("mp3"):
16 if os.path.isfile(os.path.join(directorio, archivo)):
17 notas.append(directorio+archivo)
18
19 def tocaNota(indice):
20 reproducciones.append(threading.Thread(target=playsound, args=(notas[indice],), daemon=True).start())
21
22 def rgb_to_hex(r, g, b):
23 return '#{:02x}{:02x}{:02x}'.format(r, g, b)
24
25 class Persona():
26 def __init__(self):
27 self.x = anchura/2
28 self.y = anchura/2
29 rojo = rand.randint(0, 255)
30 verde = rand.randint(0, 255)
31 azul = rand.randint(0, 255)
32 self.color = rgb_to_hex(rojo, verde, azul)
33 self.direccion = rand.randint(0, 365)
34 def mueve(self):
35 self.x += math.cos(self.direccion)*5
36 self.y+=math.sin(self.direccion)*5
37 if self.x < 0 or self.y < 0 or self.x > anchura or self.y > anchura:
38 self.direccion += 180
39
40 def dibuja(self):
41 lienzo.create_oval(
42 self.x,
43 self.y,
44 self.x+10,
45 self.y+10,
46 fill=self.color
47 )
48
49 personas = []
50 for i in range(0,int(len(notas)/10)):
51 personas.append(Persona())
52
53
54 class Aplicacion(object):
55 def __init__(self,master):
56 self.master = master
57 self.master.after(1000,self.bucle)
58 def bucle(self):
59 lienzo.delete('all')
60 for i in range(0,len(personas)):
61 personas[i].mueve()
62 personas[i].dibuja()
63 if personas[i].x < 0 or personas[i].y < 0 or personas[i].x > anchura or personas[i].y > anchura:
64 tocaNota(i)
65 self.master.after(10,self.bucle)
66 raiz = tk.Tk()
67 raiz.geometry(str(anchura)+"x"+str(anchura))
68 raiz.configure(bg='black')
69 lienzo = tk.Canvas(width=anchura, height=anchura)
70 lienzo.configure(bg='black')
71 lienzo.place(relx=0.5, rely=0.5, anchor=tk.CENTER)
72
73 aplicacion = Aplicacion(raiz)
74
75





Ejercicio del curso:







Ejercicio del curso:







Ejercicio del curso:







Ejercicio del curso:







Ejercicio del curso:







Ejercicio del curso:







Ejercicio del curso:







Ejercicio del curso:







Ejercicio del curso:







Ejercicio del curso:







Ejercicio del curso:







Ejercicio del curso:







Ejercicio del curso:







Ejercicio del curso:







Ejercicio del curso:







Ejercicio del curso:







Ejercicio del curso:







Ejercicio del curso:







Ejercicio del curso:







Ejercicio del curso:







Ejercicio del curso:







Ejercicio del curso:







Ejercicio del curso:







Ejercicio del curso:







Ejercicio del curso:







Ejercicio del curso:







Ejercicio del curso:







Ejercicio del curso:







Ejercicio del curso:







Ejercicio del curso:







Ejercicio del curso:







Ejercicio del curso:







Ejercicio del curso:







Ejercicio del curso:







Ejercicio del curso:







Ejercicio del curso:







Ejercicio del curso:







Ejercicio del curso:







Ejercicio del curso:







Ejercicio del curso:







Ejercicio del curso:







Ejercicio del curso:







Ejercicio del curso:







Ejercicio del curso:







Ejercicio del curso:







Ejercicio del curso:







Ejercicio del curso:







Ejercicio del curso:







Ejercicio del curso:







Ejercicio del curso:







Ejercicio del curso:







Ejercicio del curso:







Ejercicio del curso:







Ejercicio del curso:







Ejercicio del curso:







Ejercicio del curso:







Ejercicio del curso:







Ejercicio del curso:







Ejercicio del curso:







Ejercicio del curso:







Ejercicio del curso:







Ejercicio del curso:







Ejercicio del curso:







Ejercicio del curso:







Ejercicio del curso:







Ejercicio del curso:







Ejercicio del curso:







Ejercicio del curso:







Ejercicio del curso:







Ejercicio del curso:







Ejercicio del curso:







Ejercicio del curso:







Ejercicio del curso:







Ejercicio del curso:







Ejercicio del curso:







Ejercicio del curso:







Ejercicio del curso:







Ejercicio del curso:







Ejercicio del curso:







Ejercicio del curso:







Ejercicio del curso:







Ejercicio del curso:







Ejercicio del curso:







Ejercicio del curso:







Ejercicio del curso:







Ejercicio del curso:







Ejercicio del curso:







Ejercicio del curso:







Ejercicio del curso:







10.7.1.-mp3

Ejercicio del curso:



Ejercicio del curso:



Ejercicio del curso:



Ejercicio del curso:



Ejercicio del curso:



Ejercicio del curso:



Ejercicio del curso:



Ejercicio del curso:



Ejercicio del curso:



Ejercicio del curso:



Ejercicio del curso:



Ejercicio del curso:



Ejercicio del curso:



Ejercicio del curso:



Ejercicio del curso:



Ejercicio del curso:



Ejercicio del curso:



Ejercicio del curso:



Ejercicio del curso:



Ejercicio del curso:



Ejercicio del curso:



Ejercicio del curso:



Ejercicio del curso:



Ejercicio del curso:



Ejercicio del curso:



Ejercicio del curso:



Ejercicio del curso:



Ejercicio del curso:



Ejercicio del curso:



Ejercicio del curso:



Ejercicio del curso:



Ejercicio del curso:



Ejercicio del curso:



Ejercicio del curso:



Ejercicio del curso:



Ejercicio del curso:



Ejercicio del curso:



Ejercicio del curso:



Ejercicio del curso:



Ejercicio del curso:



Ejercicio del curso:



Ejercicio del curso:



Ejercicio del curso:



Ejercicio del curso:



Ejercicio del curso:



Ejercicio del curso:



Ejercicio del curso:



Ejercicio del curso:



Ejercicio del curso:



Ejercicio del curso:



Ejercicio del curso:



Ejercicio del curso:



Ejercicio del curso:



Ejercicio del curso:



Ejercicio del curso:



Ejercicio del curso:



Ejercicio del curso:



Ejercicio del curso:



Ejercicio del curso:



Ejercicio del curso:



Ejercicio del curso:



Ejercicio del curso:



Ejercicio del curso:



Ejercicio del curso:



Ejercicio del curso:



Ejercicio del curso:



Ejercicio del curso:



Ejercicio del curso:



Ejercicio del curso:



Ejercicio del curso:



Ejercicio del curso:



Ejercicio del curso:



Ejercicio del curso:



Ejercicio del curso:



Ejercicio del curso:



Ejercicio del curso:



Ejercicio del curso:



Ejercicio del curso:



Ejercicio del curso:



Ejercicio del curso:



Ejercicio del curso:



Ejercicio del curso:



Ejercicio del curso:



Ejercicio del curso:



Ejercicio del curso:



Ejercicio del curso:



Ejercicio del curso:



Ejercicio del curso:



Ejercicio del curso:



10.8.-Flask

Ejercicio del curso:

copia.py



/Graficas/Flask/ copia.py

1 from flask import Flask
2 from flask import request
3
4
5 from bs4 import BeautifulSoup
6 app = Flask(__name__)
7
8
9 @app.route('/')
10 def inicio():
11 return "Hola"
12
13 if __name__ == '__main__':
14 app.run(host='0.0.0.0', port=80)





Ejercicio del curso:



/Graficas/Flask/app.py

1 from flask import Flask
2 from flask import request
3
4
5 from bs4 import BeautifulSoup
6 app = Flask(__name__)
7
8 edad = 45
9
10 @app.route('/')
11 def inicio():
12 global edad
13 edad += 1
14 return str(edad)
15
16 if __name__ == '__main__':
17 app.run(host='0.0.0.0', port=80)





Ejercicio del curso:







Ejercicio del curso:







Ejercicio del curso:



Ejercicio del curso: