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 ("\n EJERCICIO 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 ("\n ELEMENTOS 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 ("\n EJERCICIO 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 ("\n EJERCICIO 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 ("\n EJERCICIO 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