Skip to content

Commit 8140029

Browse files
authored
Merge pull request mouredev#7092 from mordevspt/main
#8 - Python
2 parents ceb150c + ec49d79 commit 8140029

File tree

1 file changed

+285
-0
lines changed

1 file changed

+285
-0
lines changed
Lines changed: 285 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,285 @@
1+
"""
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+
6+
Una vez implementada, créala, establece sus parámetros, modifícalos e imprímelos
7+
utilizando su función.
8+
"""
9+
10+
# Clase única
11+
class Alumno:
12+
# Inicializador - Constructor
13+
def __init__(self,nombre, curso):
14+
self.nombre = nombre
15+
self.clase = curso
16+
# Método para saludar a otro alumno por su nombre
17+
def saludar(self,nombre):
18+
print(f"Hola {nombre}")
19+
# Método donde nos identifica y muestra nuestro nombre como alumno
20+
def quienSoy(self):
21+
print(f"Soy {self.nombre}")
22+
23+
# Instanciación
24+
alumno1 = Alumno("Juan","Primaria")
25+
print(f"Se ha instanciado un alumno con nombre {alumno1.nombre} en la clase de {alumno1.clase}.")
26+
27+
alumno2 = Alumno("Pablo","Secundaria")
28+
print(f"Se ha instanciado un alumno con nombre {alumno2.nombre} en la clase de {alumno2.clase}.")
29+
30+
# Uso de sus métodos
31+
alumno1.saludar(alumno2.nombre)
32+
alumno1.quienSoy()
33+
alumno2.saludar(alumno1.nombre)
34+
35+
# Clase con Herencia
36+
class Area:
37+
# Método iniciador común para el cálculo de área
38+
def __init__(self,b,h):
39+
self.b = b
40+
self.h = h
41+
# Cada tipo de polígono tiene una forma diferente de calcular su área
42+
class Rectangulo(Area):
43+
# Cálculo de área concreto de un rectángulo
44+
def calcularArea(self):
45+
return self.b * self.h
46+
47+
class Triangulo(Area):
48+
# Cálculo de área concreto de un triángulo
49+
def calcularArea(self):
50+
return (self.b * self.h) / 2
51+
52+
# Instanciación
53+
rectangulo = Rectangulo(30,80)
54+
print(f"Se ha instanciado un Rectángulo de 30 de base * 80 de altura")
55+
triangulo = Triangulo(75,90)
56+
print(f"Se ha instanciado un Triángulo de 75 de base * 90 de altura")
57+
58+
# Uso de sus métodos
59+
print(f"El área del rectángulo es de: {rectangulo.calcularArea()}")
60+
print(f"El área del triángulo es de: {triangulo.calcularArea()}")
61+
62+
"""
63+
DIFICULTAD EXTRA (opcional):
64+
Implementa dos clases que representen las estructuras de Pila y Cola (estudiadas
65+
en el ejercicio número 7 de la ruta de estudio)
66+
- Deben poder inicializarse y disponer de operaciones para añadir, eliminar,
67+
retornar el número de elementos e imprimir todo su contenido.
68+
"""
69+
70+
# EJERCICIO 1 - REESCRITO
71+
# LIFO
72+
print("\nEJERCICIO 1 - REESCRITO\n")
73+
74+
class navegacionWeb():
75+
# INICIALIZADOR
76+
def __init__(self):
77+
self.mi_stack = [] # Iniciamos la pila
78+
# METODOS
79+
# Añadir elemento
80+
def nuevoElemento(self,respuesta):
81+
self.mi_stack.append(respuesta)
82+
# Eliminar elemento
83+
def eliminarElemento(self):
84+
self.mi_stack.pop()
85+
# Imprimir elementos
86+
def imprimirElementos(self):
87+
# Recorrido a la reversa
88+
for elemento in reversed(self.mi_stack):
89+
print(elemento)
90+
# Cantidad elementos
91+
def cantidadElementos(self):
92+
return len(self.mi_stack)
93+
# Pregunta inicial
94+
def preguntarAlUsuario(self):
95+
return input("Escribe una página, navega hacia adelante, atras, imprimir o salir: ")
96+
# Navegación
97+
def showWebSiteUser(self):
98+
print(f"Navegando por la web: {self.mi_stack[len(self.mi_stack)-1]}")
99+
100+
# Programa Inicial
101+
def navegacion():
102+
# Instanciamos un objeto
103+
browser = navegacionWeb()
104+
respuesta = browser.preguntarAlUsuario()
105+
while True:
106+
match respuesta:
107+
case "atras":
108+
if browser.cantidadElementos() >= 1:
109+
# Eliminamos el último registro
110+
browser.eliminarElemento()
111+
# Para no provocar un problema en caso de no quedar elementos en la pila
112+
if (browser.cantidadElementos() > 0):
113+
browser.showWebSiteUser()
114+
else:
115+
print("Ha llegado al principio")
116+
# Pase lo que pase
117+
respuesta = browser.preguntarAlUsuario()
118+
case "adelante":
119+
print("No es posible")
120+
respuesta = browser.preguntarAlUsuario()
121+
case "salir":
122+
print("\n¡HASTA LUEGO!\n")
123+
break
124+
case "imprimir":
125+
if browser.cantidadElementos() >= 1:
126+
print("\nELEMENTOS DE LA PILA\n")
127+
print(f"Hay {browser.cantidadElementos()} elementos en la pila, los elementos son:\n")
128+
browser.imprimirElementos()
129+
else:
130+
print("No hay elementos en la pila")
131+
respuesta = browser.preguntarAlUsuario()
132+
case _:
133+
if len(respuesta) >= 1:
134+
browser.nuevoElemento(respuesta)
135+
browser.showWebSiteUser()
136+
# Pase lo que pase
137+
respuesta = browser.preguntarAlUsuario()
138+
139+
# Ejecución programa 1
140+
navegacion()
141+
142+
# EJERCICIO 1 - CLASE STACK
143+
# LIFO
144+
print("\nEJERCICIO 1 - CLASE STACK\n")
145+
146+
class stack:
147+
# INICIALIZADOR
148+
def __init__(self):
149+
self.mi_stack = [] # Iniciamos la pila
150+
# METODOS
151+
# Añadir elemento
152+
def push(self,item):
153+
self.mi_stack.append(item)
154+
# Eliminar elemento
155+
def pop(self):
156+
if self.count() >= 1:
157+
self.mi_stack.pop()
158+
# Contar elementos
159+
def count(self):
160+
return len(self.mi_stack)
161+
# IMprimir elementos
162+
def print(self):
163+
for item in reversed(self.mi_stack):
164+
print(item)
165+
166+
# Ejemplo de uso
167+
alcalina = stack()
168+
alcalina.push("Duracel")
169+
alcalina.push("Varta")
170+
alcalina.push("Panasonic")
171+
print("----------")
172+
alcalina.print()
173+
print(alcalina.count())
174+
print("----------")
175+
alcalina.pop()
176+
alcalina.pop()
177+
alcalina.print()
178+
print(alcalina.count())
179+
print("----------")
180+
181+
# EJERCICIO 2 - REESCRITO
182+
# FIFO
183+
print("\nEJERCICIO 2 - REESCRITO\n")
184+
185+
class poolPrinter:
186+
# INICIALIZADOR
187+
def __init__(self):
188+
self.pool = [] # Iniciamos la pila
189+
# METODOS
190+
# Añadir elemento
191+
def nuevoElemento(self,respuesta):
192+
self.pool.append(respuesta)
193+
print(f"Agregamos el documento {respuesta} a la cola de impresión")
194+
# Imprimer elemento y eliminarlo
195+
def imprimirElemento(self):
196+
print(f"Imprimimos el documento {self.pool[0]}")
197+
self.pool.pop(0)
198+
# Imprimir elementos
199+
def imprimirElementos(self):
200+
for elemento in self.pool:
201+
print(elemento)
202+
# Cantidad elementos
203+
def cantidadElementos(self):
204+
return len(self.pool)
205+
# Pregunta inicial
206+
def preguntarAlUsuarioPool(self):
207+
return input("Escribe si deseas imprimir, agregar un nuevo documento, mostrar o salir: ")
208+
# Navegación
209+
def showWebSiteUser(self):
210+
print(f"Navegando por la web: {self.pool[len(self.pool)-1]}")
211+
212+
# Programa inicial
213+
def printer():
214+
# Instanciamos un objeto
215+
poolPrinterUser = poolPrinter()
216+
respuestaUsuario = poolPrinterUser.preguntarAlUsuarioPool()
217+
while True:
218+
match respuestaUsuario:
219+
case "imprimir":
220+
# Comprobamos
221+
if poolPrinterUser.cantidadElementos() == 0:
222+
print("No hay documentos en la cola de impresión, agregue uno antes")
223+
respuestaUsuario = poolPrinterUser.preguntarAlUsuarioPool()
224+
else:
225+
poolPrinterUser.imprimirElemento()
226+
respuestaUsuario = poolPrinterUser.preguntarAlUsuarioPool()
227+
case "salir":
228+
print("\n¡HASTA LUEGO!\n")
229+
break
230+
case "mostrar":
231+
if poolPrinterUser.cantidadElementos() >= 1:
232+
poolPrinterUser.imprimirElementos()
233+
else:
234+
print("Escriba el nombre de un documento o si desea imprimir")
235+
# Pase lo que pase
236+
respuestaUsuario = poolPrinterUser.preguntarAlUsuarioPool()
237+
case _:
238+
if len(respuestaUsuario) >= 1:
239+
poolPrinterUser.nuevoElemento(respuestaUsuario)
240+
else:
241+
print("Escriba el nombre de un documento o si desea imprimir")
242+
# Pase lo que pase
243+
respuestaUsuario = poolPrinterUser.preguntarAlUsuarioPool()
244+
245+
# Ejecución programa 2
246+
printer()
247+
248+
# EJERCICIO 2 - CLASE QUEUE
249+
# LIFO
250+
print("\nEJERCICIO 2 - CLASE QUEUE\n")
251+
252+
class queue:
253+
# INICIALIZADOR
254+
def __init__(self):
255+
self.mi_queue = [] # Iniciamos la pila
256+
# METODOS
257+
# Añadir elemento
258+
def equeue(self,item):
259+
self.mi_queue.append(item)
260+
# Eliminar elemento
261+
def deequeue(self):
262+
if self.count() >= 1:
263+
self.mi_queue.pop(0)
264+
# Contar elementos
265+
def count(self):
266+
return len(self.mi_queue)
267+
# IMprimir elementos
268+
def print(self):
269+
for item in self.mi_queue:
270+
print(item)
271+
272+
# Ejemplo de uso
273+
tail = queue()
274+
tail.equeue("Zorro")
275+
tail.equeue("Lagarto")
276+
tail.equeue("Puma")
277+
print("----------")
278+
tail.print()
279+
print(tail.count())
280+
print("----------")
281+
tail.deequeue()
282+
tail.deequeue()
283+
tail.print()
284+
print(tail.count())
285+
print("----------")

0 commit comments

Comments
 (0)