【问题标题】:How do i keep my loop from repeating my random values?如何防止循环重复我的随机值?
【发布时间】:2021-04-22 16:56:09
【问题描述】:

所以我正在学习如何处理概率以及如何在 Python 中绘制它们。我遇到了一个问题,我需要找到 2 个骰子之和大于 7 或奇数的概率。我知道结果大约是 75%,但它正在将其转换为我遇到问题的 Python。我解决问题的代码是这样的:

import random
import numpy as np
dice = [1,2,3,4,5,6]
value = 0
simulation_number = len(dice)**2
percentage = []
for i in range(0,simulation_number):
    dice1 = random.choice(dice)
    dice2 = random.choice(dice)
    random_match = dice1,dice2
    
    if (sum(random_match))>7 or (sum(random_match)%2) != 0:
        value += 1
percentage.append(np.round((value/simulation_number)*100,2))
print(percentage,"%")

它工作得很好,但每次我运行代码时,它都会给出不同的解决方案,因为循环会重复 random_match 的结果。如何在代码中包含不重复 random_match 值的条件?

【问题讨论】:

  • 对 random_match 重复结果是什么意思?不同是因为你没有播种吗? (即 np.random.seed)
  • 只需在 def 中运行您的代码并调用之前的随机匹配项
  • 代码对我来说似乎没问题...由于采样错误,您每次都会得到不同的解决方案...尝试将模拟数提高到一百万或更多,您应该会更接近 75%
  • 如果循环的每次迭代都应该代表一个单独的掷骰子,那么必须允许重复,因为这是一种自然的可能性。

标签: python numpy random probability dice


【解决方案1】:

生成从 1 到 6 的随机值将不起作用。假设你掷硬币 10 次。理论上你应该得到 5 个正面和 5 个反面。但由于抽样误差,这在现实生活中不会发生。生成随机值时,总会有一些抽样误差。

import random
import numpy as np
dice = [1,2,3,4,5,6]
value = 0
simulation_number = len(dice)**2
for i in range(len(dice)):
    for j in range(len(dice)):
        dice1 = dice[i]
        dice2 = dice[j]
        x = dice1+dice2
        if x>7 or x%2== 1:
            value += 1
percentage = np.round((value/simulation_number)*100,2)
print(f'{percentage} %')

这很有效,因为您只需要每个案例一次。使用 random 可能会一次又一次地采用相同的情况

【讨论】:

  • 这会给你 75% 的正确答案,但更多的是计算而不是模拟。
  • 是的,但是如果你想运行模拟,迭代理论上应该是无限的
  • 是的,理论上结果会无限接近 75%,但永远不会完全达到。我可以在我的笔记本电脑上在几秒钟内进行 1000 万次迭代,我得到 74.99%
  • @Binbougami 如果你想要计算,那么这个答案是正确的方法。否则你的代码很好,但你可能想增加simulation_number。
  • @JacobPhilpott 也没有指定他想运行模拟。我给了他发生这种情况的原因以及正确的方法。我值得一票
【解决方案2】:

我猜你在找random.sample

import random
dice = [1,2,3,4,5,6]
dice1, dice2 = random.sample(dice, 2)

【讨论】:

  • 这是有缺陷的,如果你掷两个独立的骰子,它们当然可以落在同一个数字上!
猜你喜欢
  • 2017-12-25
  • 1970-01-01
  • 2013-05-02
  • 2023-04-03
  • 1970-01-01
  • 1970-01-01
  • 2017-05-20
  • 1970-01-01
  • 2021-11-03
相关资源
最近更新 更多