[ Foro de Python ]

Problema con pop()

01-Nov-2016 20:33
Invitado (José Martinez)
1 Respuestas

Saludos, por favor necesito que me ayuden a resolver este algoritmo. En la función "atender" me aparece un error, indicando que la lista está vacía. Sé que es porque he utilizado el pop() dos veces, porque hice dos "if", uno que indique si el número es par o impar y el otro que indique si es positivo o negativo. Lo que quiero que aparezca es, por ejemplo: "Es Par y Positivo" ó "Es Impar y negativo", dependiendo del número que ingrese, obviamente. Gracias de antemano

def leerS(texto):
varS=input(texto)
return varS

def leerI(texto):
varI=int(input(texto))
return varI

def cargarcola(cola):
n=leerS("Nombre:")
cola.append(n)
return cola

def cargarpila(pila):
x=leerI("Número:")
pila.append(x)
return pila

def imprimircola(cola):
print(cola)

def imprimirpila(pila):
for i in range(1,len(pila)+1):
print(pila[-i])

def atender(cola,pila):
#Indicando si es par ó impar
print("Atentiendo a:",cola.pop(0))
if(pila.pop()%2==0):
print("Es Par")
else:
print("Es Impar")
#Indicando si es positivo ó negativo
if(pila.pop()>0):
print("Es Positivo")
else:
print("Es Negativo")


def menu():
print("1.-Cargar Cola")
print("2.-Cargar Pila")
print("3.-Imprimir Cola")
print("4.-Imprimir Pila")
print("5.-Atender")
print("0.-Salir")
o=leerI("Elija una opción:")
return o

#Principal
C=[]
P=[]
opcion=10

while(opcion!=0):
opcion=menu()
if(opcion==1):
cargarcola(C)
if(opcion==2):
cargarpila(P)
if(opcion==3):
imprimircola(C)
if(opcion==4):
imprimirpila(P)
if(opcion==5):
atender(C,P)
if(opcion==0):
print("Adiós")


27-Nov-2016 10:15
Nacho Cabanes (+32)

La operación pop() es destructiva, porque elimina el elemento del tope de la pila.

Lo que debes hacer es guardar el valor de pop() en una variable, para poder consultarlo tantas veces como necesites, sin extraer nuevos elementos de la pila.






(No se puede continuar esta discusión porque tiene más de dos meses de antigüedad. Si tienes dudas parecidas, abre un nuevo hilo.)