我正在尝试从文件中的一行匹配括号,但是当我使用下面的代码而不从文件中获取数据并输入它时,它可以工作并匹配括号。我也不知道如何在数字和字母之间使用它。
我尝试了许多不同的方法,但到目前为止效果最好。我认为首先是我所打印的内容有问题,但是我已经尽力解决了所有已知问题。我也是python的新手,所以它可能不是最好的代码。
class Stack:
def __init__(self):
self._items = []
def isEmpty(self):
return self._items == []
def push(self,item):
self._items.append(item)
def pop(self):
return self._items.pop()
stack = Stack()
open_list = ["[","{","("]
close_list = ["]","}",")"]
def open_file():
file = open("testing.txt","r")
testline = file.readline()
count = 1
while testline != "":
testline = testline[:-1]
check(testline,count)
testline = file.readline()
count = count + 1
def check(testline,count):
stack = []
for i in testline:
if i in open_list:
stack.append(i)
elif i in close_list:
pos = close_list.index(i)
if ((len(stack) > 0) and
(open_list[pos] == stack[len(stack)-1])):
stack.pop()
else:
print ("Unbalanced")
print (count)
if len(stack) == 0:
print ("Balanced")
print (count)
def main():
open_file()
if __name__=="__main__":
main()
输出:
如果文件包含
dsf(hkhk [khh])
ea {jhkjh [}}
hksh [{(]
sd {hkh {hkhk [hkh]}}]
输出为
Balanced
1
Unbalanced
2
Unbalanced
2
Unbalanced
3
Unbalanced
4
Balanced
4
前四个是正确的,但它加了2,我不知道它从哪里来。我在打印时需要计数,以便以后使用(即第1行是平衡的)
答案 0 :(得分:0)
您的open_file()
函数存在一些问题。
仅当testline == ""
返回true
时,while循环才会结束。因此,以后再做check(testline)
时,实际上是给该函数一个空字符串,因此它实际上无法完成工作。
我假设while循环的目的是为文件中的每一行删除换行符\n
吗?问题是您没有在任何地方保存中间线。然后,当file.readline()
由于文件中没有更多行而返回""
时,您将该空字符串提供给函数。
# A way to remove newlines
testline = testline.replace("\n", "")
# Check all the lines
lines = file.readlines()
count = len(lines)
for testline in lines:
testline = testline.replace("\n", "")
check(testline)
# And if you're sure that the file will have only one line
testline = file.readline()[:1] # read line and remove '\n'
check(testline)
请记住,字符串只是一个充满字符的列表。因此,您可以执行len(string)
来查看长度。或者,您可以执行len(file.readlines())
以查看文件有多少行。无论哪种方式,您都可以摆脱count
变量。
当您调用print(check())
时,它首先会调用没有参数的check()
函数,因此它实际上无法检查任何内容。这就是为什么您看不到正确的打印语句的原因。
建议的编辑方法是将打印语句移至open_file()
函数的末尾,以便您拥有print(check(testline))
另一种可能的解决方案是在您的open_file()
函数中放入return语句。
def open_file():
# Some code...
return check(testline)
def check():
# Some code...
print(open_file())
最简单的方法可能是将return
中的check()
语句替换为print
语句。
答案 1 :(得分:0)
是时候学习调试基础了...
@emilanov为open_file
函数提供了提示,因此我将重点介绍check
函数。
for i in range (0,len(testline),1):
可能不是您想要的:i
将从0
到len(testline) -1
取整数。规则是:如果出现问题,请使用调试器或添加跟踪打印。在这里
for i in range (0,len(testline),1):
print(i) # trace - comment out for production code
将使问题显而易见。
您想要的可能是:
for i in testline: