#第五周的作业--多功能计算器
#1.实现加减乘除及括号的优先级的解析,不能使用eval功能,print(eval(equation))
#2.解析复杂的计算,与真实的计算器结果一致
#用户输入 1 - 2 * ( (60-30 +(-40/5) * (9-2*5/3 + 7 /3*99/4*2998 +10 * 568/14 )) - (-4*3)/ (16-3*2) )等类似公式后,
# 必须自己解析里面的(),+,-,*,/符号和公式(不能调用eval等类似功能偷懒实现),运算后得出结果,结果必须与真实的计算器所得出的结果一致
''' 1.自左向右扫描表达式,凡是遇到操作数一律进操作数栈。
2.当遇到运算符时,如果它的优先级比运算符栈栈顶元素的优先级低就入栈。反之,取出栈顶运算符和操作数栈顶的两个连续操作数运算,并将结果存入操作数栈,然后继续比较该运算符与栈顶的运算符的优先级。
3.左括号一律进运算符栈,右括号一律不进运算符栈,取出栈顶运算符和操作数栈顶的两个连续操作数运算,并将结果存入操作数栈,直到取出左括号为止。

python 利用栈实现复杂计算器python 利用栈实现复杂计算器

#给一个点,我们能够根据这个点知道一些内容
class Node(object):
    def __init__(self,val): #定位的点的值和一个指向
        self.val=val    #指向元素的值
        self.next=None   #指向的指针
class Stack(object):
    def __init__(self):
        self.top=None #初始化最开始的位置
    def peek(self):  #获取栈顶的元素
        if self.top!=None:  #如果栈顶不为空
            return self.top.val  #返回栈顶元素的值
        else:
            return None
    def push(self,n):#添加到栈中--入栈
        n=Node(n)  #实例化节点
        n.next=self.top  #顶端元素传值给一个指针
        self.top=n    #新入栈的节点作为栈顶元素
        return n.val
    def pop(self):  #出栈
        if self.top == None:
            return None
        else:
            tmp=self.top.val
            self.top=self.top.next  #栈顶下移一位
            return tmp


# if __name__=="__main__":
#     s=Stack()
#     s.push(1)
#     s.push(2)
#     s.push(3)
#
#     print(s.pop())
#     print(s.pop())
#     print(s.pop())
python 实现栈

相关文章:

  • 2021-09-23
  • 2021-09-19
  • 2021-11-26
  • 2021-12-16
  • 2021-04-24
猜你喜欢
  • 2021-08-13
  • 2021-09-04
  • 2022-12-23
  • 2021-09-19
  • 2021-08-12
  • 2021-11-24
  • 2022-02-08
相关资源
相似解决方案