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

python随机数生成器的问题。这真的是随机的吗?,python,random,simulation,simulator,Python,Random,Simulation,Simulator,“random”模块内部的随机数生成器实际上是随机的吗 我正在尝试构建一个模拟篮球比赛的函数,使用随机数生成器来决定一支球队是否投篮以及他们投篮的方式。这是我搞砸的部分 def game(totalPosess,toRate,threeRate,threePct,effFg,orr): teamPosess = 0 teamA = 0 totalTno = 0 made3s = 0 totalOrr = 0 missed3s = 0 while teamPosess <= totalPos

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

我正在尝试构建一个模拟篮球比赛的函数,使用随机数生成器来决定一支球队是否投篮以及他们投篮的方式。这是我搞砸的部分

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))
def游戏(totalPosess、toRate、threeRate、threePct、effFg、orr):
teamPosess=0
teamA=0
totalTno=0
made3s=0
totalOrr=0
d3s=0
而teamPosess toRate:
shotStyle=random.randint(11000)
其他:
teamPosess+=1
总TNO+=1
印刷品(teamA)
打印('made3s-'、made3s、'missed3s-'、missed3s、'totalovers-'、totalTno、'orr-'、totalOrr)
打印(made3s/(made3s+missed3s))
打印(made3s+missed3s)
打印(teamPosess)
打印(made3s+missed3s/(teamPosess))
对于论点,使用金州统计数据;totalPosess=105,toRate=0.123,threeRate=0.379,threePct=0.38,orr=0.231

我遇到的问题是,几乎每支球队的三分球命中率都超过了50%。到今天为止,NBA得分最高的球队是0.409分。平均3个百分点是0.35。 我现在已经模拟了500多场比赛,我很难相信这真的是随机的。
如果有人有任何答案或知道更好的模块可供使用,我们将非常感谢您的反馈。

您可能正在使用python 2;在这种情况下,有一个问题

x/1000
因为除法将使用整数运算,因此得到0

改为

x/1000.

获得浮点除法是一个哲学概念。人类无法创造出真正随机的东西。 但这些模块足以生成模拟随机性的数字

我不会帮助您解决问题,但我将向您展示,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))))

当然,就篮球统计而言,这是随机的。尝试打印
x
的值以查看发生了什么。但是再一次,您没有显示1)threePointPct的值是多少,2)如何计算统计数据,3)这是Python2还是Python3(这会影响x/1000的结果)-我打赌2)threePointPct是多少?这是Python2还是Python3?
threePointPct
是从现实生活中观察到的百分比吗?Python的
random
绝对不是一个真正的随机数生成器(它是一个),但我怀疑这是您的问题的根源。threePointPct对于每个团队都是不同的,并且是从网站上刮下来的。例如,我打开一本字典,把一个特定的团队称为threePct['LaLakes']。据我所知,这些数据是准确的。当我说最高值是.409,平均值是.35时,这些是我从每个团队从网上搜集的数据。我不是自己计算数据的,我确信这不是问题所在。我正在jupyter笔记本中使用python 3.7。@笔记本:好的,但你如何确定“几乎每个团队的命中率都超过了50%?”?你需要展示整个问题。理想情况下,您应该创建一个其他人可以运行以复制您得到的结果的模型<代码>3/2在Python3中给出
1.5
,在Python2中给出
1
。谢谢,我会继续努力让它正确。
Loops: 100000, Percentage: 30.0%, Triggered: 29809
Expected/Triggered: 30000/29809
Deviance: 0.636666666667%