首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何用表达式中的和替换整数

如何用表达式中的和替换整数
EN

Stack Overflow用户
提问于 2022-10-07 09:50:01
回答 2查看 52关注 0票数 0

嗨,我编辑我的问题是因为我发现我的问题更大:我不能使用subs函数:

代码语言:javascript
复制
from sympy import *
x, y, z = symbols("x y z")

expr = x
expr.subs(x, y)
print(expr)

给我一个"x“。这可能是因为我用同情的方式来对付蟒蛇吗?

编辑之前的问题:

我是新来的,我的问题是:我想用一个sum (3+2)替换值5,但是不能用.subs来管理它,我尝试了这样做:

代码语言:javascript
复制
from sympy import *
    
def change(expr):
    '''
    if it's a leaf substitute 5 by 3+2
    '''
    if len(expr.args)==1:
        expr.subs(UnevaluatedExpr(5), UnevaluatedExpr(3) + UnevaluatedExpr(2))
        print(expr)
    for arg in expr.args: 
        change(arg)
    
expr = UnevaluatedExpr(5)*UnevaluatedExpr(10)-UnevaluatedExpr(5)**UnevaluatedExpr(2)
#i.e. 5*10-5^2
change(expr)          #should substitue 5s by (2+3)

但是它并没有改变任何事情:/如果你对我做错了什么有任何想法,我会非常感谢,提前谢谢!编辑:我在subs函数中有一个错误,但是它仍然不能工作,现在它是固定的

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2022-10-07 12:44:33

因为表达式是不可变的,所以在表达式上使用subs对原始表达式没有任何作用,它只创建一个新的(可能不同的)表达式。因此,expr在did expr.subs(x,y)之后仍然是x的观察结果与此一致。如果你印了expr.subs(x,y),你就会看到y

另外,由于您的change函数在检查expr值时不返回新表达式,所以它没有改变。

如果您想编写自己的函数,您可以在这方面寻求帮助。如果要用sum替换整数,可以使用subs方法本身:

代码语言:javascript
复制
>>> expr = UnevaluatedExpr(5)*UnevaluatedExpr(10)-UnevaluatedExpr(5)**UnevaluatedExpr(2)
>>> expr.subs(5, UnevaluatedExpr(2)+3)
(3 + 2)*10 - (3 + 2)**2
>>> expr  # unchanged unless you do expr = expr.subs(5, UnevaluatedExpr(2)+3)
5*10 - 5**2
票数 1
EN

Stack Overflow用户

发布于 2022-10-07 09:59:38

我想你把subs的论点搞错了。以下是你是如何做到的:

代码语言:javascript
复制
expr.subs(UnevaluatedExpr(5), UnevaluatedExpr(3) + UnevaluatedExpr(2))
# out: (2 + 3)*10 - (2 + 3)**2
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/73985356

复制
相关文章

相似问题

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