2014-11-21 331 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