"Christopher Spears" <[EMAIL PROTECTED]> wrote
I created a stack class. I then put the class into a script to test it:
I'll assume the crazy indentation is due to email errors.
class Stack(list): def isempty(self): length = len(self) if length == 0: return True else: return False
return len(self) == 0 does the same thing in one line
def peek(self): length = len(self) if length == 0: return 0 else: last_index = length - 1 return self[last_index]
if len(self) > 0: return self[-1] else: return 0 does the same thing
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
if len(self) > 0: stackpop_val = self[-1] self = self[:-1] return stackpop_val printing is a bad idea since it will limit reusability. The default is to return None which a class user can detect. Alternatively raise an IndexError instead.
def push(self, value): return self.append(value)
append just returns None so there is no need to include the return. Just perform the append.
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) 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: if "pop" in dir(list): pop_val = stack.pop() print pop_val else: pop_val = stack.stackpop() print pop_val elif choice == 3: push_val = raw_input("Push this value on stack: ") stack.push(push_val) print stack elif choice == 4: print "Goodbye!" x = False else: x = False sys.exit("Wrong response Goodbye!") I am not sure how to test it because Python 2.4 is installed on my computer.
To fully test it you obviously need 2 versions of python one with and one without pop. The only alternartive is to delete pop from the built in list class on one test run. But that might be tricky to do as pop is readonly.... ie I don't know how! :-) The best alternative I can do is to define your own pop to be None. That will mask the inherited method. You can then check if Stack.pop is callable. If not call your version. HTH, -- Alan Gauld Author of the Learn to Program web site http://www.freenetpages.co.uk/hp/alan.gauld _______________________________________________ Tutor maillist - Tutor@python.org http://mail.python.org/mailman/listinfo/tutor