生成0到9之间的随机整数

如何在Python中生成0到9(包括)之间的随机整数?

例如,0123456789

2633900 次浏览

试试这个:

from random import randrange, uniform
# randrange gives you an integral valueirand = randrange(0, 10)
# uniform gives you a floating-point valuefrand = uniform(0, 10)

尝试#0

from random import randrangeprint(randrange(10))

尝试#0

import randomprint(random.randint(0, 9))

文档状态:

random.randint(a, b)

返回一个随机整数N,使得a<=N<=b。

from random import randint
x = [randint(0, 9) for p in range(0, 10)]

这将生成10个范围为0到9(含)的伪随机整数。

试试这个random.shuffle

>>> import random>>> nums = range(10)>>> random.shuffle(nums)>>> nums[6, 3, 5, 4, 0, 1, 2, 9, 8, 7]

#0模块是Python 3.6中的新模块。这比#1模块更好,用于加密或安全用途。

要随机打印0-9范围内的整数:

from secrets import randbelowprint(randbelow(10))

有关详细信息,请参阅PEP 506

请注意,这实际上取决于用例。使用random模块,您可以设置一个随机种子,对伪随机但可重复的结果有用,而这在secrets模块中是不可能的。

random模块也更快(在Python 3.9上测试):

>>> timeit.timeit("random.randrange(10)", setup="import random")0.4920286529999771>>> timeit.timeit("secrets.randbelow(10)", setup="import secrets")2.0670733770000425

如果您想使用numpy,请使用以下内容:

import numpy as npprint(np.random.randint(0,10))

选择数组的大小(在本例中,我选择的大小为20)。然后,使用以下命令:

import numpy as npnp.random.randint(10, size=(1, 20))

您可以期望看到以下形式的输出(每次运行它都会返回不同的随机整数;因此,您可以期望输出数组中的整数与下面给出的示例不同)。

array([[1, 6, 1, 2, 8, 6, 3, 3, 2, 5, 6, 5, 0, 9, 5, 6, 4, 5, 9, 3]])

random.sample是另一个可以使用的

import randomn = 1 # specify the no. of numbersnum = random.sample(range(10),  n)num[0] # is the required number

最好的方法是使用导入随机函数

import randomprint(random.sample(range(10), 10))

或者没有任何库导入:

n={}for i in range(10):n[i]=i
for p in range(10):print(n.popitem()[1])

这里罂粟从字典n中删除并返回一个任意值。

在连续数字的情况下,#0#1可能是最好的选择,但如果你在一个序列中有几个不同的值(即list),你也可以使用#3

>>> import random>>> values = list(range(10))>>> random.choice(values)5

choice也适用于来自非连续样本的一项:

>>> values = [1, 2, 3, 5, 7, 10]>>> random.choice(values)7

如果你需要它“加密强大”,在python 3.6及更高版本中也有#0

>>> import secrets>>> values = list(range(10))>>> secrets.choice(values)2

我在Python 3.6中运气更好

str_Key = ""str_RandomKey = ""for int_I in range(128):str_Key = random.choice('0123456789')str_RandomKey = str_RandomKey + str_Key

只需添加'ABCD'和'abcd'或 '^! ~=->&;'等字符即可更改要从中提取的字符池,更改范围以更改生成的字符数。

>>> import random>>> random.randrange(10)3>>> random.randrange(10)1

要获取十个样本的列表:

>>> [random.randrange(10) for x in range(10)][9, 0, 4, 0, 5, 7, 4, 3, 6, 8]

虽然许多帖子演示了如何获取一个随机整数,但最初的问题是如何生成随机整数<的trong>的(复数):

如何在Python中生成0到9(包括)之间的随机整数?

为了清楚起见,我们在这里演示如何获得多个随机整数。

鉴于

>>> import random

lo = 0hi = 10size = 5

代码

多个随机整数

# A>>> [lo + int(random.random() * (hi - lo)) for _ in range(size)][5, 6, 1, 3, 0]

# B>>> [random.randint(lo, hi) for _ in range(size)][9, 7, 0, 7, 3]

# C>>> [random.randrange(lo, hi) for _ in range(size)][8, 3, 6, 8, 7]

# D>>> lst = list(range(lo, hi))>>> random.shuffle(lst)>>> [lst[i] for i in range(size)][6, 8, 2, 5, 1]

# E>>> [random.choice(range(lo, hi)) for _ in range(size)][2, 1, 6, 9, 5]

随机整数样本

# F>>> random.choices(range(lo, hi), k=size)[3, 2, 0, 8, 2]

# G>>> random.sample(range(lo, hi), k=size)[4, 5, 1, 2, 3]

详情

一些帖子演示了如何本地生成多个随机整数。1以下是一些解决隐含问题的选项:

  • 一个#0返回范围[0.0, 1.0)中的随机浮点数
  • B#0返回一个随机整数N,使得a <= N <= b
  • C#0randint(a, b+1)的别名
  • D#0在适当的位置洗牌一个序列
  • E#0从非空序列中返回一个随机元素
  • F#0从总体中返回k个选择(替换,Python 3.6+)
  • g#0从总体中返回k个唯一选择(没有替换):2

另请参阅R. Hettinger的说话关于使用random模块中的示例的分块和别名。

以下是标准库和Numpy中一些随机函数的比较:

| | random                | numpy.random                     ||-|-----------------------|----------------------------------||A| random()              | random()                         ||B| randint(low, high)    | randint(low, high)               ||C| randrange(low, high)  | randint(low, high)               ||D| shuffle(seq)          | shuffle(seq)                     ||E| choice(seq)           | choice(seq)                      ||F| choices(seq, k)       | choice(seq, size)                ||G| sample(seq, k)        | choice(seq, size, replace=False) |

您还可以快速将Numpy中的许多分布之一转换为随机整数的样本。3

示例

>>> np.random.normal(loc=5, scale=10, size=size).astype(int)array([17, 10,  3,  1, 16])
>>> np.random.poisson(lam=1, size=size).astype(int)array([1, 3, 0, 2, 0])
>>> np.random.lognormal(mean=0.0, sigma=1.0, size=size).astype(int)array([1, 3, 1, 5, 1])

1即@John Lawrence Aspden、@S T Mohammed、@SiddTheKid、@user14372、@zangw等。2@prashanth提到这个模块显示一个整数。3由@Siddharth Sat的演示

生成0到9之间的随机整数。

import numpyX = numpy.random.randint(0, 10, size=10)print(X)

输出:

[4 8 0 4 9 6 9 9 0 7]

我会尝试以下方法之一:

1.>numpy.random.randint

import numpy as npX1 = np.random.randint(low=0, high=10, size=(15,))
print (X1)>>> array([3, 0, 9, 0, 5, 7, 6, 9, 6, 7, 9, 6, 6, 9, 8])

2.>numpy.random.uniform

import numpy as npX2 = np.random.uniform(low=0, high=10, size=(15,)).astype(int)
print (X2)>>> array([8, 3, 6, 9, 1, 0, 3, 6, 3, 3, 1, 2, 4, 0, 4])

3.>numpy.random.choice

import numpy as npX3 = np.random.choice(a=10, size=15 )
print (X3)>>> array([1, 4, 0, 2, 5, 2, 7, 5, 0, 0, 8, 4, 4, 0, 9])

4.>random.randrange

from random import randrangeX4 = [randrange(10) for i in range(15)]
print (X4)>>> [2, 1, 4, 1, 2, 8, 8, 6, 4, 1, 0, 5, 8, 3, 5]

5.>random.randint

from random import randintX5 = [randint(0, 9) for i in range(0, 15)]
print (X5)>>> [6, 2, 6, 9, 5, 3, 2, 3, 3, 4, 4, 7, 4, 9, 6]

速度:

np.random.uniform和np.random.randintnp.random.choicerandom.randrangerandom.randint快得多(快10倍)。

%timeit np.random.randint(low=0, high=10, size=(15,))>> 1.64 µs ± 7.83 ns per loop (mean ± std. dev. of 7 runs, 1000000 loops each)
%timeit np.random.uniform(low=0, high=10, size=(15,)).astype(int)>> 2.15 µs ± 38.6 ns per loop (mean ± std. dev. of 7 runs, 100000 loops each)
%timeit np.random.choice(a=10, size=15 )>> 21 µs ± 629 ns per loop (mean ± std. dev. of 7 runs, 10000 loops each)
%timeit [randrange(10) for i in range(15)]>> 12.9 µs ± 60.4 ns per loop (mean ± std. dev. of 7 runs, 100000 loops each)
%timeit [randint(0, 9) for i in range(0, 15)]>> 20 µs ± 386 ns per loop (mean ± std. dev. of 7 runs, 100000 loops each)

备注:

1.>np.random.randint在半开区间[low, High)上生成随机整数。

2.>np.random.uniform在半开区间[低,高)上生成均匀分布的数字。

3.>np.random.choice在半开区间[低,高)上生成一个随机样本,就好像参数a是np.arange(n)一样。

4.>random.randrange(停止)从范围(开始、停止、步骤)生成一个随机数。

5.>random.randint(a, b)返回一个随机整数N,使得a<=N<=b。

6.>astype(int)将numpy数组转换为int数据类型。

7.>我选择了size=(15,)。这将为您提供一个长度=15的numpy数组。

这更像是一种数学方法,但它100%的时间都有效:

假设您想使用random.random()函数生成ab之间的数字。要实现这一点,只需执行以下操作:

num = (b-a)*random.random() + a;

当然,你可以生成更多的数字。

随机模块的留档页面:

警告:此模块的伪随机生成器不应该是用于安全目的。如果您使用os.urandom()或SystemRandom需要一个加密安全的伪随机数生成器。

随机系统是在Python 2.4中引入的,被认为是密码安全。它在撰写本文时仍然在Python 3.7.1中可用。

>>> import string>>> string.digits'0123456789'>>> import random>>> random.SystemRandom().choice(string.digits)'8'>>> random.SystemRandom().choice(string.digits)'1'>>> random.SystemRandom().choice(string.digits)'8'>>> random.SystemRandom().choice(string.digits)'5'

而不是string.digitsrange可以用于其他一些答案,也许还有一个理解。根据你的需要混合和匹配。

OpenTURNS不仅允许模拟随机整数,还允许使用UserDefined定义的类定义关联的分布。

下面模拟了分布的12个结果。

import openturns as otpoints = [[i] for i in range(10)]distribution = ot.UserDefined(points) # By default, with equal weights.for i in range(12):x = distribution.getRealization()print(i,x)

此打印:

0 [8]1 [7]2 [4]3 [7]4 [3]5 [3]6 [2]7 [9]8 [0]9 [5]10 [9]11 [6]

之所以有括号,是因为x是一维中的Point。在对getSample的一次调用中生成12个结果会更容易:

sample = distribution.getSample(12)

将产生:

>>> print(sample)[ v0 ]0 : [ 3  ]1 : [ 9  ]2 : [ 6  ]3 : [ 3  ]4 : [ 2  ]5 : [ 6  ]6 : [ 9  ]7 : [ 5  ]8 : [ 9  ]9 : [ 5  ]10 : [ 3  ]11 : [ 2  ]

关于这个主题的更多细节在这里:http://openturns.github.io/openturns/master/user_manual/_generated/openturns.UserDefined.html

我想我应该用quantumrand来补充这些答案,它使用ANU的量子数字生成器。不幸的是,这需要互联网连接,但如果你关心数字的“随机程度”,那么这可能会很有用。

https://pypi.org/project/quantumrand/

示例

import quantumrand
number = quantumrand.randint(0, 9)
print(number)

输出:4

文档有很多不同的例子,包括骰子滚动和列表选择器。

您需要random python模块,它是标准库的一部分。使用代码…

from random import randint
num1= randint(0,9)

这会将变量num1设置为09之间的随机数。

您可以尝试从Python导入随机模块,然后让它在九个数字之间进行选择。这真的很基本。

import randomnumbers = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
    

如果您稍后要使用它,您可以尝试将计算机选择的值放入变量中,但如果不是,则print函数应该这样工作:

choice = random.choice(numbers)print(choice)