テキストが括弧に関してバランスが取れていることを確認するプログラムを作成しようとしています(()、[]、{}ではなく()、[、{})。バランスが取れている場合と、閉じ括弧が欠落している場合(前の例のように)バランスが取れていない場合に機能させることができます。私ができないのは、左側に括弧 (()、]、{}) がない場合、アンバランスとして戻ってくることです。空のスタックからポップしようとしていることは知っていますが、それに対抗する方法がわかりません。私の先生は、空のスタックにポップしようとすると例外が自動的に発生し、クラスを変更できないことをスタッククラスに持っています。これが問題です。そして、この混乱に陥らないでください。それで、そのエラーが発生する前にそれを行う方法のアイデアはありますか? コードは次のとおりです。
from ListNode import *
from Stack import Stack
ch = 0
s = 0
check = True
def parbalance():
stack = Stack()
user = input("Enter a file name: ")
file = open(user)
lines = file.readlines()
for char in lines:
for ch in char:
#print(ch)
if ch in "([{":
stack.push(ch)
if ch in ")]}":
popStack = stack.pop()
if ch == "(" and popStack != ")":
check = False
elif ch == "[" and popStack != "]":
check = False
elif ch == "{" and popStack != "}":
check = False
if stack.is_empty():
check = True
print("true")
else:
check = False
print("false")
parbalance()
参考までに、彼女の Stack クラスを次に示します。
from ListNode import *
class Stack:
def __init__(self):
self.top = None
def push(self, item):
temp = ListNode(item)
temp.set_link(self.top)
self.top = temp
#self.top = ListNode(item, self.top)
def pop(self):
if self.top == None:
raise Exception("Trying to pop from an empty stack")
temp = self.top
self.top = temp.get_link()
return temp.get_item()
def destroy(self):
self.top = None
def is_full(self):
return False
def is_empty(self):
return self.top == None