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

1869

如何在Python中生成介于0和9(含)之间的随机整数?

例如,0123456789


这段程序相关的内容是:如何在Python中创建一个加密安全的随机数。以下是代码示例:>>> from random import SystemRandom >>> cryptogen = SystemRandom() >>> [cryptogen.randrange(3) for i in range(20)]请注意,以上代码仅供参考,不应用于生产环境。 - Charlie Parker
1
这段代码是有效的:import random; print(random.randint(0, 9)) - Charlie Parker
23个回答

18

如果需要连续的数字,randintrandrange 可能是最好的选择,但如果你的序列中有几个不同的值(例如一个 list),你也可以使用choice

>>> 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及更高版本中也有一个secrets.choice

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

如果我们想要从序列中获取更多的数字呢? - Gunjan naik
如果不需要重复选择,可以使用 random.sample。如果需要重复选择,可以使用带有 choice 的列表推导式:例如,对于包含 3 个随机值的列表,可以使用 [choice(values) for _ in range(3)] - MSeifert

14

如果您想使用numpy,则使用以下代码:

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

1
你可以介绍一下 "numpy"。 - Simón
12
好的。谢谢提供链接。但是我本意是认为,在引用两行代码之前,您可以通过提供细节来改进您的答案;例如,某人为什么会更喜欢使用它而不是已经内置的东西。无论如何,您并不一定要这样做。 - Simón

9
>>> 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]

8

您可以尝试从Python中导入random模块,并让它在九个数字之间进行选择。这非常基础。

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

    

如果您将来要使用计算机选择的值,则可以尝试将其放入变量中,但如果不需要,请使用print函数:

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

7

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

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

输出:

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

6

最好的方法是使用import Random函数。

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

或者不使用任何库导入:

n={} 
for i in range(10):
    n[i]=i

for p in range(10):
    print(n.popitem()[1])

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


5

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

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

3
这更多是一种数学方法,但可以100%生效:
假设你想使用 `random.random()` 函数生成一个介于 `a` 和 `b` 之间的数字。为了实现这个目标,只需要执行以下操作:
``` num = (b-a)*random.random() + a; ```
当然,你也可以生成更多的数字。

这将生成一个float值。要获取纯整数:num = int(round((b-a)*random.random(),1)) + a - WestCoastProjects

3

来自 random 模块的文档页面:

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

random.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'

可以使用 range 代替 string.digits,根据其他答案可能会结合列表推导式混合使用。根据需要进行组合。


不错的验证流程 - WestCoastProjects

2

我想和quantumrand一起回答这个问题,它使用了ANU的量子号生成器。不幸的是,这需要互联网连接,但如果你关心数字的“随机程度”,那么这可能很有用。

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

例子

import quantumrand

number = quantumrand.randint(0, 9)

print(number)

输出:4

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


1
有谁能指望拥有一个互联网连接呢? :) 你可以添加代码来捕获连接异常,并在这种情况下返回标准的 random.randrange(10) - WestCoastProjects
ANU网站声称它是“真正的随机”。在这个宇宙中,不存在所谓的“真正的随机”,尤其是那些通过互联网发送的数字。 - dns

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接