python随机数生成器的问题。真的是随机的吗?

时间:2019-03-02 18:32:23

标签: python random simulation simulator

“随机”模块内部的随机数生成器实际上是随机的吗?

我正在尝试构建一个模拟篮球比赛的功能,使用随机数生成器来确定团队是否进行投篮以及他们进行哪种投篮。这是我要弄乱的部分;

def game(totalPosess,toRate,threeRate,threePct,effFg,orr):
teamPosess = 0
teamA = 0
totalTno = 0
made3s = 0
totalOrr = 0
missed3s = 0
while teamPosess <= totalPosess: 
    posession = random.randint(1,1000)
    if posession/1000.00 > toRate:
        shotStyle = random.randint(1,1000)

    else:
        teamPosess += 1
        totalTno += 1
print(teamA)
print('made 3s -',made3s,'missed 3s -',missed3s,'total turnovers -',totalTno,'orr -',totalOrr)
print(made3s/(made3s + missed3s))
print(made3s + missed3s)
print(teamPosess)
print(made3s + missed3s/(teamPosess))

对于参数,请使用Golden State的统计信息; totalPosess = 105,toRate = .123,threeRate = .379,threePct = .38,orr = .231

我遇到的问题是几乎每个团队的三分球命中率都超过50%。截至今天,全联盟得分最高的三分球队是.409。平均3点%为0.35。 我现在已经模拟了500多个游戏,很难相信这是真正的随机性。 如果任何人有任何答案或知道可以使用的更好的模块,反馈将不胜感激。

2 个答案:

答案 0 :(得分:1)

随机性是一个哲学概念。人没有能力创造真正随机的东西。 但是这些模块足以生成模拟随机性的数字。

我不会为您解决问题,但我将向您展示Python Random确实有效

import random

percentage = 30/100. # 30%
counter = 0
loops = 100000
for i in range(loops):
    x = random.randint(1,1000)

    if x/1000. <= percentage:# I expect 30% if loops to trigger this condition
        counter += 1 

print('Loops: {}, Percentage: {}%, Triggered: {}'.format(loops,100.*percentage,counter))
print('Expected/Triggered: {}/{}'.format(int(loops*percentage),counter))
print('Deviance: {}%'.format(100*abs(1-counter/float(loops*percentage))))

结果:

Loops: 100000, Percentage: 30.0%, Triggered: 29809
Expected/Triggered: 30000/29809
Deviance: 0.636666666667%

答案 1 :(得分:0)

可能您正在使用python 2;在这种情况下,

存在问题
x/1000

因为除法将使用整数算术完成,因此得到0

更改为

x/1000.

进行浮点除法

相关问题