随机在python中排除0

时间:2013-11-27 10:10:43

标签: python random while-loop

我想要一个介于-1.5和1.5之间的数字,但这不应该是0.

我正在使用:

x = random.uniform( -1.5, 1.5 )

但我必须写一个条件来排除0,如:

x = 0
while (x==0):
    x = random.uniform( -1.5, 1.5 )

在没有条件的情况下写这个是否是另一种可能性?

2 个答案:

答案 0 :(得分:6)

你可以尝试

1.5 * (1.0 - random.random())

然后随机决定是否否定结果。从random.random() < 1.0开始,你应该(数字上)不得零。

修改

已经(正确地)指出这需要两个随机决定。要做出一个随机决定,请使用以下内容:

v = 3.0 * random.random()
result = 1.5 - v
if v >= 1.5:
    result = v - 3.0

如果0.0 <= v < 1.5,则会获得1.5 - v0.0 <= range < 1.5

否则,1.5 <= v < 3.0,您得到v - 3.0,所以0.0 > range >= -1.5

答案 1 :(得分:2)

你正在做的事情很好(这没有api方法),但我怀疑你应该有更多的东西:

epsilon = 1e-10  # for example
while abs(x) < epsilon: x = random.uniform(-1.5, 1.5)

因为避免零的最可能原因是出于数字原因,通常非常小的非零值也会导致问题。

你可以做的另一件事是利用random()的半开放性质:

x = 1.5 * (1 - random.random())
if random.randint(0, 1): x = -x

但我觉得你的代码更清晰(虽然上面看起来在技术上是正确的,但我不确定我是否相信它在所有情况下都有舍入等)。

[编辑:我提出了半开放的想法,独立于creichen,但得到它倒退,所以看到他们的代码后修复]