2014-11-21 328 views
2

我的問題是,我想: ,然後我希望它得到calc_energy函數360次 評估,然後存儲結果,所以我可以計算年平均,我想計算能量平均值。 應該我調用函數而不是在def_decide(v)中返回? 有人可以幫助我走上正確的軌道嗎?呼叫功能? Python

def calc_v(latitud): 
    for t in range(0,360): 
     v=(23.5*math.sin(math.pi*(t-80)/180)+90-latitud)/90 
     decide_v(v): 

def decide_v(v): 
    if 0<v<1: 
     return(v**2) 
    if v>=1: 
     return(1) 
    if v<=0: 
     return(0) 

def calc_energy(v): 
    W=self.area*random(0,1)*self.sundigit*v 
    return W 

def sort(self,W): 
    W+=100/360 
+0

你是什麼意思,通過函數循環?函數中的for循環?遞歸? for循環中的函數? – 2014-11-21 13:09:42

+0

@Pellegrino:請不要破壞你自己的問題;這消除了人們花時間製作答案的許多有用之處。 – DSM 2014-11-23 00:39:41

回答

3

您可以從calc_v使發電機,然後用它,就像使用值的列表(注意的yield代替return):

def calc_v(latitude): 
    for t in range(0,360): 
     v=(23.5*math.sin(math.pi*(t-80)/180)+90-latitude)/90 
     yield v 

def decide_v(v): 
    if 0<v<1: 
     return v**2 
    elif v>=1: 
     return 1 
    else: 
     return 0 

for v in calc_v(latitude): 
    print decide_v(v) 
1

您可以使用recursion這是一個自我調用函數。下面你可以看到函數factorial在它自己內部被調用。 http://www.python-course.eu/recursive_functions.php

def factorial(n): 
    print("factorial has been called with n = " + str(n)) 
    if n == 1: 
     return 1 
    else: 
     res = n * factorial(n-1) 
     print("intermediate result for ", n, " * factorial(" ,n-1, "): ",res) 
     return res 

我感覺你並不真正想知道如何循環功能。我想你只是想在你給出的例子中調用你的函數。

def calc_v(latitud): 
    for t in range(0,366): 
     v=(23.5*math.sin(math.pi*(t-80)/180)+90-latitud)/90 
     decide_v(v) # return v 

def decide_v(v): 
    if 0<v<1: 
     print(v**2) 
    if v>=1: 
     print(1) 
    if v<=0: 
     print(0) 

當你在一個函數中使用return語句,那麼你將退出循環和功能,讓您的for循環只會到t運行= 0,那麼它會打出來的功能。我覺得你只是想打電話給你的功能,並給它的變量v

+0

非常感謝 – Pellegrino 2014-11-21 13:52:19