Skip to content

Commit 284a716

Browse files
authored
Merge pull request mouredev#4572 from Jesusway69/main
#25 - Python
2 parents 53fead4 + 1ac5609 commit 284a716

File tree

1 file changed

+166
-0
lines changed

1 file changed

+166
-0
lines changed
Lines changed: 166 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,166 @@
1+
import os, platform,logging
2+
3+
if (platform.platform().startswith("macOS") or platform.platform().startswith("Linux")):
4+
os.system('clear')
5+
else:
6+
os.system('cls')
7+
8+
9+
""" * EJERCICIO:
10+
* Explora el concepto de "logging" en tu lenguaje. Configúralo y muestra
11+
* un ejemplo con cada nivel de "severidad" disponible.
12+
*
13+
"""
14+
15+
16+
#Valores representativos en número de cada nivel de severidad
17+
#NONSET = 0
18+
#DEBUG = 10
19+
#INFO = 20
20+
#WARNING = 30
21+
#ERROR = 40
22+
#CRITICAL = 50
23+
24+
LEVELS = {
25+
'notset': logging.NOTSET,
26+
'debug': logging.DEBUG,
27+
'info': logging.INFO,
28+
'warning': logging.WARNING,
29+
'error': logging.ERROR,
30+
'critical': logging.CRITICAL,
31+
}
32+
33+
level = LEVELS.get('debug')#Podemos establecer el nivel mínimo de severidad desde una variable
34+
35+
36+
logging.basicConfig(
37+
#filename="#25.log", #Podemos creal un fichero con extensión .log para almacenar los mensajes de logging
38+
#filemode= "a", # Con el modo "a" añadimos siempre al final del fichero los nuevos mensajes, con "w" solo se guradan los últimos mensajes
39+
encoding="utf-8",
40+
level=level,#Tambien podemos asignar a la clave level del diccionario de configuración básico el propio nivel
41+
# así: level=logging.DEBUG o con su valor numérico así: level=10
42+
format="%(asctime)s,%(msecs)1d - %(levelname)s %(message)s",#En format determinamos el formato del mensaje de logging
43+
datefmt='%d-%B-%Y,%H:%M:%S'#En datefmt le damos formato concreto a la fecha y hora igual que haríamos con datetime.datetime.strftime()
44+
)
45+
46+
47+
def division(a:int, b:int)->int:
48+
try:
49+
result = round((a / b),2)
50+
logging.info(f"División de {a} entre {b}. Resultado: {result} , operación correcta")
51+
#Mensaje de logging formateado para mostrar si el resultado de la función es correcto
52+
except ZeroDivisionError as zero:
53+
result = None
54+
logging.error(zero)
55+
except TypeError as type:
56+
result = None
57+
logging.error(type)
58+
59+
return result
60+
61+
def to_upper(text:str)->str: #Podemos prevenir los posibles errores dentro de las funciones con generación de mensajes de logging
62+
try:
63+
text = text*2
64+
text = text.upper()
65+
66+
logging.info(text)
67+
except ValueError as val:
68+
text = None
69+
logging.warning(val) #Dentro de una excepción específica..
70+
except Exception as ex:
71+
text = None
72+
logging.warning(ex) # o dentro de una excepción genérica
73+
74+
return text
75+
76+
def show_element(my_list:list,index:int)->int:
77+
try:
78+
num = my_list[index]
79+
logging.info(f"El índice {index} de la lista {my_list} es {num}")
80+
#Mensaje de logging formateado para mostrar si el resultado de la función es correcto
81+
except IndexError as indexerr:
82+
num = None
83+
logging.critical(indexerr)
84+
85+
86+
87+
try:
88+
division(8, 3)#Función con valores válidos para una división
89+
division(2, 0)#Aquí provocamos un error de division entre cero
90+
division(9, "3")#Aquí provocamos un error de tipo de dato
91+
print()
92+
show_element([1,2,3],2)#Función con valores correctos para mostrar un elemento de una lista
93+
show_element([1,2,3],3)#Aquí provocamos un error de fuera de índice
94+
print()
95+
to_upper(45)#Provocamos un error porque aunque un int admite multiplicación no admite el método .upper()
96+
to_upper("Hola Python ")#Aquí le pasamos un string que admite multiplicación y método .upper()
97+
to_upper("Hola", "Python")#Aquí provocamos que no se pueda ejecutar la función y el programa salta al except,
98+
# si pusiéramos esta llamada al principio de esta lista no se ejecutaría ninguna llamada
99+
100+
except Exception as ex:
101+
logging.warning(ex)
102+
print("excepción general antes de la función")
103+
#Tambien podemos prevenir los errores que no permiten ejecutar la función como en el caso de
104+
# to_upper() al que le estamos pasando 2 argumentos cuando requiere solo uno
105+
106+
107+
#Tambien podemos generar mensajes de logging no relacionados con la propia ejecución como este que
108+
# nos da información del sistema operativo , su versión y la versión en este caso de python que estamos usando
109+
logging.info(f"Runnig at: {platform.platform()} with Python {platform.python_version()}")
110+
111+
112+
""" * DIFICULTAD EXTRA (opcional):
113+
* Crea un programa ficticio de gestión de tareas que permita añadir, eliminar
114+
* y listar dichas tareas.
115+
* - Añadir: recibe nombre y descripción.
116+
* - Eliminar: por nombre de la tarea.
117+
* Implementa diferentes mensajes de log que muestren información según la
118+
* tarea ejecutada (a tu elección).
119+
* Utiliza el log para visualizar el tiempo de ejecución de cada tarea."""
120+
121+
122+
tasks = {}
123+
124+
def add_task(task:str,description:str):
125+
tasks[task]= description
126+
logging.info(f"La tarea {task} se ha añadido correctamente\n")
127+
128+
def show_tasks():
129+
[print("Tarea: ", t ,"- Descripción: ", d , end = '\n') for t,d in tasks.items()]
130+
print()
131+
132+
def delete_task(task:str):
133+
if task in tasks:
134+
tasks.pop(task)
135+
logging.info(f"La tarea {task} ha sido eliminada correctamente\n")
136+
else:
137+
logging.warning(f"Tarea {task} no encontrada\n")
138+
139+
140+
while True:
141+
option = input("-1 Mostrar tareas \n-2 Añadir tarea \n-3 Borrar tarea \n-4 Salir\nSeleccione una opción: ")
142+
if not option.isdigit():
143+
logging.error(": Sólo se pueden introducir caracteres numéricos, intente de nuevo\n")
144+
elif int(option)<1 or int(option)>4:
145+
logging.warning(": El número no debe ser diferente a las opciones mostradas, intente de nuevo\n")
146+
else:
147+
option = int(option)
148+
149+
if option == 1:
150+
logging.debug("listado de tareas:")
151+
show_tasks()
152+
continue
153+
elif option == 2:
154+
task_name = input("Escriba el nombre de la tarea: ")
155+
task_desc = input("Describa la tarea: ")
156+
add_task(task_name,task_desc)
157+
continue
158+
elif option == 3:
159+
task_name = input("Escriba el nombre de la tarea a borrar: ")
160+
delete_task(task_name)
161+
continue
162+
elif option == 4:
163+
logging.warning(": Está saliendo del programa")
164+
break
165+
166+

0 commit comments

Comments
 (0)