首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何说python (a+b) = (b+a)和(a*b) = (b*a)

如何说python (a+b) = (b+a)和(a*b) = (b*a)
EN

Stack Overflow用户
提问于 2020-04-10 04:13:00
回答 1查看 64关注 0票数 3

我有一个列表中数字之间所有可能的运算组合:

代码语言:javascript
运行
复制
list = ['2','7','8']

7+8*2
8+7*2
2*8+7
2+8*7
2-8*7
8-2/7
etc

我想知道是否可以说('7*2+8‘和'8+7*2’和'2*7+8')或(7*8*2和2*8*7和7*2*8)等操作是相同的。我想知道如果是相同的操作,如何只接受一个操作。

这是我用来创建这些不同操作的代码:

代码语言:javascript
运行
复制
Op = ['+','-','*','/']
array = []
for i in Op:
    array.append(string1 + i + string2)
    return array
EN

回答 1

Stack Overflow用户

发布于 2020-04-10 04:42:29

如果我很了解你,我想我对你有一个想法。

首先,您需要创建所有可能的数字和表达式排列。你可以这样做:

代码语言:javascript
运行
复制
import itertools
num_list = ['2','7','8']
op = ['+','-','*','/'] * 2 # *2 for the case of same operator twice

num_perm = list(itertools.permutations(num_list))
op_perm = list(itertools.permutations(op, 2)) # We want perm of two operators.

现在,你需要将所有的排列合并到一个数学表达式中,这是一个很好的方法:

代码语言:javascript
运行
复制
list_of_experssions = list()
for num in num_perm :
    for op in op_perm:
        list_of_experssions.append(num[0] + op[0] + num[1] + op[1] +num[2])

最后一步是检查两个表达式的结果是否相等(使用eval函数),但表达式本身是不同的:

代码语言:javascript
运行
复制
for exp1 in list_of_experssions:
    for exp2 in list_of_experssions:
        if eval(exp1) == eval(exp2) and exp1 != exp2:
            print(exp1, exp2)

在你的例子中,我们得到了336个数学表达式和2560对相等的表达式。

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

https://stackoverflow.com/questions/61129467

复制
相关文章

相似问题

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