Os números aleatórios desempenham um papel importante no campo da ciência da computação e são usados para simular aleatoriedade do mundo real, geração de dados, criptografia e muitos outros campos. O módulo random em Python oferece diversas funções de geração de números aleatórios. Este artigo resume o uso do módulo random.
Diretório de artigos
Módulo aleatório do Python
Precauções
-
Pseudorandomness : Python usa o módulo random para gerar números pseudoaleatórios de várias distribuições . Números aleatórios gerados por computador são todos números pseudo-aleatórios, que são gerados por um algoritmo determinístico e apenas parecem aleatórios. Se for necessário um alto grau de aleatoriedade, são necessárias fontes adicionais de aleatoriedade.
-
Diferentes tipos de aleatoriedade : Em cenários como simulação, criptografia, etc., é necessário prestar atenção a diferentes tipos de requisitos de aleatoriedade. Se você acessar os documentos do Python para obter a documentação deste módulo, verá um aviso:
Obviamente, o módulo aleatório é adequado apenas para necessidades gerais de números aleatórios. O módulo aleatório usa o algoritmo Mersenne Twister para gerar números aleatórios. Mas esse algoritmo é completamente determinístico e, para cenários que exigem aleatoriedade de alta intensidade, como criptografia, o módulo secrets deve ser usado.
Funções internas do módulo aleatório do Python
Abaixo estão as várias funções integradas no módulo aleatório. Essas funções podem gerar números pseudo-aleatórios em diferentes cenários:
A lista a seguir contém breves descrições das funções geradoras de números aleatórios acima:
Nome da função | descrever |
---|---|
randint(a, b) |
gerar um [a, b] número inteiro aleatório no intervalo |
randrange(start, stop, step) |
gerar um step elemento aleatório em uma sequência de inteiros incrementados por |
random() |
Gere um número de ponto flutuante aleatório no intervalo [0,0, 1,0) |
uniform(a, b) |
Gera um [a, b) número de ponto flutuante aleatório no intervalo |
gauss(mu, sigma) |
Gere um número de ponto flutuante aleatório que esteja em conformidade com uma distribuição Gaussiana com média mu e desvio padrãosigma |
sample(population, k) |
population Selecione aleatoriamente k elementos da sequência sem repetição |
choice(sequence) |
Selecione aleatoriamente um elemento de uma sequência |
shuffle(sequence) |
Embaralhe aleatoriamente a ordem dos elementos em uma sequência |
seed(a=None) |
Inicialize a semente do gerador de números aleatórios usado para reproduzir a sequência aleatória |
Abaixo estão descrições mais detalhadas e exemplos dessas funções.
randint()
Esta função gera inteiros entre o intervalo especificado. Aceita dois parâmetros xxx yyyy e gerar inteiroiii , 使得x < = i < = yx <= i <= yx<=eu<=y。
import random
a = random.randint(3, 6)
print(a) # 输出:3
randrange()
Esta função gera um elemento aleatório em uma sequência de inteiros step
com um tamanho de passo de . start
e stop
são intervalos, e o intervalo de valores é [start, stop)
. Se step
o parâmetro for omitido, o padrão será 1.
import random
a = random.randrange(1, 10, 2)
print(a) # 输出:7
aleatório()
Esta função gera um [0.0, 1.0)
número de ponto flutuante aleatório no intervalo. Todos os números neste intervalo têm probabilidade igual.
import random
a = random.random()
print(a) # 输出:0.6427979778735594
uniforme()
Esta função gera um [a, b)
número de ponto flutuante aleatório no intervalo. Semelhante random()
, mas você pode especificar um intervalo.
import random
a = random.uniform(3, 6)
print(a) # 输出:3.512451152441262
gauss(mu, sigma)
Esta função gera um número de ponto flutuante aleatório que segue uma distribuição gaussiana (também conhecida como distribuição normal). mu
é a média e sigma
é o desvio padrão, controlando a forma da distribuição.
import random
a = random.gauss(3, 0.5)
print(a) # 输出:2.9743970359818612
amostra()
Se você deseja vários elementos aleatórios em uma sequência, pode usar sample()
. Leva dois argumentos population
e k
, onde population
é uma sequência e k
é um número inteiro. A função então population
seleciona aleatoriamente k
os elementos da sequência e os retorna como uma lista. Escolha não repetir.
import random
seq = (12, 33, 67, 55, 78, 90, 34, 67, 88)
a = random.sample(seq, 5)
print(a) # 输出:[88, 78, 67, 34, 33]
escolha (sequência)
Você pode usar esta função se quiser selecionar elementos aleatórios de uma sequência específica. Leva um parâmetro - sequence
. Ele retorna um elemento aleatório de uma sequência.
import random
seq = (12, 33, 67, 55, 78, 90, 34, 67, 88)
a = random.choice(seq)
print(a) # 输出:88
Perceber:
random.choice(seq)
Não equivalente arandom.sample(seq, 1)
, o primeiro retorna um elemento e o último retorna uma lista.
embaralhar (sequência)
Esta função leva um parâmetro - uma lista. Em seguida, embaralha os elementos da lista e retorna.
import random
a = [10, 20, 30, 40, 50]
random.shuffle(a)
print(a) # 输出:[30, 10, 20, 40, 50]
seed(a=Nenhuma)
Esta função pode ser usada quando a mesma sequência de números aleatórios precisa ser gerada várias vezes. Leva um parâmetro - o valor de semente. Esse valor inicializa o gerador de números pseudo-aleatórios. Sempre que a função for chamada com o mesmo valor de semente seed()
, ela produzirá exatamente a mesma sequência de números aleatórios, o que é útil para casos em que é necessário reproduzir resultados aleatórios.
import random
# seed value = 3
random.seed(3)
for i in range(3):
print(random.random(), end = ' ')
print('\n')
# seed value = 8
random.seed(8)
for i in range(3):
print(random.random(), end = ' ')
print('\n')
# seed value again = 3
random.seed(3)
for i in range(3):
print(random.random(), end = ' ')
print('\n')
Saída:
0,23796462709189137 0,5442292252959519 0,369955166548079250,2267058593810488 0,9622950358343828 0,12633089865085956
0,23796462709189137 0,5442292252959519 0,36995516654807925
Pode-se ver que para semente = 3, a mesma sequência é gerada todas as vezes.