Skip to content

Commit fd2cf99

Browse files
authored
Merge pull request mouredev#7464 from santiagobailleres/ej00
#7 - Python
2 parents 9b6276e + 22339c7 commit fd2cf99

File tree

3 files changed

+315
-0
lines changed

3 files changed

+315
-0
lines changed
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,107 @@
1+
'''EJERCICIO:
2+
Implementa los mecanismos de introducción y recuperación de elementos propios de las
3+
pilas (stacks - LIFO) y las colas (queue - FIFO) utilizando una estructura de array
4+
o lista (dependiendo de las posibilidades de tu lenguaje).
5+
6+
DIFICULTAD EXTRA (opcional):
7+
- Utilizando la implementación de pila y cadenas de texto, simula el mecanismo adelante/atrás
8+
de un navegador web. Crea un programa en el que puedas navegar a una página o indicarle
9+
que te quieres desplazar adelante o atrás, mostrando en cada caso el nombre de la web.
10+
Las palabras "adelante", "atrás" desencadenan esta acción, el resto se interpreta como
11+
el nombre de una nueva web.
12+
- Utilizando la implementación de cola y cadenas de texto, simula el mecanismo de una
13+
impresora compartida que recibe documentos y los imprime cuando así se le indica.
14+
La palabra "imprimir" imprime un elemento de la cola, el resto de palabras se
15+
interpretan como nombres de documentos.'''
16+
17+
# Implementación de pilas y colas en Python
18+
# Pilas/stack: LIFO (Last In, First Out)
19+
pila = []
20+
# push: añadir un elemento a la pila
21+
pila.append(1)
22+
pila.append(2)
23+
pila.append(3)
24+
pila.append(4)
25+
pila.append(5)
26+
print(pila)
27+
# pop: eliminar un elemento de la pila
28+
pila.pop()
29+
print(pila)
30+
print(pila.pop()) # este método devuelve el elemento eliminado
31+
print(pila)
32+
print(pila.pop())
33+
print(pila)
34+
35+
# Colas/queue: FIFO (First In, First Out)
36+
cola = []
37+
# enqueue: añadir un elemento a la cola
38+
cola.append(1)
39+
cola.append(2)
40+
cola.append(3)
41+
cola.append(4)
42+
cola.append(5)
43+
print(cola)
44+
# dequeue: eliminar un elemento de la cola
45+
cola.pop(0) # pop(0) elimina el primer elemento de la lista
46+
print(cola)
47+
print(cola.pop(0)) # este método devuelve el elemento eliminado
48+
print(cola)
49+
50+
# EXTRA
51+
'''- Utilizando la implementación de pila y cadenas de texto, simula el mecanismo adelante/atrás
52+
de un navegador web. Crea un programa en el que puedas navegar a una página o indicarle
53+
que te quieres desplazar adelante o atrás, mostrando en cada caso el nombre de la web.
54+
Las palabras "adelante", "atrás" desencadenan esta acción, el resto se interpreta como
55+
el nombre de una nueva web.
56+
- Utilizando la implementación de cola y cadenas de texto, simula el mecanismo de una
57+
impresora compartida que recibe documentos y los imprime cuando así se le indica.
58+
La palabra "imprimir" imprime un elemento de la cola, el resto de palabras se
59+
interpretan como nombres de documentos.'''
60+
61+
# Navegador web
62+
def web_browser():
63+
stack = []
64+
65+
while True:
66+
67+
action = input(
68+
"Añade una url o interactúa con palabras adelante/atrás/salir: "
69+
)
70+
71+
if action == "salir":
72+
print("Saliendo del navegador web.")
73+
break
74+
elif action == "adelante":
75+
pass
76+
elif action == "atrás" or action == "atras":
77+
if len(stack) > 0:
78+
stack.pop()
79+
else:
80+
stack.append(action)
81+
82+
if len(stack) > 0:
83+
print(f"Has navegado a la web: {stack[len(stack) - 1]}.")
84+
else:
85+
print("Estás en la página de inicio.")
86+
87+
#web_browser()
88+
89+
# Impresora compartida
90+
def printer():
91+
queue = []
92+
while True:
93+
action = input("Ingrese el nombre de un documento o 'imprimir'/'salir': ")
94+
if action == "salir":
95+
print("Saliendo de la impresora...")
96+
break
97+
elif action == "imprimir":
98+
if len(queue) > 0:
99+
print(f"Imprimiendo documento: {queue[0]}.")
100+
queue.pop(0)
101+
else:
102+
print("No hay documentos en la cola.")
103+
else:
104+
queue.append(action)
105+
print(f"Documentos en cola: {queue}")
106+
107+
printer()
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,108 @@
1+
'''EJERCICIO:
2+
Explora el concepto de clase y crea un ejemplo que implemente un inicializador,
3+
atributos y una función que los imprima (teniendo en cuenta las posibilidades
4+
de tu lenguaje).
5+
Una vez implementada, créala, establece sus parámetros, modifícalos e imprímelos
6+
utilizando su función.
7+
DIFICULTAD EXTRA (opcional):
8+
Implementa dos clases que representen las estructuras de Pila y Cola (estudiadas
9+
en el ejercicio número 7 de la ruta de estudio)
10+
- Deben poder inicializarse y disponer de operaciones para añadir, eliminar,
11+
retornar el número de elementos e imprimir todo su contenido.'''
12+
13+
# Clase/class: es un molde para crear objetos. Un objeto es una instancia de una clase.
14+
# Atributos/atributes: son las características que tiene un objeto.
15+
# Métodos/methods: son las acciones que puede realizar un objeto.
16+
# Constructor/initializer: es un método que se llama cuando se crea un objeto.
17+
# self: es una referencia al objeto que se está creando.
18+
# __init__: es el método constructor de una clase.
19+
# __str__: es el método que se llama cuando se imprime un objeto.
20+
21+
class Persona:
22+
surname: str = None # surname es un atributo de clase
23+
def __init__(self, name: str, age: int, habilidades: list):
24+
self.name = name
25+
self.age = age
26+
self.habilidades = habilidades
27+
28+
def __str__(self):
29+
return f'Nombre: {self.name}, Apellido: {self.surname}, Age: {self.age}, Habilidades: {self.habilidades}'
30+
31+
mi_persona = Persona('Santiago', 24, ['Python', 'SQL'])
32+
mi_persona.surname = 'Bailleres'
33+
print(mi_persona)
34+
mi_persona.age = 25
35+
print(mi_persona)
36+
37+
# EXTRA
38+
# Clase Pila (Stack) LIFO
39+
class Pila:
40+
def __init__(self): # self es una referencia al objeto que se está creando
41+
self.items = []
42+
43+
def push(self, item):
44+
self.items.append(item)
45+
46+
def pop(self):
47+
if self.count() == 0:
48+
return None
49+
return self.items.pop()
50+
51+
def count(self):
52+
return len(self.items)
53+
54+
def print(self):
55+
for item in reversed(self.items):
56+
print(item)
57+
58+
mi_pila = Pila()
59+
mi_pila.push(1)
60+
mi_pila.push(2)
61+
mi_pila.push(3)
62+
print(mi_pila.count())
63+
mi_pila.print()
64+
mi_pila.pop()
65+
print(mi_pila.count())
66+
print('---')
67+
print(mi_pila.pop())
68+
print(mi_pila.pop())
69+
print(mi_pila.pop())
70+
print(mi_pila.pop())
71+
print(mi_pila.count())
72+
print('---')
73+
74+
# Clase Cola (Queue) FIFO
75+
class Cola:
76+
def __init__(self):
77+
self.queue = []
78+
79+
def enqueue(self, item):
80+
self.queue.append(item)
81+
82+
def dequeue(self):
83+
if self.count() == 0:
84+
return None
85+
return self.queue.pop(0)
86+
87+
def count(self):
88+
return len(self.queue)
89+
90+
def print(self):
91+
for item in self.queue:
92+
print(item)
93+
94+
mi_cola = Cola()
95+
mi_cola.enqueue('A')
96+
mi_cola.enqueue('B')
97+
mi_cola.enqueue('C')
98+
print(mi_cola.count())
99+
print('---')
100+
mi_cola.print()
101+
mi_cola.dequeue()
102+
print(mi_cola.count())
103+
print('---')
104+
print(mi_cola.dequeue())
105+
print(mi_cola.dequeue())
106+
print(mi_cola.dequeue())
107+
print(mi_cola.dequeue())
108+
print(mi_cola.count())
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,100 @@
1+
'''EJERCICIO:
2+
Explora el concepto de herencia según tu lenguaje. Crea un ejemplo que
3+
implemente una superclase Animal y un par de subclases Perro y Gato,
4+
junto con una función que sirva para imprimir el sonido que emite cada Animal.
5+
DIFICULTAD EXTRA (opcional):
6+
Implementa la jerarquía de una empresa de desarrollo formada por Empleados que
7+
pueden ser Gerentes, Gerentes de Proyectos o Programadores.
8+
Cada empleado tiene un identificador y un nombre.
9+
Dependiendo de su labor, tienen propiedades y funciones exclusivas de su
10+
actividad, y almacenan los empleados a su cargo.'''
11+
12+
# Superclase: una superclase es una clase de la que se heredan otras clases.
13+
class Animal:
14+
def __init__(self, nombre):
15+
self.nombre = nombre
16+
17+
def sonido(self): # Método que se hereda a las subclases
18+
pass # Este método se define en las subclases. Pass es una palabra clave que no hace nada.
19+
20+
# Subclases: una subclase es una clase que hereda de una superclase.
21+
class Dog(Animal):
22+
def sonido(self):
23+
print('Guau')
24+
25+
class Cat(Animal):
26+
def sonido(self):
27+
print('Miau')
28+
29+
def sonido_animal(animal: Animal):
30+
animal.sonido() # Llama al método sonido de la clase animal
31+
32+
mi_animal = Animal('Animal')
33+
sonido_animal(mi_animal)
34+
mi_perro = Dog('Perro')
35+
sonido_animal(mi_perro)
36+
mi_gato = Cat('Gato')
37+
sonido_animal(mi_gato)
38+
39+
# EXTRA
40+
class Empleado:
41+
def __init__(self, id:int, nombre:str):
42+
self.id = id
43+
self.nombre = nombre
44+
self.employees=[]
45+
46+
def add_employee(self, employee):
47+
self.employees.append(employee)
48+
49+
def print_employees(self):
50+
for employee in self.employees:
51+
print(employee.nombre)
52+
53+
class Gerente(Empleado):
54+
def coordinate_projects(self):
55+
print(f"{self.nombre} está coordinando todos los proyectos de la empresa.")
56+
57+
class GerenteProyecto(Empleado):
58+
def __init__(self, id:int, nombre:str, project:str):
59+
super().__init__(id, nombre)
60+
self.project = project
61+
62+
def coordinate_project(self):
63+
print(f"{self.nombre} está coordinando el proyecto {self.project}.")
64+
65+
class Programador(Empleado):
66+
def __init__(self, id:int, nombre:str, lenguaje:str):
67+
super().__init__(id, nombre)
68+
self.lenguaje = lenguaje
69+
70+
def code(self):
71+
print(f"{self.nombre} está programando en {self.lenguaje}.")
72+
73+
def add(self, employee:Empleado):
74+
print(f"Un programador no tiene empleados a su cargo. {employee.nombre} no se añadirá.")
75+
76+
# Crear empleados
77+
mi_gerente = Gerente(1, 'Santiago Bailleres')
78+
mi_project_manager = GerenteProyecto(2, 'Juan Perez', 'Proyecto 1')
79+
mi_project_manager2 = GerenteProyecto(3, 'Pedro Lopez', 'Proyecto 2')
80+
mi_programador = Programador(4, 'Maria Garcia', 'Python')
81+
mi_programador2 = Programador(5, 'Ana Martinez', 'Java')
82+
mi_programador3 = Programador(6, 'Luis Ramirez', 'C++')
83+
mi_programador4 = Programador(7, 'Carlos Sanchez', 'JavaScript')
84+
85+
mi_gerente.add_employee(mi_project_manager)
86+
mi_gerente.add_employee(mi_project_manager2)
87+
88+
mi_project_manager.add_employee(mi_programador)
89+
mi_project_manager.add_employee(mi_programador2)
90+
mi_project_manager2.add_employee(mi_programador3)
91+
mi_project_manager2.add_employee(mi_programador4)
92+
93+
mi_programador.add(mi_programador4)
94+
95+
mi_programador.code()
96+
mi_project_manager.coordinate_project()
97+
mi_gerente.coordinate_projects()
98+
mi_gerente.print_employees()
99+
mi_project_manager.print_employees()
100+
mi_programador.print_employees()

0 commit comments

Comments
 (0)