python - Python 程序,计算掷骰子 12 次时至少两次得到 1 的概率
问题描述
import random
import sys
bestcounter1 = 0
bestcounter2=0
get_sample = int(sys.argv[1])
for i in range(get_sample):
for i in range(12):
if (random.randint(1,6)==1):
bestcounter1+=1
bestcounter2+=1
oneatleasttwice = (bestcounter2*1.0)/(2*(get_sample))
#Divide by 2 to make both comparable. Otherwise 2 will always be greater than 1 !
print("One atleast twice in 12 rolls: ", oneatleasttwice)
谁能解释这里使用的逻辑是否正确?我得到的输出总是在 1 左右。
谢谢
解决方案
你必须把你的柜台放在正确的地方。假设bestcounter1
用于在每次运行(12 次滚动)期间计算 1 的值,而bestcounter2
当您获得 2 个或更多值 1 时用于计算运行次数。那么您的主 for 循环应如下所示:
for i in range(get_sample):
# reset before every run
bestcounter1 = 0
for i in range(12):
if random.randint(1, 6) == 1:
# count values of 1
bestcounter1 += 1
# check if we got 2 or more values of 1
if bestcounter1 >= 2:
# count proper cases
bestcounter2 += 1
break
oneatleasttwice = bestcounter2 / get_sample
运行 100 万次,我得到了 61.9% 的结果。
推荐阅读
- sql - SQL 查询,其中包含员工加入每个经理的顺序
- sqlite - 如何使用 LINQ 查询获取以大写、小写或组合保存的某些记录的计数
- reactjs - Mousetrap.bindGlobal 不是一个函数
- android - nativescript 中的多项活动
- python - Finding the logits with respect to labels Tensorflow Python
- python-3.x - How to draw dendrogram in matplotlib without using scipy?
- list - groovy 中一键多值的示例
- hardware - 是什么让非线性函数在硬件(例如 FPGA)中的计算成本很高?
- python - 根据名称中的前几个单词移动文件
- mysql - Spring Boot War 文件未连接到 kubernetes 中的 MySQL 数据库?