首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >Python eval表达式算术运算符的所有排列

Python eval表达式算术运算符的所有排列
EN

Stack Overflow用户
提问于 2015-10-20 02:56:44
回答 1查看 797关注 0票数 2

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

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

代码:

代码语言:javascript
运行
复制
import __future__
string = '1*7/5-3'
print eval(compile(string, '<string>', 'eval', __future__.division.compiler_flag))

我想要评估所有的排列

代码语言:javascript
运行
复制
example 
        eval('((1*7)/5)-3') 
        eval('1*((7/5)-3)')
        and so on
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-10-20 15:04:28

我不应该编辑它以消除“无关的”括号。事实上,它们是必要的。我要回到原来的代码。

其思想是将每个运算符符号依次视为主要操作-- 二叉树的根。这将字符串分成两部分,我们递归地应用这个过程。

代码语言:javascript
运行
复制
 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))

这个指纹

代码语言:javascript
运行
复制
(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号问题吗?

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/33227216

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档