使用Monte Carlo方法估算两骰子和为7的概率:Python代码错误排查求助
问题排查与修正
核心错误点
错误1:用浮点数模拟骰子点数
骰子点数是1-6的整数,你用random.uniform(1,6)生成的是1到6之间的浮点数,两个浮点数相加恰好等于7的概率几乎为0,这是结果严重偏离理论值的根本原因。应该用random.randint(1,6)生成整数点数。错误2:初始值设置错误
sum_seven(成功次数)和dice_thrown(总投掷次数)初始化为1完全不合理——初始时没有进行任何投掷,这两个值都应该从0开始,否则会直接拉偏概率计算的初始结果。错误3:样本量过小
仅循环100次的样本量不足以支撑蒙特卡洛方法的稳定估计,误差会非常大,建议增大到10000次以上来降低波动。
修正后的代码
import random def monte_carlo_estimation(): sum_seven = 0 dice_thrown = 0 prob = 0 # 增大样本量到10000次,提升估计稳定性 for _ in range(10000): x = random.randint(1, 6) y = random.randint(1, 6) if x + y == 7: sum_seven += 1 dice_thrown += 1 prob = sum_seven / dice_thrown print(f"Estimate: {prob:.4f}") print(f"Theoretical probability: {6/36:.4f}") if __name__ == '__main__': monte_carlo_estimation()
内容的提问来源于stack exchange,提问作者steflikestocode
相关产品推荐
相关产品推荐

