“随机”模块内部的随机数生成器实际上是随机的吗?
我正在尝试构建一个模拟篮球比赛的功能,使用随机数生成器来确定团队是否进行投篮以及他们进行哪种投篮。这是我要弄乱的部分;
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多个游戏,很难相信这是真正的随机性。 如果任何人有任何答案或知道可以使用的更好的模块,反馈将不胜感激。
答案 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.
进行浮点除法