Я пытаюсь создать программу, которая позволяет пользователю создать схему логического элемента, введя логический элемент, вход и выход. В настоящее время программа добавляет входные данные в очередь, и когда выходные данные записываются, входные данные должны быть удалены из очереди и добавлены в стек для расчета. Когда стек заполнен 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()