python随机数生成器的问题。它真的是随机的吗? [关闭]

问题描述 投票:-3回答:2

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

我正在尝试构建一个模拟篮球比赛的功能,使用随机数发生器来决定一支球队是否投篮以及他们采取了什么样的投篮。这是我搞砸的部分;

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

争论,使用金州的统计数据; totalPosess = 105,toRate = .123,threeRate = .379,threePct = .38,orr = .231

我遇到的问题几乎是每支球队三分球命中率超过50%。截至目前,NBA最高得分为3%的球队是.409。平均3分%是0.35。我现在模拟了500多场比赛,我很难相信这是真的随机。如果有人有任何答案或知道更好的模块使用,反馈将非常感激。

python random simulation simulator
2个回答
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%

0
投票

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

x/1000

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

改成

x/1000.

得到浮点除法

© www.soinside.com 2019 - 2024. All rights reserved.