I am almost done with a stack class that I wrote:
#!/usr/bin/python
class Stack(list):
def isempty(self):
length = len(self)
if length == 0:
return True
else:
return False
def peek(self):
length = len(self)
if length == 0:
return 0
else:
last_index = length - 1
return self[last_index]
def stackpop(self):
length = len(self)
if length == 0:
print "Empty list!"
else:
last_index = length - 1
stackpop_val = self[last_index]
self = self[:last_index]
return stackpop_val
def push(self, value):
return self.append(value)
if __name__ == '__main__':
x = True
stack = Stack()
print "Pick an option to modify stack: "
while x == True:
print "1) Peek at the last value"
print "2) Pop off the last value"
print "3) Push a value on the stack"
print "4) Print stack"
print "5) Quit Program"
choice_string = raw_input("Make a choice: ")
try:
choice = int(choice_string)
except ValueError:
sys.exit("Not an integer! Goodbye!")
if choice == 1:
if stack.isempty():
print "Stack is empty"
else:
peek_val = stack.peek()
print peek_val
elif choice == 2:
pop_val = stack.stackpop()
print pop_val
elif choice == 3:
push_val = raw_input("Push this value on stack: ")
stack.push(push_val)
elif choice == 4:
print stack
elif choice == 5:
print "Goodbye!"
x = False
else:
x = False
sys.exit("Wrong response Goodbye!")
My main problem seems to be getting this part to work:
def stackpop(self):
length = len(self)
if length == 0:
print "Empty list!"
else:
last_index = length - 1
stackpop_val = self[last_index]
self = self[:last_index]
return stackpop_val
The easiest solution would be to use the pop method from list, but I decided I
wanted to take a crack at writing my own pop method. Unfortunately, this
always happens when I run the program:
1) Peek at the last value
2) Pop off the last value
3) Push a value on the stack
4) Print stack
5) Quit Program
Make a choice: 3
Push this value on stack: 1
1) Peek at the last value
2) Pop off the last value
3) Push a value on the stack
4) Print stack
5) Quit Program
Make a choice: 3
Push this value on stack: blah
1) Peek at the last value
2) Pop off the last value
3) Push a value on the stack
4) Print stack
5) Quit Program
Make a choice: 3
Push this value on stack: blah blah
1) Peek at the last value
2) Pop off the last value
3) Push a value on the stack
4) Print stack
5) Quit Program
Make a choice: 2
blah blah
1) Peek at the last value
2) Pop off the last value
3) Push a value on the stack
4) Print stack
5) Quit Program
Make a choice: 4
['1', 'blah', 'blah blah']
How come the stack doesn't shrink when I pop off the last value? I tested the
code in the interpreter:
>>> lista = [1,2,3,4]
>>> lista[:len(lista)-1]
[1, 2, 3]
>>> lista = lista[:len(lista)-1]
>>> lista
[1, 2, 3]
Any hints?
_______________________________________________
Tutor maillist - [email protected]
http://mail.python.org/mailman/listinfo/tutor