2016-10-11 53 views
-1

我对python比较新,所以我对代码中的任何非常规性表示歉意。 我有一个函数返回一些值。我想重复这个函数n次并获得n次迭代的输出值的平均值(可能没有定义一个新函数)。如何才能做到这一点?例如:如何平均一个函数的输出值

def flip_coin(coins): 

    pr_head = 1 
    pr_tail = -1 
    options = (pr_head, pr_tail) 
    simulation = [[random.choice(options) for x in range(10)] for y in range(coins)] 

    rep = [i.count(1) for i in simulation] 
    m = min(rep) 
    ind_m = rep.index(m) 

    c_min = simulation[ind_m] 
    v_min = c_min.count(1)/10 

    return v_min 

for i in range(n): 
    flip_coin(coins) 
    #take average over(v_min) 

但是我不能访问“v_min”外的函数范围,并且当我迭代函数的函数内(与精确为如上循环)我得到的错误:

RecursionError: maximum recursion depth exceeded while calling a Python object. 
+0

你不是从函数返回的任何值'foo',默认为'无'。 –

+0

如果最小,请发布实际代码。如果不是,请创建一个最小版本。同时发布完整的追溯,或在递归错误的情况下,它的相关部分。如果你没有返回它(+其他一些情况),你也将无法访问函数外部的'some_output',至少不是没有调试器... –

+0

你必须包含[MCVE] - 小于_实际code_但比你所包含的更多。 –

回答

0

您没有分配函数调用结果。首先收集所有的函数调用,所以我们可以对他们的计算平均

v_min_list = [flip_coin(coins) for i in range(n)] 

那么我们可以发现平均这个答案Finding the average of a list

averag_v_min = sum(v_min_list)/float(len(v_min_list)) 
1

那是你想要的,你需要的返回值赋值给一个变量以后访问:

for i in range(n): 
    v_min2 = flip_coin(coins) 
    print v_min2 

如果你想每次的平均调用函数,你可以简单地做:

average_list = [] 
for i in range(10): 
    average_list.append((flip_coin(coins))) 

print (sum(average_list)/len(average_list)) 
相关问题