可扩展有偏数字生成器-Python
我试图得到一个随机数生成器,它会有偏差,因为它需要一个数字,并打印一个可能接近的数字。以下是我现在拥有的:可扩展有偏数字生成器-Python,python,random,Python,Random,我试图得到一个随机数生成器,它会有偏差,因为它需要一个数字,并打印一个可能接近的数字。以下是我现在拥有的: def biasedRandom(rangen, rangex, target, biaslevel=1): if rangen > rangex: raise ValueError("Min value is less than max value.") return if not target in range(rangen, ra
def biasedRandom(rangen, rangex, target, biaslevel=1):
if rangen > rangex:
raise ValueError("Min value is less than max value.")
return
if not target in range(rangen, rangex):
raise ValueError("Bias target not inside range of random.")
return
num = random.randint(rangen, rangex)
for i in range(biaslevel):
distance = abs(num - target)
num -= random.randint(0, distance)
return num
这种方法效果很好,但有时会给出完全不合理的数字;e、 g.它曾为(1100,30,60)
给出-246174068358
。我觉得里面有一个我看不见的虫子
提前感谢。raise退出该功能-您不需要跟随raise返回 射程内目标(低、高)效率低;为什么不lo=hi: 提升值错误(“lo应小于hi”) elif目标<低或目标>=高: raise VALUERROR(“目标不在范围内(低,高)”) 其他: num=random.randint(低,高) 对于范围内的i(步): num+=int(random.random()*(target-num)) 返回数
随着步长的增加,这将非常迅速地收敛到目标上;您可能希望进行一些试用分发,以确保得到预期的结果,或者尝试使用random.gauss。raise退出函数-您不需要跟随raise返回 射程内目标(低、高)效率低;为什么不lo=hi: 提升值错误(“lo应小于hi”) elif目标<低或目标>=高: raise VALUERROR(“目标不在范围内(低,高)”) 其他: num=random.randint(低,高) 对于范围内的i(步): num+=int(random.random()*(target-num)) 返回数
随着步长的增加,这将非常迅速地收敛到目标上;您可能希望进行一些试验分布,以确保得到预期的结果,或者尝试使用random.gauss来代替。在计算num的最后一行中,您是否考虑过类似的问题
num = abs(num - random.randint(0,distance))
在计算num的最后一行中,您是这样想的吗
num = abs(num - random.randint(0,distance))
如果
num
小于target
,您不想将其添加到num
,而不是始终进行减法吗?假设你第一次得到1,那么如果你再从中减去60次,结果就不那么离谱了。顺便说一句:在提高后没有必要返回:它永远不会达到。一定是这样,我还在考虑差异,总是减法。如果小于target
,您不想添加到num
,而不是总是减法吗?假设你第一次得到1,那么如果你再从中减去60次,结果就不那么离谱了。顺便说一句:在加薪之后,没有必要返回:它永远不会到达。一定是这样,我还在考虑差异,你总是在减法。我不认为这是完全正确的。这可能是我写这篇文章时潜意识里认为我在做的事情,但我认为真正的答案在于天气num
我不认为是这样。这可能是我写这篇文章时潜意识里认为我在做的事情,但我认为真正的答案在于天气num
我喜欢这个解决方案;非常干净。我刚才的快速测试表明,虽然它很快接近目标,但它永远不会真正达到目标。我用round()
代替了循环中的int()
,这似乎效果更好;非常干净。我刚才的快速测试表明,虽然它很快接近目标,但它永远不会真正达到目标。我在循环中使用round()
而不是int()
,这样做似乎效果更好。