python从键盘获取数学表达式字符串_python – 数学表达式中String类型的字符串操作...

想象一下

exp(49/200)+(x-49/200)

我想传递函数“roundn”的参数,无论是不是加法或减法的操作

所以我的表情变成了

roundn(exp(roundn(49/200, n)), n) + (x - roundn(49/200, n)

我想要操纵的表达是这样的:

exp(49/200)+exp(49/200)*(x-49/200)+1/2*exp(49/200)*(x-49/200)^2+1/6*exp(49/200)*(x-49/200)^3+1/24*exp(49/200)*(x-49/200)^4+1/120*exp(49/200)*(x-49/200)^5+1/720*exp(49/200)*(x-49/200)^6+1/5040*exp(49/200)*(x-49/200)^7+1/40320*exp(49/200)*(x-49/200)^8+1/362880*exp(49/200)*(x-49/200)^9+1/3628800*exp(49/200)*(x-49/200)^10+1/39916800*exp(49/200)*(x-49/200)^11

解决方法:

也许你认为你想要这样做,但你真的不想这样做.新的Pythoners通常认为他们需要舍入浮点数,因为在评估时他们会得到意想不到的结果(如1.0 / 10 = 0.100000000000001).我没有在你的表达式上做一些愚蠢的字符串替换,而是为round(49/200,n)创建了一个变量,并进行了一些格式清理. exp(49/200)也不需要评估13次,只需执行一次并参考计算值.

zz = round(49/200,n)

e_zz = exp(zz)

ans = (e_zz +

e_zz * (x-zz) +

1/2 * e_zz * (x-zz)**2 +

1/6 * e_zz * (x-zz)**3 +

1/24 * e_zz * (x-zz)**4 +

1/120 * e_zz * (x-zz)**5 +

1/720 * e_zz * (x-zz)**6 +

1/5040 * e_zz * (x-zz)**7 +

1/40320 * e_zz * (x-zz)**8 +

1/362880 * e_zz * (x-zz)**9 +

1/3628800 * e_zz * (x-zz)**10 +

1/39916800 * e_zz * (x-zz)**11)

将e提高到四舍五入的数字几乎是不合适的.同样地,将四舍五入的数字提高到11’次幂. (另请注意,在Python中,取幂运算符是**,而不是^.)

编辑:

如果S.Lott没有建议代数简化,我会原样保留原样.但是* e_zz可以在每个术语中被考虑,使得更简单(并且可能更快):

zz = round(49/200,n)

e_zz = exp(zz)

ans = e_zz * (1 +

(x-zz) +

1/2 * (x-zz)**2 +

1/6 * (x-zz)**3 +

1/24 * (x-zz)**4 +

1/120 * (x-zz)**5 +

1/720 * (x-zz)**6 +

1/5040 * (x-zz)**7 +

1/40320 * (x-zz)**8 +

1/362880 * (x-zz)**9 +

1/3628800 * (x-zz)**10 +

1/39916800 * (x-zz)**11)

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值