14

我开始学习python,我尝试通过传入一个负数和正数来生成随机值。比方说 -11

我应该如何在python中做到这一点?

4

9 回答 9

30

利用random.uniform(a, b)

>>> import random
>>> random.uniform(-1, 1)
0.4779007751444888
>>> random.uniform(-1, 1)
-0.10028581710574902
于 2012-05-14T08:08:12.370 回答
5
import random

def r(minimum, maximum):
    return minimum + (maximum - minimum) * random.random()

print r(-1, 1)

编辑:@San4ezrandom.uniform(-1, 1)是正确的方法。无需重新发明轮子……</p>

无论如何,random.uniform()编码为:

def uniform(self, a, b):
    "Get a random number in the range [a, b) or [a, b] depending on rounding."
    return a + (b-a) * self.random()
于 2012-05-14T08:06:09.450 回答
3

if you want integer in a specified range:

print random.randrange(-1, 2)

it uses the same convention as range, so the upper limit is not included.

random.uniform does something similar if you need float values, but it's not always clear if the upper limit is included or not

于 2012-05-14T08:09:57.880 回答
3

如果你想要一个给定间隔的随机整数

例子:

from random import randint
randint(-1,1)               --> Randomly returns one of the following: -1, 0, 1

区间 [-1, 1]

于 2020-01-23T16:40:01.387 回答
1

大多数语言都有一个函数,它将返回 [0, 1] 范围内的随机数,然后您可以对其进行操作以适应您需要的范围。在 python 中,函数是random.random. 因此,对于您的 [-1, 1] 范围,您可以这样做:

import random
random_number = random.random() * 2 - 1

通过将数字加倍,我们得到 [0, 2] 的范围,通过从中减去一个,我们得到 [-1, 1]。

于 2012-05-14T08:08:25.760 回答
1

你也可以做这样的事情

import random
random.choice([-1, 1])
于 2013-12-17T22:25:08.803 回答
0

我发现这适用于列表理解:

print([x for x in [random.randint(1, 11) * -1]])

或者

#int range is n1 to n2
def make_negative(n1, n2):
    print([x for x in [random.randint(n1, n2) * -1]])

make_negative(1,10)
于 2019-02-14T18:50:13.650 回答
0

我今天注意到了这一点。

 random.randint(a, b)

其中 B > A 或 B 大于 A

所以如果我们用 -999 代替 A 和 1 代替 B

它将给我们一个负随机整数或 0 和 1。

此外,这是数学中的一条规则,较大的负数的值小于较小的负数,例如 -999 < -1

这条规则可以在这里应用!

于 2020-04-04T02:14:38.213 回答
0

如果您想要正、负或混合范围内的 n 个随机值,您可以使用 random.sample(range(min,max), population)。

约束是距离(最大-最小)必须小于或等于总体值。在上面的示例中,您最多可以生成 6 个值

>> import random
>> random.sample(range(-3,3), 5) 
[-2, -3, 2, -1, 1]
于 2020-04-24T09:42:19.867 回答