(轉)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
(轉載時請注明作者和出處。)

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM