Python求值表达式算术运算符的所有置换

Python求值表达式算术运算符的所有置换,python,eval,combinations,permutation,Python,Eval,Combinations,Permutation,给定的string='1*7/5-3' 我有一个表达式来计算字符串,比如eval('1*7/5-3') 代码: import __future__ string = '1*7/5-3' print eval(compile(string, '<string>', 'eval', __future__.division.compiler_flag)) 我不应该编辑它来删除“多余的”括号。事实上,它们是必要的。我正在恢复原始代码 该思想是将每个算子符号依次作为主运算——根的。这将字符串

给定的
string='1*7/5-3'

我有一个表达式来计算字符串,比如
eval('1*7/5-3')

代码:

import __future__
string = '1*7/5-3'
print eval(compile(string, '<string>', 'eval', __future__.division.compiler_flag))

我不应该编辑它来删除“多余的”括号。事实上,它们是必要的。我正在恢复原始代码

该思想是将每个算子符号依次作为主运算——根的。这将字符串分成两部分,我们递归地应用该过程

 def parenthesize(string):
    '''
    Return a list of all ways to completely parenthesize operator/operand string
    '''
    operators = ['+','-','*','/']
    depth = len([s for s in string if s in operators]) 
    if depth == 0:
        return [string]
    if depth== 1:
        return ['('+ string + ')']
    answer = []
    for index, symbol in enumerate(string):
        if symbol in operators:
            left = string[:index]
            right = string[(index+1):]
            strings = ['(' + lt + ')' + symbol +'(' + rt + ')' 
                           for lt in parenthesize(left) 
                           for rt in parenthesize(right) ]
            answer.extend(strings)
    return answer    

 string='4+7/5-3'
 for t in parenthesize(string):print(t, eval(t))
这张照片

(4)+((7)/((5-3))) 7.5
(4)+(((7/5))-(3)) 2.4
((4+7))/((5-3)) 5.5
((4)+((7/5)))-(3) 2.4000000000000004
(((4+7))/(5))-(3) -0.7999999999999998

顺便说一句,这是针对Euler项目问题93的吗?

尝试创建数值列表和操作列表。尝试创建一个函数,在按指定顺序计算操作时返回结果:my_eval(list_values,list_ops,order_ops),其中order_ops=[1,2,3]是第一个示例,order_ops=[2,3,1]是第二个示例。似乎是递归的好候选者
(4)+((7)/((5-3))) 7.5
(4)+(((7/5))-(3)) 2.4
((4+7))/((5-3)) 5.5
((4)+((7/5)))-(3) 2.4000000000000004
(((4+7))/(5))-(3) -0.7999999999999998