除了最后几行之外,一切都正常,我得到了一个类型错误。不确定哪种数据类型需要更改。有任何想法吗?该程序只需滚动两个骰子并计算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()
答案 0 :(得分: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)
答案 1 :(得分: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)
答案 2 :(得分: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)
答案 3 :(得分:0)
正如马丁所指出的,总数的元素是元组 - 每个骰子卷(前 - (3,4)
,(1,1)
等)
所以,如果我理解你的意图,你也需要将它们加在一起。你不能直接在元组上求和。
以下内容将在找到总和之前将每个卷添加到一起:
s = sum(map(lambda x: x[0]+x[1], total))
请不要硬编码100.0
。使用类似s*1.0/len(total)