Python實現3行代碼解簡單的一元一次方程
class Solution(object): def exec(self, equation): vars = None eqList = list(equation) denth = 0 for i,each in enumerate(equation): if each in "abcdefghijklmnopqrstuvwxyz": vars = each if i == 0: continue if equation[i-1] in '1234567890': eqList.insert(i + denth, '*') denth += 1 equation = ''.join(eqList) equation1 = equation.replace("=", "-(") + ")" c = eval(equation1, {vars: 1j}) return -c.real/c.imag s = Solution() print(s.exec("3a-1 =a+2"))
這篇文章主要介紹了Python實現3行代碼解簡單的一元一次方程,很適合Python初學者學習借鑑,須要的朋友能夠參考下
本文所述實例爲Python用3行代碼實現解一元一次方程,代碼簡潔高效,具體用法以下:python
1
2
|
>>> solve(
"x - 2*x + 5*x - 46*(235-24) = x + 2"
)
3236.0
|
功能代碼以下:函數
1
2
3
4
|
def
solve(eq,var
=
'x'
):
eq1
=
eq.replace(
"="
,
"-("
)
+
")"
c
=
eval
(eq1,{var:
1j
})
return
-
c.real
/
c.imag
|
下面就來解讀下代碼吧。學習
首先是第一行,它將等式進行了變形,生成了一個結果爲0的算式「x - 2*x + 5*x - 46*(235-24) -( x + 2)」。
第二行用eval來執行這個算式,並將x = 1j代入算式,結果是-9708+3j。
注意x = 1j,因此這個方程就化簡爲「-9708+3x = 0」了,只要將-(-9708) / 3就能獲得x了。
而-9708是這個複數的實部,3是這個複數的虛部,因而結果變成了「-c.real/c.imag」。
所以很顯然,這個函數是不能解複數方程的。
順帶一提,Python 2.x的/運算會使用整數除法,致使小數部分丟失,因此要得到正確結果就應該使用Python 3.x。
spa
但願本文所述實例對你們學習Python能有所幫助。code