solution_122c.py

#!/usr/bin/python3
# ========================================================
# my LIFO queue/stack (because I wanted to)
# ========================================================

from copy import deepcopy

# --------------------------------------------------------
# ---- my lifo queue/stack
# --------------------------------------------------------

class my_lifo_queue:

    def __init__(self):
        self.lifo = []

    def empty(self):
        l = len(self.lifo)
        if l < 1:
            return True
        return False

    def length(self):
        return(len(self.lifo))

    def pop(self):
        if len(self.lifo) > 0:
            obj = self.lifo.pop(-1)
            return obj
        else:
            return None

    def push(self,obj):
        self.lifo.append(obj)

    def copy(self):
        if len(self.lifo) < 1:
            return None
        return deepcopy(self.lifo[-1])

    def state(self):
        if len(self.lifo) < 1:
            return -1
        return self.lifo[-1][0]
        
    def dump(self):
        l = len(self.lifo)
        print(f'lifo length {l}')
        if l < 1:
            return
        top = True          # mark top of queue?
        i   = 0
        while l:
            l -= 1
            obj = self.lifo[l]
            if top:
                print(f'[{i:2}] {obj}  (top of queue)')
                top = False
            else:
                print(f'[{i:2}] {obj}')
            i += 1