Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/345.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 后缀计算,如何告诉编译器要执行什么运算符,因为在等式中,我们在字符串中给出了后缀表达式_Python_Python 3.x - Fatal编程技术网

Python 后缀计算,如何告诉编译器要执行什么运算符,因为在等式中,我们在字符串中给出了后缀表达式

Python 后缀计算,如何告诉编译器要执行什么运算符,因为在等式中,我们在字符串中给出了后缀表达式,python,python-3.x,Python,Python 3.x,后缀评估算法。 任务是迭代表达式并 如果当前项是操作数,则将其值推送到堆栈上 如果当前项是运算符:(a)从堆栈中弹出最上面的两个操作数。 (b) 执行该操作。(c)将该操作的结果推回堆栈 我建议对值使用单个dict而不是多个变量(如果您需要另一种方法,可以使用eval) 如果需要变量,则以下操作将起作用: from collections import deque eq = 'ABC+*D/' a, b, c, d = 8, 2, 3, 10 ops = { '+': lambda x,

后缀评估算法。 任务是迭代表达式并

  • 如果当前项是操作数,则将其值推送到堆栈上
  • 如果当前项是运算符:(a)从堆栈中弹出最上面的两个操作数。 (b) 执行该操作。(c)将该操作的结果推回堆栈

  • 我建议对值使用单个dict而不是多个变量(如果您需要另一种方法,可以使用eval)

    如果需要变量,则以下操作将起作用:

    from collections import deque
    eq = 'ABC+*D/'
    a, b, c, d = 8, 2, 3, 10
    ops = {
        '+': lambda x,y : y + x,
        '-': lambda x,y : y - x,
        '*': lambda x,y : y * x,
        '/': lambda x,y : y / x,
    }
    stack = deque()
    
    for x in eq:
        if x in ops:
            stack.append(ops[x](stack.pop(), stack.pop()))
        else:
            stack.append(eval(x.lower()))
    print(stack[0])
    

    您是否尝试过使用一些
    if
    语句?问题是运算符是以字符串类型给出的,因此编译器如何知道它是什么?编译器不知道。您必须编写代码来实现这一点。例如:
    如果op='+':result=i+j
    from collections import deque
    eq = 'ABC+*D/'
    vars = {'A':8, 'B':2, 'C':3, 'D':10}
    ops = {
        '+': lambda x,y : y + x,
        '-': lambda x,y : y - x,
        '*': lambda x,y : y * x,
        '/': lambda x,y : y / x,
    }
    stack = deque()
    
    for x in eq:
        if x in ops:
            stack.append(ops[x](stack.pop(), stack.pop()))
        else:
            stack.append(vars[x])
    print(stack)
    
    from collections import deque
    eq = 'ABC+*D/'
    a, b, c, d = 8, 2, 3, 10
    ops = {
        '+': lambda x,y : y + x,
        '-': lambda x,y : y - x,
        '*': lambda x,y : y * x,
        '/': lambda x,y : y / x,
    }
    stack = deque()
    
    for x in eq:
        if x in ops:
            stack.append(ops[x](stack.pop(), stack.pop()))
        else:
            stack.append(eval(x.lower()))
    print(stack[0])