Skip to content

Commit 92a2a8b

Browse files
authored
Merge pull request mouredev#4795 from CesarCarmona30/main
#27 - Python
2 parents 4d4c010 + 60baa17 commit 92a2a8b

File tree

5 files changed

+465
-0
lines changed

5 files changed

+465
-0
lines changed
Lines changed: 62 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,62 @@
1+
'''
2+
EJERCICIO
3+
'''
4+
5+
class Singleton:
6+
_instance = None
7+
8+
def __new__(cls):
9+
if cls._instance is None:
10+
print("Creating instance")
11+
cls._instance = super(Singleton, cls).__new__(cls)
12+
print("Using instance")
13+
return cls._instance
14+
15+
instance1 = Singleton()
16+
instance2 = Singleton()
17+
18+
print(instance1 is instance2)
19+
20+
'''
21+
EXTRA
22+
'''
23+
24+
class Session():
25+
_instance = None
26+
27+
id = None
28+
username = None
29+
name = None
30+
email = None
31+
32+
def __new__(cls):
33+
if cls._instance is None:
34+
cls._instance = super(Session, cls).__new__(cls)
35+
return cls._instance
36+
37+
def set_user(self, id, username, name, email):
38+
self.id = id
39+
self.username = username
40+
self.name = name
41+
self.email = email
42+
43+
def get_user(self):
44+
return f'User: {self.id}, {self.username}, {self.name}, {self.email}'
45+
46+
def clear_user(self):
47+
self.id = None
48+
self.username = None
49+
self.name = None
50+
self.email = None
51+
52+
session1 = Session()
53+
print(session1.get_user())
54+
session1.set_user(1, "leroy58", "César Leroy", "cesarcarmona@gmail.com")
55+
print(session1.get_user())
56+
57+
session2 = Session()
58+
print(session2.get_user())
59+
60+
session3 = Session()
61+
session3.clear_user()
62+
print(session3.get_user())
Lines changed: 67 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,67 @@
1+
'''
2+
EJERCICIO
3+
'''
4+
5+
"""
6+
Ejercicio
7+
"""
8+
9+
10+
def print_call(function):
11+
def print_function():
12+
print(f"La función '{function.__name__}' ha sido llamada.")
13+
return function
14+
return print_function
15+
16+
17+
@print_call
18+
def example_function():
19+
pass
20+
21+
22+
@print_call
23+
def example_function_2():
24+
pass
25+
26+
27+
@print_call
28+
def example_function_3():
29+
pass
30+
31+
example_function()
32+
example_function_2()
33+
example_function_3()
34+
35+
36+
'''
37+
EXTRA
38+
'''
39+
40+
def call_counter(function):
41+
def counter_function():
42+
counter_function.call_count += 1
43+
print(
44+
f"La función '{function.__name__} se ha llamado {counter_function.call_count}' veces.")
45+
return function
46+
47+
counter_function.call_count = 0
48+
return counter_function
49+
50+
51+
@call_counter
52+
def example_function_4():
53+
pass
54+
55+
56+
@call_counter
57+
def example_function_5():
58+
pass
59+
60+
61+
example_function_4()
62+
example_function_4()
63+
example_function_4()
64+
example_function_4()
65+
example_function_5()
66+
example_function_4()
67+
example_function_5()
Lines changed: 73 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,73 @@
1+
import logging
2+
import time
3+
4+
'''
5+
EJERCICIO
6+
'''
7+
8+
logging.basicConfig(level=logging.DEBUG,
9+
format='%(asctime)s - %(levelname)s - %(message)s',
10+
handlers=[logging.StreamHandler()])
11+
12+
logging.debug('Esto es un mensaje de DEBUG')
13+
logging.info('Esto es un mensaje de INFO')
14+
logging.warning('Esto es un mensaje de WARNING')
15+
logging.error('Esto es un mensaje de ERROR')
16+
logging.critical('Esto es un mensaje de CRITICAL')
17+
18+
'''
19+
EXTRA
20+
'''
21+
22+
class TaskManager:
23+
def __init__(self) -> None:
24+
self.tasks = {}
25+
26+
def add_task(self, name, description):
27+
start_time = time.time()
28+
if name not in self.tasks:
29+
self.tasks[name] = description
30+
logging.info(f"Tarea añadida: {name}.")
31+
else:
32+
logging.warning(
33+
f"Se ha intentado añadir una tarea que ya existe: {name}.")
34+
logging.debug(f"Número de tareas: {len(self.tasks)}")
35+
end_time = time.time()
36+
self._print_time(start_time, end_time)
37+
38+
def delete_task(self, name):
39+
start_time = time.time()
40+
if name in self.tasks:
41+
del self.tasks[name]
42+
logging.info(f"Se ha eliminado la tarea: {name}.")
43+
else:
44+
logging.error(
45+
f"Se ha intentado eliminar una tarea que no existe: {name}.")
46+
logging.debug(f"Número de tareas: {len(self.tasks)}")
47+
end_time = time.time()
48+
self._print_time(start_time, end_time)
49+
50+
def list_tasks(self):
51+
start_time = time.time()
52+
if self.tasks:
53+
logging.info(f"Lista de tareas: ")
54+
for name, description in self.tasks.items():
55+
print(f"{name} - {description}")
56+
else:
57+
logging.info("No hay tareas para mostrar.")
58+
end_time = time.time()
59+
self._print_time(start_time, end_time)
60+
61+
def _print_time(self, start_time, end_time):
62+
logging.debug(
63+
f"Tiempo de ejecución {end_time - start_time:.6f} seg." )
64+
65+
task_manager = TaskManager()
66+
task_manager.list_tasks()
67+
task_manager.add_task("Pan", "Comprar 5 barras de pan")
68+
task_manager.add_task("Python", "Estudiar Python")
69+
task_manager.list_tasks()
70+
task_manager.delete_task("Python")
71+
task_manager.list_tasks()
72+
task_manager.add_task("Pan", "Comprar 5 barras de pan")
73+
task_manager.delete_task("Python")
Lines changed: 137 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,137 @@
1+
'''
2+
EJERCICIO
3+
'''
4+
5+
# Incorrecto
6+
7+
class User:
8+
9+
def __init__(self, name, email) -> None:
10+
self.name = name
11+
self.email = email
12+
13+
def save_to_database(self):
14+
pass
15+
16+
def send_email(self):
17+
pass
18+
19+
20+
# Correcto
21+
22+
class User:
23+
24+
def __init__(self, name, email) -> None:
25+
self.name = name
26+
self.email = email
27+
28+
class UserService:
29+
30+
def save_to_database(self, user):
31+
pass
32+
33+
class EmailService:
34+
35+
def send_email(self, email, message):
36+
pass
37+
38+
'''
39+
EXTRA
40+
'''
41+
42+
# Incorrecto
43+
44+
class Library:
45+
def __init__(self) -> None:
46+
self.books = []
47+
self.users = []
48+
self.loans = []
49+
50+
def add_book(self, title, author, copies):
51+
self.books.append({"title": title, "author": author, "copies": copies})
52+
53+
def add_user(self, name, id, email):
54+
self.users.append({"id": id, "name": name, "email": email})
55+
56+
def loan_book(self, user_id, book_title):
57+
for book in self.books:
58+
if book["title"] == book_title and book["copies"] > 0:
59+
book["copies"] -= 1
60+
self.loans.append(
61+
{"user_id": user_id, "book_title": book_title})
62+
return True
63+
return False
64+
65+
def return_book(self, user_id, book_title):
66+
for loan in self.loans:
67+
if loan["user_id"] == user_id and loan["book_title"] == book_title:
68+
self.loans.remove(loan)
69+
for book in self.books:
70+
if book["title"] == book_title:
71+
book["copies"] += 1
72+
return True
73+
return False
74+
75+
# Correcto
76+
77+
class Book:
78+
79+
def __init__(self, title, author, copies):
80+
self.title = title
81+
self.author = author
82+
self.copies = copies
83+
84+
class User:
85+
86+
def __init__(self, name, id, email):
87+
self.name = name
88+
self.id = id
89+
self.email = email
90+
91+
class Loan:
92+
93+
def __init__(self):
94+
self.loans = []
95+
96+
def loan_bool(self, user, book):
97+
if book.copies > 0:
98+
book.copies -= 1
99+
self.loans.append(
100+
{"user_id": user.id, "book_title": book.title})
101+
return True
102+
return False
103+
104+
def return_book(self, user, book):
105+
for loan in self.loans:
106+
if loan["user_id"] == user.id and loan["book_title"] == book.title:
107+
self.loans.remove(loan)
108+
book.copies += 1
109+
return True
110+
return False
111+
112+
class Library:
113+
114+
def __init__(self) -> None:
115+
self.books = []
116+
self.users = []
117+
self.loans_service = Loan()
118+
119+
def add_book(self, book):
120+
self.books.append(book)
121+
122+
def add_user(self, user):
123+
self.users.append(user)
124+
125+
def loan_book(self, user_id, book_title):
126+
user = next((u for u in self.users if u.id == user_id), None)
127+
book = next((b for b in self.books if b.title == book_title), None)
128+
if user and book:
129+
return self.loans_service.loan_book(user, book)
130+
return False
131+
132+
def return_book(self, user_id, book_title):
133+
user = next((u for u in self.users if u.id == user_id), None)
134+
book = next((b for b in self.books if b.title == book_title), None)
135+
if user and book:
136+
return self.loans_service.return_book(user, book)
137+
return False

0 commit comments

Comments
 (0)