根據給定的線性函數來肯定函數的表達形式:python
examples:數組
get_function([0,1,2,3,4]) => f(x)=x函數
get_function([1,4,7,10,13]) => f(x)=3x+1spa
get_function([0,3,6,9,12]) => f(x)=3xcode
將數組的長度限制在5.orm
話很少少,先上代碼,以後作分析。blog
1 def get_function(sequence): 2 m = sequence[0] 3 n = sequence[1] - m 4 if [n*x+m for x in range(5)] != sequence: 5 return "Non-liner sequence" 6 return "f(x)={}".format(get_format(m,n)) 7 8 def get_format(m, n): 9 if not n: 10 return m 11 n_string = "{}{}x".format("-" if n<0 else "", abs(n) if abs(n) !=1 else "") 12 m_string = "{}{}".format("+" if m>0 else "-", abs(m) if m else "") 13 return "".join([n_string,m_string])
此段代碼其實考察的是求線性函數的思想,只不過經過python代碼表現。get
線性函數的係數Δ=(y2-y1)/(x2-x1),若是Δ>0,則說明係數符號爲「+」,反之則爲「-」,此爲11行的含義,對於爲什麼是n和m這兩個數,應該很好理解。既然符號已經肯定,那麼對於係數而言只須要求出其絕對值便可,增函數或減函數已經經過係數符號肯定了。string
既然係數已經肯定,那下面須要解決的就是截距問題(根據幾何意義本人理解的叫法),若是根據幾何截距的概念是很好理解的,若是x=0時,y>=0,則說明截距的符號爲"+",反之則爲"-",同理既然符號肯定了,那麼數值只需求其絕對值便可。此爲12行的含義。io
對於行4則是驗證是否爲線性函數的簡單方式,經過get_format格式化最後的函數輸出。
與君共勉。。。。。。。。。。。。。。。。。。。。。。。。。奔跑的人生揹包客!