Как перейти от класса очереди к классу стека и затем вычислить функцию? - PullRequest
0 голосов
/ 04 ноября 2018

Я пытаюсь создать программу, которая позволяет пользователю создать схему логического элемента, введя логический элемент, вход и выход. В настоящее время программа добавляет входные данные в очередь, и когда выходные данные записываются, входные данные должны быть удалены из очереди и добавлены в стек для расчета. Когда стек заполнен 3 предметами, он вычислит 3 предмета и вернет ответ в стек. Когда я запускаю свой код, он все время говорит, что я выскакиваю из пустого стека и не знаю, как это исправить. Пользователь должен сначала ввести входные данные, а затем строб и последний выход записи. Пример: 1 И 0 НЕ ВЫХОД будет напечатан как 1 О И НЕ ВЫХОД в программу. Мне действительно нужна помощь, поскольку я пытался сделать это в течение нескольких недель, пожалуйста.

class Queue():
   def __init__(self):
      self.queue = []
      self.__frontPtr = 0
      self.__rearPtr = 0
      self.__maxLength = 10
      self.__length =0

   def addToQ(self,newGate):
      self.queue.insert(0,newGate)
      self.__rearPtr+=1

   def empty(self):
      self.queue = []
      self.__frontPtr = 0
      self.__rearPtr = 0
      return(self.queue,self.__frontPtr,self.__rearPtr)

   def isEmpty(self):
      return self.queue==[]

   def removeFromQ(self):
      return self.queue.pop()

   def displayQ(self):
      print(self.queue)
      print("\n")

   def size(self):
      return (len(self.queue))


class Stack():
   def __init__(self):
      self.stack=[]

   def isEmpty(self):
      return self.stack==[]

   def push(self,newItem):
      self.stack.append(newItem)

   def pop(self):
      return self.stack.pop()

   def empty(self):
      self.stack=[]

   def size(self):
      return len(self.stack)

   def display(self):
      print(self.stack)
      print("\n")


class Calculation(Stack,Queue):
   def __init__(self):
      self.answer=0
      self.myStack=Stack()
      self.myQueue=Queue()


   def isFull(self):
      if self.myStack.size()!=3:
         self.moveToStack()
      else:
         self.calculate()

   def moveToStack(self):
      newItem=self.myQueue.removeFromQ()
      self.myStack.push(newItem)
      self.isFull()


   def calculate():
      item1=self.myStack.pop()
      print(item1)
      item2=self.myStack.pop()
      if item2=="notgate":
         if item3=="one":
            answer=0
            self.myStack.push(0)
         else:
            answer=1
            self.myStack.push(0)
      else:
         item3=self.myStack.pop()


      if item1=="andgate":
         if item2=="one" and item3=="one":
            answer=1
            self.myStack.push(1)
         else:
            answer=0
            self.myStack.push(0)


      elif item1=="nandgate":
         if item2=="one" and item3=="one":
            answer=0
            self.myStack.push(0)
         elif item2=="one" and item3=="zero":
            answer=1
            self.myStack.push(1)
         elif item2=="zero" and item3=="one":
            answer=1
            self.myStack.push(1)
         else:
            answer=1
            self.myStack.push(1)

      elif item1=="norgate":
         if item2=="zero" and item3=="zero":
            answer=1
            self.myStack.push(1)
         elif item2=="one" and item3=="zero":
            answer=0
            self.myStack.push(0)
         elif item2=="zero" and item3=="one":
            answer=0
            self.myStack.push(0)
         else:
            answer=0
            self.myStack.push(0)

      elif item1=="xorgate":
         if item2=="one" and item3=="zero":
            answer=0
            self.myStack.push(0)
         elif item2=="zero" and item3=="one":
            answer=0
            self.myStack.push(0)
         elif item2=="zero" and item3=="zero":
            answer=1
            self.myStack.push(1)
         else:
            answer=1
            self.myStack.push(1)

      elif item1=="orgate":
         if item2=="one":
            answer=1
            self.myStack.push(1)
         elif item3=="one":
            answer=1
            self.myStack.push(1)
         else:
            answer=0
            self.myStack.push(0)

    #  if self.myStack.size()<3:
     #    self.moveToStack()

      if self.myQueue.size()==0:
         print("output is", self.myStack.pop())

circuitInput=str(input("Enter circuit item: "))
gateQueue=Queue()
gateStack=Stack()
gateCal=Calculation()
while circuitInput!="output":
   circuitInput=str(input("Enter circuit item: "))
   gateQueue.addToQ(circuitInput)
gateQueue.addToQ("output")
gateCal.isFull()
...