本程序是MOOC学习北京大学陈斌老师课程后,自行改进编写。欢迎你们交流探讨,不断学习进步python
程序流程:
括号匹配算法:
1.输入括号表达式
2.若是是左括号的话入栈
3.若是遇到右括号,可是没有左括号与其匹配(栈为空),则括号不匹配
4.若是遇到了右括号且栈不为空,判断右括号和左括号的类型是否一致(好比中括号"[“与”]“匹配,”[“与”)"不匹配),不一致则括号不匹配
5.若是遇到其余字符,就不予处理
6.当括号表达式字符循环结束,栈是空的,则括号匹配;若是栈是非空的,则括号不匹配
算法
源程序.app
from Teststack import Stack def bracMatch(bracketItem): bracketList = list(bracketItem) braStack = Stack() leftbrac = "{[(" rightbrac = "}])" result = True for item in bracketList: if item in leftbrac: braStack.push(item) elif item in rightbrac: if braStack.isEmpty(): result = False else: if matchBoth(braStack.peek(),item): braStack.pop() else: result = False if braStack.isEmpty() and result: result = True else: result = False return result def matchBoth(item1,item2): leftbrac = "{[(" rightbrac = "}])" return leftbrac.index(item1) == rightbrac.index(item2) if __name__ == "__main__": str = input("请输入表达式") if bracMatch(str): print("括号匹配") else: print("括号不匹配")
栈的定义类文件Teststack.py学习
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() def peek(self): return self.items[len(self.items)-1] def size(self): return len(self.items)
输出结果spa