def busqueda_sw(): '''Busqueda personajes de Star Wars''' P = Pila() Paux = Pila() leia = False bf = False personajes = [ 'Darth Vader', 'Luke Skywalker', 'Chewbacca', 'Yoda', 'R2D2', 'Obi-Wan Keobi', 'Han Solo', 'C3PO', 'Leia Organa', 'Jabba el Hutt', 'Boba Fett' ] for i in range(0, 10): sw = random.choice(personajes) apilar(P, sw) print('Pila de personajes:') barrido(P) print('') while not pila_vacia(P): x = desapilar(P) if x == 'Leia Organa': apilar(Paux, x) leia = True if x == 'Boba Fett': apilar(Paux, x) bf = True while not pila_vacia(Paux): apilar(P, desapilar(Paux)) if leia: print('Leia Organa se encuentra en la pila') else: print('Leia Organa no esta almacenada') if bf: print('Boba Fett se encuentra en la pila') else: print('Boba Fett no esta almacenado')
def contador(): '''Algoritmo que muestra datos de un parrafo, tal como sus vocales, consonantes, numeros, espacios en blancos y otros simbolos''' PV = Pila() PC = Pila() PO = Pila() parrafo = 'Miedo, ira, agresividad, el lado oscuro ellos s0n. Si algun dia rigen tu vida, para siempre tu destino dominaran.' numeros = '0123456789' vocales = 'aeiouAEIOU' consonantes = 'bcdfghjklmnpqrstvwxyzBCDFGHJKLMNPQRSTVWXYZ' for elemento in parrafo: if elemento in vocales: apilar(PV, elemento) elif elemento in consonantes: apilar(PC, elemento) else: apilar(PO, elemento) # A) B) y D) voc, cons, otr, espbl, num = 0, 0, 0, 0, 0 while not pila_vacia(PV): desapilar(PV) voc += 1 while not pila_vacia(PC): desapilar(PC) cons += 1 while not pila_vacia(PO): x = desapilar(PO) otr += 1 if x == ' ': espbl += 1 elif x in numeros: num += 1 print('Cantidad de vocales: ' + str(voc)) print('Cantidad de consonantes: ' + str(cons)) print('Cantidad de otros caracteres: ' + str(otr)) print('Cantidad de espacios en blanco: ' + str(espbl)) print('Cantidad de numeros: ' + str(num)) # C) total = voc + cons + otr print('Porcentaje de vocales: ' + str((voc * 100) / total) + '%') print('Porcentaje de consonantes: ' + str((cons * 100) / total) + '%') # E) if voc == otr: print('Igual cantidad') else: print('Cantidades distintas') # F) LetraZ = False while not pila_vacia(PC): dato = desapilar(PC) if dato == 'z': LetraZ = True if LetraZ: print('Existen letras Z en el parrafo') else: print('No hay letras Z en el parrafo')
def interseccion_sw(): '''Obtiene los personajes que aparecieron en el episodio V y VII de la saga Star Wars''' P5 = Pila() P7 = Pila() Paux = Pila() ep5 = [ 'Luke Skywalker', 'Lando Calrissian', 'Yoda', 'Chewbacca', 'Emperador Palpatine', 'C3PO' ] ep7 = ['Rey', 'Finn', 'Luke Skywalker', 'Kylo Ren', 'Chewbacca', 'C3PO'] for i in range(0, 5): apilar(P5, ep5[i]) apilar(P7, ep7[i]) print('Episodio V: The empire strikes back') barrido(P5) print('') print('Episodio VII: The force awakens') barrido(P7) print('') while not pila_vacia(P5): x = desapilar(P5) while not pila_vacia(P7): y = desapilar(P7) if (x == y): print('El personaje ' + str(x) + ' se encuentra en ambos episodios') apilar(Paux, y) while (not pila_vacia(Paux)): y = desapilar(Paux) apilar(P7, y)
def crecientes(): '''Inserta elementos en una pila de manera creciente''' P = Pila() Paux = Pila() while not pila_llena(P): dato = random.randint(1, 50) print(str(dato) + ' agregado') if not pila_vacia(P): # ingresa cuando hay al menos un elemento en P while not pila_vacia(P) and cima(P) >= dato: apilar(Paux, desapilar(P)) apilar(P, dato) while not pila_vacia(Paux): apilar(P, desapilar(Paux)) print('') barrido(P)
def dioses_griegos(): '''Inserta el nombre de 'Atenea' en una pila de dioses griegos''' P = Pila() Paux = Pila() pos = 2 # posicion en la lista dioses = [ 'Zeus', 'Poseidon', 'Hades', 'Arkantos', 'Apolo', 'Hermes', 'Ares', 'Persefone', 'Artemisa' ] for i in range(0, 9): apilar(P, dioses[i]) print('Pila de dioses griegos:') barrido(P) print('') if tamanio(P) > pos + 1: i = 0 while i < pos: x = desapilar(P) apilar(Paux, x) i += 1 x = apilar(P, 'ATENEA') while not pila_vacia(Paux): apilar(P, desapilar(Paux)) barrido(P) print('Se inserto a la diosa "Atenea" en la posicion: ' + str(pos))
def cartas(): '''Pila de cartas de baraja espaniola, se debe incrementar el tamanio de la pila a 48 para este ejercicio''' P = Pila() Pesp = Pila() Pbas = Pila() Poro = Pila() Pcop = Pila() palos = ['Espada', 'Basto', 'Oro', 'Copa'] for i in range(1, 48): num = random.randint(1, 12) palo = random.choice(palos) apilar(P, [num, palo]) while not pila_vacia(P): x = desapilar(P) if x[1] == 'Espada': apilar(Pesp, x) elif x[1] == 'Basto': apilar(Pbas, x) elif x[1] == 'Oro': apilar(Poro, x) elif x[1] == 'Copa': apilar(Pcop, x) print('Mazo de espada') barrido(Pesp) print('Mazo de basto') barrido(Pbas) print('Mazo de oro') barrido(Poro) print('Mazo de copa') barrido(Pcop) Pesp = ordenar_pila(Pesp) print('Mazo de espada ordenados') barrido(Pesp)
def peliculas(): '''Pila de peliculas y sus datos''' P = Pila() Paux = Pila() c = 0 titulo = [ 'Capitan America', 'Relatos Salvajes', 'Bohemian Rhapsody', 'Doctor Strange', 'Avengers: Infinity War', 'Guardianes de la galaxia' ] estudio = [ 'Marvel Studios', 'Kramer and Sigman Films', 'GK Films', 'Marvel Studios', 'Marvel Studios', 'Marvel Studios' ] anio = ['2016', '2014', '2018', '2016', '2018', '2014'] for i in range(0, 6): title, studio, year = titulo[i], estudio[i], anio[i] apilar(P, [title, studio, year]) print('Peliculas:') barrido(P) print('') while not pila_vacia(P): dato = desapilar(P) if dato[2] == '2014': print(str(dato[0]) + ' fue estrenada en 2014') if dato[2] == '2018': c += 1 if dato[1] == 'Marvel Studios' and str(dato[2]) == '2018': print(str(dato[0]) + ' fue producida por Marvel en el anio 2018') print('Se estrenaron ' + str(c) + ' peliculas en 2018')
def vocales(P): '''Determina cuantas vocales hay en una pila de caracteres''' c = 0 while not pila_vacia(P): x = desapilar(P) if x == 'A' or x == 'a' or x == 'E' or x == 'e' or x == 'I' or x == 'i' or x == 'O' or x == 'o' or x == 'U' or x == 'u': c += 1 print('Cantidad de vocales: ' + str(c))
def ocurrencias(P): '''Numero de ocurrencias de un determinado elemento en una pila''' c = 0 busc = 10 while not pila_vacia(P): x = desapilar(P) if x == busc: c += 1 print('El numero ' + str(busc) + ' se repite ' + str(c) + ' veces')
def resolverCaminoDijkstra(pila_camino, fin): '''Recibe una pila enviada por dijkstra y devuelve una lista con el camino resuelto''' camino = [] while not pila_vacia(pila_camino): dato = desapilar(pila_camino) if dato[1][0].info == fin: camino.append(dato[1][0].info) fin = dato[1][1] return camino[::-1] # Array invertido
def impares(P): '''Elimina numeros impares de una pila''' P2 = Pila() while not pila_vacia(P): x = desapilar(P) if x % 2 == 0: apilar(P2, x) invertir(P2) barrido(P2)
def resolverCaminoDijkstraPeso(pila_camino, fin): '''Recibe una pila enviada por dijkstra y devuelve el peso total del camino resuelto''' pila_camino_aux = copiarPila(pila_camino) peso_del_camino = 0 while not pila_vacia(pila_camino_aux): dato = desapilar(pila_camino_aux) if dato[1][0].info == fin: peso_del_camino += dato[0] fin = dato[1][1] return peso_del_camino
def factorial(num): '''Pila de factoriales de un numero dado''' P = Pila() for i in range(1, num + 1): apilar(P, i) print('') barrido(P) resultado = 1 while not pila_vacia(P): resultado *= desapilar(P) return resultado
def inversa(): '''Invierte una palabra''' P = Pila() cad = 'python' print(cad) aux = len(cad) cad_aux = '' for i in range(0, aux): c = cad[i] apilar(P, c) while not pila_vacia(P): cad_aux = cad_aux + desapilar(P) print(cad_aux)
def reemplazo(P): '''Reemplaza un elemento repetido en una pila por otro dado''' P2 = Pila() reemplazar = 1999 busc = 10 while not pila_vacia(P): x = desapilar(P) if x == busc: x = reemplazar apilar(P2, x) invertir(P2) else: apilar(P2, x) barrido(P2)
def i_esimo(P): '''Elimina un i-esimo elemento que esta debajo de la cima''' Paux = Pila() pos = 5 # posicion en la pila if tamanio(P) > pos + 1: i = 0 while i < pos: x = desapilar(P) apilar(Paux, x) i += 1 x = desapilar(P) print('elemento eliminado: ' + x) while not pila_vacia(Paux): x = desapilar(Paux) apilar(P, x)
def palindromo(): '''Devuelve True si una palabra es un palindromo''' P = Pila() cad = 'neuquen' print(cad) aux = len(cad) cad_aux = '' for i in range(0, aux): c = cad[i] apilar(P, c) while not pila_vacia(P): cad_aux = cad_aux + desapilar(P) if cad == cad_aux: print(cad_aux) print(True) else: print(cad_aux) print(False)
def quicksort(vec, pri, ult): '''Ordenamiento quicksort''' P = Pila() apilar(P, [pri, ult]) datos = [] while not pila_vacia(P): datos = desapilar(P) i = datos[0] j = datos[1] - 1 pivot = datos[1] while i < j: while vec[i] <= vec[pivot] and i < j: i += 1 while vec[j] > vec[pivot] and i < j: j -= 1 if i <= j: vec[i], vec[j] = vec[j], vec[i] if vec[pivot] < vec[i]: vec[pivot], vec[i] = vec[i], vec[pivot] if datos[0] < j: apilar(P, [datos[0], j]) if datos[1] > i: apilar(P, [i + 1, datos[1]])