通话功能?蟒蛇

时间:2014-11-21 13:05:44

标签: python function loops iteration

我的问题是我想: 然后我希望它在calc_energy函数中得到360次评估 然后存储结果,这样我可以计算年平均值,我想计算能量平均值.. 我应该调用函数而不是返回def_decide(v)??? 有人可以帮助我进入正确的轨道吗?

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

2 个答案:

答案 0 :(得分: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 :(得分:1)

您可以使用递归,这是一个调用自身的函数。下面你可以看到函数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。