蒙特卡洛模拟:三个骰子和>10的统计代码合理性疑问
关于蒙特卡洛模拟骰子问题的解答
一、如何判定结果的True或False?
你的simulate函数已经实现了明确的判定逻辑:
- 生成3个1-6的随机整数,模拟掷三个骰子的点数
- 计算三个点数的总和
- 若总和大于10,返回
True;否则返回False
直白点说:只要三个骰子点数加起来超过10,函数就返回True,反之返回False。
二、你的代码是否合理?
核心逻辑的合理性
这段统计代码逻辑是可行的——在Python中True等价于整数1,False等价于整数0,所以true_results += simulate()确实能累加True出现的次数。
但代码存在几个可以优化的细节,让它更规范、易维护:
- 补全缺失的模块导入:你用到的
randint来自random模块,必须在代码开头添加from random import randint,否则会触发NameError。 - 避免覆盖内置函数:
sum是Python内置的求和函数,把它用作变量名会覆盖原有功能,建议改成total这类自定义名称。 - 简化返回逻辑:
simulate里的if-else分支可以直接返回判断结果,不用冗余的分支语句。 - 简化骰子求和代码:可以用生成器表达式配合
sum()函数,减少重复的randint调用。
优化后的代码示例
from random import randint def simulate(): """模拟三个骰子,点数和大于10则返回True""" total = sum(randint(1, 6) for _ in range(3)) return total > 10 true_results = 0 trial_num = 1000 for _ in range(trial_num): # 用显式判断替代隐式类型转换,可读性更强 if simulate(): true_results += 1 # 可以直接计算模拟得到的概率 probability = true_results / trial_num print(f"模拟{trial_num}次后,点数和大于10的概率约为{probability:.2%}")
内容的提问来源于stack exchange,提问作者roTenshi2
相关产品推荐
相关产品推荐

