2013-12-15 53 views
1

除了最後幾行,我得到一個typeerror之外,一切正常。不確定哪些數據類型需要改變。有任何想法嗎?該計劃簡單地滾動兩個骰子並計算出100卷中的平均數。我如何計算數字列表中的平均數

#two dice roll with average of rolls 
import random 

total=[] 

def roll(): 
    for i in range(100): 
     roll_d=random.randint(1,6), random.randint(1,6) 
     total.append(roll_d) 
     print(roll_d) 

def main(): 

    roll() 

    s=sum(total) 
    average=s/100.0 
    print(average) 

main() 
+1

你好,你應該確切地發佈你的錯誤:什麼指令它失敗? –

回答

1

每個元素在total是兩個整數的元組

你必須定義你想如何將這些元組相加。也許你想單獨添加捲:

def roll(): 
    for i in range(100): 
     roll_d=random.randint(1,6), random.randint(1,6) 
     total.extend(roll_d) 
     print(roll_d) 

這裏total.extend()分別通過兩個輥total列表。或許你需要存儲卷的總和

def roll(): 
    for i in range(100): 
     roll_d=random.randint(1,6), random.randint(1,6) 
     total.append(roll_d[0] + roll_d[1]) 
     print(roll_d) 

如果你想保持存儲在雙輥,您需要調整您的sum()通話總結各卷號:

s = sum(r for pair in total for r in pair) 
0

正如馬丁指出,總的元素是元組 - 每個骰子輥(前 - (3,4)(1,1)等)

所以,如果我正確地理解你的意圖,你還需要將它們加在一起。你不能直接在元組上求和。

下面將找出總和前加在一起每卷:

s = sum(map(lambda x: x[0]+x[1], total))

請不要硬編碼100.0。使用類似s*1.0/len(total)

1

的建議,使用numpy數組來代替名單:

import numpy as np 
total = np.random.randint(low=1, high=6+1, size=(100,2)) # 100 by 2 array 

total.mean()  # average of all values (1 number) 
total.mean(axis=0) # average of each column (2 numbers) 
total.mean(axis=1) # average of each row  (100 numbers) 
1

方法有很多種:

print reduce(lambda x, y: x + y, total)/(len(total)*1.0) 

sum(total)/(len(total)*1.0) 

1.0是確保你得到一個浮點數部門

或使用numpy的:

import numpy as np 
print np.mean(total)