Skip to content

Commit

Permalink
Merge pull request #5653 from JuanDAW37/main
Browse files Browse the repository at this point in the history
#7 - Python
  • Loading branch information
Roswell468 committed Aug 19, 2024
2 parents 438e0bc + ec850eb commit 11b3e62
Show file tree
Hide file tree
Showing 2 changed files with 188 additions and 0 deletions.
86 changes: 86 additions & 0 deletions Roadmap/07 - PILAS Y COLAS/python/JuanDAW37.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,86 @@
"""
* EJERCICIO:
* Implementa los mecanismos de introducción y recuperación de elementos propios de las
* pilas (stacks - LIFO) y las colas (queue - FIFO) utilizando una estructura de array
* o lista (dependiendo de las posibilidades de tu lenguaje).
*
* DIFICULTAD EXTRA (opcional):
* - Utilizando la implementación de pila y cadenas de texto, simula el mecanismo adelante/atrás
* de un navegador web. Crea un programa en el que puedas navegar a una página o indicarle
* que te quieres desplazar adelante o atrás, mostrando en cada caso el nombre de la web.
* Las palabras "adelante", "atrás" desencadenan esta acción, el resto se interpreta como
* el nombre de una nueva web.
* - Utilizando la implementación de cola y cadenas de texto, simula el mecanismo de una
* historial compartida que recibe documentos y los imprime cuando así se le indica.
* La palabra "imprimir" imprime un elemento de la cola, el resto de palabras se
* interpretan como nombres de documentos.
"""

#Pila (Last Input First Output, LIFO)
pila = []

pila.append('A')
pila.append('B')
pila.append('C')
print(f'Pila entera: {pila}')

elemento = pila.pop(len(pila) - 1) #Extraigo el último elemento y lo elimino de la lista
print(f'Último elemento: {elemento}')
print(f'Pila una vez extraído el último elemento: {pila}')

#Cola (First Input First Output)
cola = []
cola.append('A')
cola.append('B')
cola.append('C')
print(f'Cola entera: {cola}')

elemento = cola[0] #Extraigo el primer elemento y lo elimino de la lista. El cero siempre será el primer elemento
print(f'Primer elemento: {elemento}')
del cola[0] #Elimino el primer elemento de la cola. Se puede hacer de una sola vez con elemento = cola.pop(0)
print(f'Cola una vez extraído el primer elemento: {cola}')

# Extra
# Simulación de navegador web, pila LIFO
def navegador_web():
historial = []
navegacion = []
while True:
comando = input('Introduce una acción (adelante, atrás, URL o salir: ')
if comando == "salir":
break
elif comando == "adelante":
pass
elif comando == "atrás":
if len(historial) > 0:
try:
historial.pop()
except Exception:
print('No hay más páginas para ir atrás')
else:
historial.append(comando)
navegacion.append(comando)
print(f'Página actual: {historial[len(historial) - 1]}')
if len(historial) > 0:
print(f'Posición {historial[len(historial)-1]}')
else:
print('No hay páginas en el historial')
return navegacion

print(navegador_web())

# Simulación de cola de impresión compartida, cola FIFO
def impresora():
cola = []
while True:
comando = input('Introduce un nombre de documento o una acción (imprimir, salir): ')
if comando == 'salir':
break
elif comando == 'imprimir':
if len(cola) > 0:
print(f'Imprimiendo documento {cola.pop(0)}')
else:
cola.append(comando)
print(f'Documentos en cola: {cola}')

impresora()
102 changes: 102 additions & 0 deletions Roadmap/08 - CLASES/python/JuanDAW37.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,102 @@
"""
* EJERCICIO:
* Explora el concepto de clase y crea un ejemplo que implemente un inicializador,
* atributos y una función que los imprima (teniendo en cuenta las posibilidades
* de tu lenguaje).
* Una vez implementada, créala, establece sus parámetros, modifícalos e imprímelos
* utilizando su función.
*
* DIFICULTAD EXTRA (opcional):
* Implementa dos clases que representen las estructuras de Pila y Cola (estudiadas
* en el ejercicio número 7 de la ruta de estudio)
* - Deben poder inicializarse y disponer de operaciones para añadir, eliminar,
* retornar el número de elementos e imprimir todo su contenido.
"""

class Vehiculo:
color = "None"

def __init__(self, marca:str, modelo:str, ruedas: int, cilindrada:int, potencia:int):
self.marca = marca
self.modelo = modelo
self.ruedas = ruedas
self.cilindrada = cilindrada
self.potencia = potencia

def imprimir(self):
print(f"Marca: {self.marca}, Modelo: {self.modelo}, Color: {self.color}, Ruedas {self.ruedas}, Cilindrada: {self.cilindrada}, Potencia: {self.potencia}")

mi_coche = Vehiculo('Toyota', 'Auris', 4, 1500, 115)
mi_coche.color = 'Azul'
mi_coche.imprimir()

mi_moto = Vehiculo('Vespa', 'GTS', 2, 300, 75)
mi_moto.color = 'Verde'
mi_moto.imprimir()

# EXTRA
# Pila, LIFO
class Pila:
def __init__(self):
self.contenido = []

def anadir(self, item):
self.contenido.append(item)

def quitar(self):
if self.contar() > 0:
return self.contenido.pop() # Como es una pila, sacamos siempre el último elemento

def contar(self):
return len(self.contenido)

def imprimir(self):
for item in reversed(self.contenido):
if isinstance(item, Vehiculo):
item.imprimir()
else:
print(item)

mi_pila = Pila()
mi_pila.anadir(1)
mi_pila.anadir(mi_moto)
mi_pila.anadir('Juan')
mi_pila.anadir(['A', 'B', 'C', 'D'])
print(mi_pila.contar())
mi_pila.imprimir()
mi_pila.quitar()
print(mi_pila.contar())
mi_pila.imprimir()

# Cola, FIFO
class Cola:
def __init__(self):
self.contenido = []

def anadir(self, item):
self.contenido.append(item)

def quitar(self):
if self.contar() > 0:
self.contenido.pop(0) #Como es una cola, sacamos siempre el primer elemento

def contar(self):
return len(self.contenido)

def imprimir(self):
for item in self.contenido:
if isinstance(item, Vehiculo):
item.imprimir()
else:
print(item)

mi_cola = Cola()
mi_cola.anadir(2)
mi_cola.anadir(mi_coche)
mi_cola.anadir('Mónica')
mi_cola.anadir(['E', 'F', 'G', 'H'])
print(mi_cola.contar())
mi_cola.imprimir()
mi_cola.quitar()
print(mi_cola.contar())
mi_cola.imprimir()

0 comments on commit 11b3e62

Please sign in to comment.