2016-10-11 27 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)) 
相關問題