gpt4 book ai didi

python - 尝试使用 python 中的 Stacks 来阻止错误

转载 作者:太空宇宙 更新时间:2023-11-03 18:46:25 25 4
gpt4 key购买 nike

我正在尝试编写一个程序来检查以确保文本在括号中保持平衡(因此 (),[],{} 而不是 (),[,{})。当它平衡时我可以让它工作,当它缺少右括号时不平衡时(如前面的示例),我可以让它工作。如果我缺少左边的括号((),],{}),我无法让它返回不平衡。我知道它试图从空堆栈中弹出,但不知道如何应对这种情况。我的老师在她的 Stack 类中规定,如果它尝试弹出到空堆栈,则会自动引发异常,并且我无法更改她的类,这就是问题所在,否则我无论如何都会将其设为 false并且不要陷入这种困惑之中。那么,在出现该错误之前,有人知道如何执行此操作吗?代码如下:

          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

最佳答案

使用try捕获错误:

try:
popStack = stack.pop()
except:
# Stack is empty, set failure and bail from the function.
check = False
return

另外,请注意您的测试是向后的:

if ch == "(" and popStack != ")":

ch 是右括号,popStack 是左括号,所以应该是:

if ch == ")" and popStack != "(":

如果不进行此更改,您的代码会将字符串 "(}" 识别为平衡字符串。

作为旁注,请考虑从函数返回 TrueFalse,而不是设置全局变量。使用全局变量从函数返回值不是一个好主意。

关于python - 尝试使用 python 中的 Stacks 来阻止错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19413735/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com