gpt4 book ai didi

python - python中randint函数的意外结果

转载 作者:行者123 更新时间:2023-12-05 08:45:16 25 4
gpt4 key购买 nike

我正在尝试模拟 dnd 骰子掷骰以获得 1 和(对于此示例)14 之间均匀分布的数字。

我的代码如下:

from random import randint

def r(n):
return randint(1, n)
def d4():
return r(4)
def d8():
return r(8)
def d2():
return d4()%2+1
def d7():
res = d8()
while res == 8:
res = d8()
return res
def d14():
return d7()*d2()

# sim
from collections import Counter

res = Counter()
for i in range(100000):
res[d14()] += 1


t = 0
for k in sorted(res.keys()):
print(k, res[k])
t += res[k]

print(t)

我分别检查了 d2 和 d7,它们似乎运行正常。

sim 部分只是检查每个结果的可能性是否相同,但输出似乎不正确。

1 7185
2 14260
3 7220
4 14276
5 7239
6 14349
7 7171
8 6992
10 7078
12 7124
14 7106
100000

这就是它这次输出的内容。看起来 2、4 和 6 出现的可能性是其他任何东西的两倍。有时它会在我不更改代码的情况下发生变化,但这是预期的,因为它应该是随机的,但总会有数字出现两倍的可能性,而且它们总是偶数。我已经计算过了,希望是正确的,这显然不应该发生。

是我的代码有误还是我不知道 randint 函数本身有什么问题?

最佳答案

return d7()*d2() : 您正在将两个随机数相乘。

6可以通过两种方式制作:

  • 1 * 6
  • 2 * 3

5可以用一种方式制作:

  • 1 * 5

等等

但是9、11、13做不出来。

因此,选择 2、4 和 6 的可能性是选择 1、3、5、7、10、12 和 14 的两倍,而不能选择 9、11 和 13。

<表类="s-表"><头><日>数 制作方法<正文>1 1*1 2 1*2 ; 2*1 3 1*3 4 1*4 ; 2*2 5 1*5 6 1*6 ; 2*3 7 1*7 8 2*4 910 2*5 1112 2*6 1314 2*7

关于python - python中randint函数的意外结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/73282383/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com