我正在编写一些需要通过随机浮动进行除法的函数,虽然它高度不可能它会抛出ZeroDivisionError,但我无法入睡直到我胜利积极。是否有一个用于Python的random.random()模拟,它是0独占的。
答案 0 :(得分:5)
正如凯文·克里斯托弗·亨利所指出的那样random.random
返回值[0.0,1.0],很容易通过以下方式将其转换为(0.0,1.0)而没有任何条件代码:
1.0 - random.random()
答案 1 :(得分:2)
如果您不介意编写自己的功能,请参阅:
def rand():
x = 0
while x == 0:
x = random.random()
return x
这会随机选择一个随机浮点直到随机浮点数不等于0,然后返回它:
>>> def rand():
... x = 0
... while x == 0:
... x = random.random()
... return x
...
>>> rand()
0.8330963681114979
>>> rand()
0.6061231841612397
>>> rand()
0.10548161965303249
>>> rand()
0.6102130916030852
答案 2 :(得分:1)
一种方法是将其从[0.0,1.0]转换为(0.0,1.0):
def nonzero_random():
return random.random() or 1.0
答案 3 :(得分:1)
因此,如果我们有一个范围为[x, y)
的函数,但我们希望它采用(x, y)
的范围,那么C ++函数std::nextafter
将解决这个问题。
可悲的是,库存python中没有提供类似的功能。我们可以在numpy中找到它。
random.uniform(numpy.nextafter(0, 1), 1)
如果您不想依赖numpy,也可以对数字进行硬编码:
random.uniform(5e-324, 1)
答案 4 :(得分:0)
尝试:
random.randrange(start, stop, step)
即使您被迫拥有一系列整数,也可以随时划分结果。
>>> random.randrange(1, 1000)/ float(1000)
0.428