(转)Python的“黑暗魔法”,两行解一元一次方程

无意看到一个大神写的《Linear equations solver in 3 lines (Python recipe)》,Python解一元一次方程只需要三行就完成了,确实很强悍啊。

我们来围观一下:

说到底呢,这个段代码的关键是利用了复数。
第一步:
2 * x + 233 = x * 8 + 3
变成
2 * x + 233 -(x * 8 + 3)
然后把x变成虚数1j
然后变成
2 * 1j + 233 -(1j * 8 + 3)
通过eval算出结果为230-6j
因为我们知道这个表达式结果为0,而且j也相当于x。
所以问题变成了:230-6j=0,也就是230-6x=0。
最后x = - 230 / 6 = 38.33333333336。

 

这里的核心是用到了Python的黑暗魔法eval,eval的第一个参数是表达式,第二个参数是命名空间,也就是把 x = 1j 通过第二个参数把一些值放进去。

神奇的求解函数:

 

def s(eq, var='x'):
    r = eval(eq.replace('=', '-(') + ')', {var:1j})
    return -r.real / r.imag

 

本文链接:http://everet.org/2012/04/linear-equations-solvers-in-python.html
(转载时请注明作者和出处。)

 

转载于:https://www.cnblogs.com/cheer-wang/p/2817886.html

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值