2012-07-13 27 views
2
from __future__ import division 
import math 

def main(): 
    the_discriminant = discrim(1,0,-4) 
    print the_discriminant 
    the_rest(discrim,b,a) 

def discrim(a,b,c): 
    discriminant = math.sqrt(math.pow(b,2)-4*a*c) 
    return discriminant, b,a 

def the_rest(discrim,b,a): 
    x = ((-b + discriminant)/2*a) 
    y = ((-b - discriminant)/2*a) 
    print x,y 

if __name__ == '__main__': 
    main() 

我對Python很新,我正在玩寫函數和返回變量,我對如何糾正代碼有點困惑。我正在寫一個二次求解器程序,但我需要在「休息」函數中使用判別式和a,b,c值。 (這是等式的其餘部分。)我對如何返回值並在另一個函數中使用它們感到困惑。謝謝!從各種函數返回變量的Python

回答

7
the_rest(*the_discriminant) 

或(和我喜歡這種方法):

d, b, a = discrim(1, 0, -4) 
the_rest(d, b, a) 
+0

謝謝!現在看來顯而易見的是,我想到了它。對於noob問題的回答! :/ – 2012-07-13 02:23:15

+0

@ShankurKumar沒問題:) – jamylak 2012-07-13 02:24:12

0

沒有什麼錯在你的discrim版本返回元組等。但是代碼沒有那麼有意義(IMO)。

嘗試它像這樣:

#!/usr/bin/env python 

from __future__ import division 
import math 

def main(): 
    a = 1 
    b = 0 
    c = -4 
    the_discriminant = discrim(a, b, c) 
    print the_discriminant 
    x, y = the_rest(the_discriminant,b,a) 
    print x, y 

def discrim(a,b,c): 
    discriminant = math.sqrt(math.pow(b,2)-4*a*c) 
    return discriminant 

def the_rest(d, b,a): 
    x = ((-b + d)/2*a) 
    y = ((-b - d)/2*a) 
    return x,y 

if __name__ == '__main__': 
    main() 
+0

布賴恩,你的方法看起來也很吸引人,但它不是按原樣工作。 (x =((-b +判別式)/ 2 * a))我們錯過了什麼? – 2012-07-13 02:36:40

+0

我一味地複製了原文,應該現在就工作 – 2012-07-13 02:37:41

+0

對不起,它仍然不起作用,這是我在解釋器中得到的... >>> 4.0 回溯(最近一次調用最後一次): 文件「C:\ Users \ Ravi \ Documents \ Python Scripts \ quadratic3.py」,第34行,in main() 文件「C:\ Users \ Ravi \ Documents \ Python Scripts \ quadratic3.py」,第21行,主要在 x,y = the_rest(discriminm,b,a) 文件「C:\ Users \ Ravi \ Documents \ Python Scripts \ quadratic3.py「,第29行,在the_rest x =(( - b + discriminm)/ 2 * a) TypeError:不支持的操作數pe(s)爲+:'int'和'function' – 2012-07-13 02:44:41

2

我相信這是你想要做什麼。你的discrim函數返回一個元組(類似於一個數組)。然後當你調用the_rest使用*表明您想元組的元素,而不是元組本身發作爲一個參數

from __future__ import division 
import math 

def main(): 
    the_discriminant = discrim(1,0,-4) 
    print the_discriminant 
    the_rest(*the_discriminant) 

def discrim(a,b,c): 
    discriminant = math.sqrt(math.pow(b,2)-4*a*c) 
    return discriminant, b,a 

def the_rest(discrim,b,a): 
    x = (-b + discrim)/(2*a) 
    y = (-b - discrim)/(2*a) 
    return x, y 

if __name__ == '__main__': 
    main() 
1

而jamylak的答案是正確的,它也可以是更容易維護返回一個簡單的課程。然後,如果您曾更改過函數/返回值/表示形式,則調用代碼:

  • 是基於名稱/標識符的;改變非常靈活;它不依賴於順序,也不依賴於元組長度。它還可以節省您在整個代碼中輸入和不必要的重複排序隱含規則。
  • 如果出現重大更改,解釋器將在模塊加載時發生錯誤,而不是在運行時發生錯誤,因此您不會錯過錯誤。這是因爲您試圖訪問指定成員,並且不依賴於某些「隱藏」或「隱含」規則,如元組排序,這些規則在代碼中沒有任何形式化。

對於一個較大的項目,這絕對是一條路。