我已经用rand.int函数运行了一个小时左右的代码,其中的代码模拟了骰子的滚动,骰子有十个面,你必须连续滚动六次,每次滚动相同的数字,并且它正在跟踪发生这种情况所需的尝试次数
success = 0
times = 0
count = 0
total = 0
for h in range(0,100):
for i in range(0,10):
times = 0
while success == 0:
numbers = [0,0,0,0,0,0,0,0,0,0]
for j in range(0,6):
x = int(random.randint(0,9))
numbers[x] = 1
count = numbers.count(1)
if count == 1:
success = 1
else:
times += 1
print(i)
total += times
success = 0
randtst = open("RandomTesting.txt", "a" )
randtst.write(str(total / 10)+"\n")
randtst.close()
运行这段代码,它已经进入一个文件,其内容如下 https://pastebin.com/7kRK1Z5f 并使用
newtotal = 0
totalamounts = 0
with open ('RandomTesting.txt', 'rt') as rndtxt:
for myline in rndtxt: ,
newtotal += float(myline)
totalamounts += 1
print(newtotal / totalamounts)
返回742073.7449342106
。这个数字是不正确的,(我想)因为这不接近10^6。我试着去掉这些内容,然后再做一次,但是没有用,这个数字远没有接近10^6。有人能看出这有什么问题吗
注意:我不是要求对代码或任何东西进行修复,我是问是否出现了错误以获得上述数字,而不是100000
我可以建议,如果你使用整数,你应该返回一个整数,而不是浮点数(如果我理解你的意图的话)
##randtst.write(str(total / 10)+"\n")
原件##randtst.write(str(total // 10)+"\n")
使用楼层分隔符而不是分隔符可以将数字四舍五入为整数,这更符合您的意图
如果您使用的是浮点数,可能会使用%来代替。这不仅会除以数字,而且只返回余数
%
在python中是模//
是python中的楼层划分如果总数返回一个浮点整数,这些符号将使数字保持稳定并更易于操作
如果不是这样的话,你就必须计算出小数点后面的每一个数字
如果是这种情况,你的结果将永远不会达到10x^6,因为求和你的值的那一行被卡在了一个循环中
我希望这对您有所帮助,如果没有,请告诉我,因为我也在学习python
这里有几个问题对你不利。底线在前面:
我觉得您的代码对于您描述的任务来说过于复杂,所以我从头开始编写了自己的版本。我计算出了滚动六个10面骰子的基本实验,并通过创建一个由10面骰子滚动组成的长度为6的列表来检查结果是否都相等。我无耻地借用BoarGules的评论,将结果放入一个只存储唯一元素的集合中,并计算集合的大小。当且仅当集合的大小为1时,骰子的值都相同。当不同元素的数量大于1时,我不断重复这一点,记录所需的试验次数,并在获得相同的模辊后返回试验次数
然后,对任何所需数量的复制运行该基本实验,并将结果放入numpy数组中。结果数据由numpy和scipy处理,得出平均试验次数和平均值的95%置信区间。置信区间使用结果的估计可变性来构造平均值的下限和上限。如果基本假设得到满足,以这种方式生成的边界应包含以这种方式生成的95%估计值的真实平均值,并解决我的BLUF中的第二点
代码如下:
从10面模具中产生6个特定值的相同结果的概率为10-6,但有10个可能的特定值,因此产生所有重复的总概率为10*10-6,或10-5。因此,在获得一组复制品之前,预期的试验次数为10次5次。上面的代码在我的计算机上运行了5分钟多一点,并生成了
102493.559 (96461.16185897154, 108525.95614102845)
作为输出。四舍五入到整数,这意味着平均试验次数为102493次,我们有95%的信心认为真实平均数介于96461和108526之间。该特定范围包含105,即与预期值一致。重新运行程序将产生不同的数字,但95%的运行也应该包含预期值,不包含预期值的少数应该仍然很接近相关问题 更多 >
编程相关推荐