Python實現3行代碼解簡單的一元一次方程

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

相關文章
相關標籤/搜索