#!/usr/env/python # −*− coding: UTF−8 −*− import os def ingresa_pila(): print "Bienvenido\n" print "A continuación ingrese los elementos de la pila (máx 20)" print "Para detener, ingrese el valor -1 \n" contador=1 while contador < 21 : var = input("Elemento en la posición %s : " % (contador,) ) if var == -1: break pila.append(var) contador = contador+1 #print "\nUsted ingresó la pila: \n\t" , pila def pausa(): raw_input("\nPulse la tecla 'enter' para continuar ") os.system('clear') def mostrar(): print "La pila es: \n\t" , pila def tope(): if len(pila) > 0: print "El elemento tope de la pila es: " , pila[-1] else: print "No hay un elemento tope para mostrar" def push(): if len(pila) < 20 : agregar=input("Ingrese el elemento que desea añadir: ") pila.append(agregar) print "El elemento ha sido añadido correctamente" else: print "No se pueden añadir más elementos a la pila" def pop(): if len(pila) > 0: del pila[-1] print "Se ha eliminado el elemento tope de la pila" else: print "No hay un elemento tope para quitar" def anula(): globals()["pila"] = [] print "La pila se ha vaciado completamente" def vacia(): if len(pila) == 0 : print "La pila está vacía" else: print "La pila contiene elementos" def ordenar(): if len(pila) > 0: pila_aux1 = pila pila_aux2 = [] pila_aux3 = [] var_aux = pila_aux1[-1] del pila_aux1[-1] while True: for i in range(0,len(pila_aux1)): if pila_aux1[-1] <= var_aux : pila_aux2.append(pila_aux1[-1]) del pila_aux1[-1] else: pila_aux2.append(var_aux) var_aux = pila_aux1[-1] del pila_aux1[-1] pila_aux3.append(var_aux) var_aux = pila_aux2[-1] del pila_aux2[-1] for i in range(0,len(pila_aux2)): if pila_aux2[-1] <= var_aux : pila_aux1.append(pila_aux2[-1]) del pila_aux2[-1] else: pila_aux1.append(var_aux) var_aux = pila_aux2[-1] del pila_aux2[-1] if len(pila_aux1)>0: pila_aux3.append(var_aux) var_aux = pila_aux1[-1] del pila_aux1[-1] if len(pila_aux2) == 0: if len(pila_aux1) == 0: break ## una vez fuera del while, hacer la asignacion final pila_aux3.append(var_aux) globals()["pila"] = pila_aux3 print "\nLa pila fue correctamente ordenada" else: print "La pila no tiene elementos para ordenar" def defecto(): print "\nOpción no válida" """ No hay switch ni case en Python ... ya que puede hacerse mejor usando sus OO capacidades y un diccionario """ def menu(): while True: pausa() print "\n\n\t\t\t *Menú de acciones* \n" print "Opciones disponibles: \n" print "1. Mostrar la pila" print "2. Mostrar el elemento tope" print "3. Agregar un elemento a la pila" print "4. Borrar el elemento tope" print "5. Anular la pila completamente" print "6. La pila se encuentra vacía?" print "7. Ordenar la pila de de mayor a menor" print "9. Salir \n" disponibles = { "1": mostrar, "2": tope, "3": push, "4": pop, "5": anula, "6": vacia, "7": ordenar} opcion = raw_input("Qué desea hacer? ") print "" if opcion == "9": break disponibles.get(opcion,defecto) () ## Éste es el programa os.system('clear') print "\t\t\t************************" print "\t\t\t* *" print "\t\t\t* Tratamiento de Pilas *" print "\t\t\t* *" print "\t\t\t************************" pila=[] ingresa_pila() menu() print "\nAdios!\n"