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

2024-09-28 15:34:49 发布

您现在位置:Python中文网/ 问答频道 /正文

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

我试图建立一个函数,模拟一场篮球比赛,使用随机数生成器来决定一支球队是否投篮,以及他们投了什么样的球。这是我搞砸了的部分

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

我遇到的问题是几乎每支球队的投篮命中率都在三分之一以上。到今天为止,NBA最高的三分之一的球队是.409。平均3个百分点是0.35。 我已经模拟了500多场比赛,我很难相信这真的是随机的。 如果任何人有任何答案或知道一个更好的模块使用,反馈将不胜感激。在


Tags: 模块print球队orr投篮teamamissed3steamposess
2条回答

随机性是一个哲学概念。人类无法创造出真正的随机的东西。 但是这些模块足够好,可以生成模拟随机性的数字。在

我不会帮你解决你的问题,但我会告诉你,pythonrandom真的很管用

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))))

结果:

^{pr2}$

可能您正在使用python2;在本例中,有一个问题

x/1000

因为除法将使用整数运算,因此给出0

更改为

^{pr2}$

获取浮点除法

相关问题 更多 >