Python random: Funções para gerar números aleatórios
O módulo Python random dispõe de uma série de recursos para a geração de números aleatórios em diferentes formatos (como de inteiros e de vírgula flutuante), para controlar a aleatoriedade das sequências geradas, para realizar distribuições aleatórias, para embaralhar sequências e também para fins criptográficos. Nosso artigo introdutório sobre Python random apresenta suas principais características, apresenta as funções mais usadas e lhe ensina a aplicá-las em códigos.
O que é o módulo Python random?
O módulo Python random é uma biblioteca integrada que fornece funcionalidades para a geração de números aleatórios e a execução de operações randômicas por aplicações. Ele também dispõe de funções capazes de criar números pseudoaleatórios de alta qualidade que podem ser utilizados nas mais diversas situações, como em simulações e testes, no desenvolvimento de jogos e na segurança criptográfica.
Uma das características mais importantes do módulo random de Python é capacidade que ele tem de se repetir de forma determinística e previsível. Desde que seja definido um valor inicial (valor semente ou seed), a geração randômica do módulo random pode ser reproduzida, o que é especialmente útil em testes, experimentos e simulações que exigem a geração repetida de dados aleatórios consistentes.
Lista de funções do módulo Python random
O módulo Python random oferece suporte a diferentes funções capazes de gerar e processar números aleatórios. Ainda, você também pode definir funções personalizadas para controlar ou modificar o comportamento da geração de números aleatórios. Compilamos, abaixo, uma tabela com as principais funções já estabelecidas de Random, assim como a utilidade de cada uma delas:
F unção | Explicação |
---|---|
seed(a=None, version=2)
|
Define o valor inicial (seed) para a geração de números aleatórios. |
getstate()
|
Retorna o estado atual da geração de números aleatórios como objeto. |
setstate(state)
|
Redefine o estado da geração de números aleatórios com base em um objeto de estado. |
getrandbits(k)
|
Retorna um número inteiro com k bits. |
randrange(start, stop, step)
|
Gera um número inteiro aleatório a partir de um intervalo especificado. |
randint(a, b)
|
Retorna um número inteiro aleatório dentro de um intervalo especificado. |
choice(seq)
|
Retorna um elemento aleatório de uma sequência especificada. |
choices(population, weights=None, *, cum_weights=None, k=1)
|
Gera uma lista com* k* elementos selecionados aleatoriamente dentre uma população; opcionalmente, é possível definir as probabilidades. |
sample(k, population)
|
Cria uma lista com k elementos selecionados aleatoriamente dentre a população, sem duplicatas. |
shuffle(x)
|
Mistura os elementos de uma lista de forma aleatória. |
random()
|
Retorna um número de vírgula flutuante aleatório dentro do intervalo de 0 a 1. |
uniform(a, b)
|
Retorna um número de vírgula flutuante aleatório dentro do intervalo especificado, incluindo os valores inicial e final. |
triangular(low, high, mode)
|
Gera um número de vírgula flutuante aleatório dentro de um intervalo de distribuição triangular. |
betavariate(alpha, beta)
|
Retorna um número de vírgula flutuante aleatório a partir de uma distribuição beta. |
expovariate(lambd)
|
Retorna um número de vírgula flutuante aleatório a partir de uma distribuição exponencial. |
gammavariate(alpha, beta)
|
Gera um número de vírgula flutuante aleatório a partir de uma distribuição gama. |
gauss(mu, sigma)
|
Retorna um número de vírgula flutuante aleatório a partir de uma distribuição de Gauss. |
lognormvariate(mu, sigma)
|
Gera um número de vírgula flutuante aleatório a partir de uma distribuição normal logarítmica. |
normalvariate(mu, sigma)
|
Retorna um número de vírgula flutuante aleatório a partir de uma distribuição normal. |
vonmisesvariate(mu, kappa)
|
Retorna um número de vírgula flutuante aleatório a partir de uma distribuição de von Mises. |
paretovariate(alpha)
|
Retorna um número de vírgula flutuante aleatório a partir de uma distribuição de Pareto. |
weibullvariate(alpha, beta)
|
Retorna um número de vírgula flutuante aleatório a partir de uma distribuição de Weibull. |
Python random para selecionar elementos aleatórios de uma lista
Se você precisa selecionar diferentes elementos de uma lista aleatoriamente, pode fazer uso da função choices(seq, k=n)
, do módulo random de Python. Na estrutura dessa função, n
faz menção ao número de elementos aleatórios desejados, como você pode perceber no exemplo abaixo:
import random
my_list = ['Apple', 'Banana', 'Orange', 'Strawberry', 'Cherry']
# Randomly selecting an element from the list
random_elements = random.choices(my_list, k=3)
print("Randomly selected elements:", random_element)
pythonNesse código, fizemos uso da função choices()
para selecionar randomicamente três elementos da lista que chamamos de my_list
. Assim sendo, os resultados serão retornados no formato de uma lista que conterá apenas três elementos aleatórios dos cinco previamente listados.
Rápido e escalável, confie na hospedagem da IONOS, que inclui domínio grátis no primeiro ano e endereço de e-mail!
- Domínio
- SSL Wildcard
- Suporte 24 horas
Python random para embaralhar uma lista
A função shuffle()
de random consegue reordenar elementos de listas Python de forma aleatória. Observe o código abaixo para entender melhor:
import random
# A list of elements
my_list = ['Apple', 'Banana', 'Orange', 'Strawberry', 'Cherry']
# Shuffle the elements in the list
random.shuffle(my_list)
print("Shuffled list:", my_list) # Example Output: Shuffled list: ['Strawberry', 'Banana', 'Apple', 'Cherry', 'Orange']
pythonPerceba que, como mostra o exemplo, a função shuffle()
não gera uma lista nova, mas sim altera a lista já existente. Ou seja, ao aplicar a função shuffle()
do módulo random de Python, você terá sua lista original embaralhada aleatoriamente, o que significará que seus elementos mudarão de lugar.
Python random para definir um valor inicial
Se você quer utilizar a função random.seed()
do módulo Python random para definir um valor inicial (seed) específico e garantir a reprodutibilidade dos resultados, deve iniciar a geração de números com base em um valor semente. Dessa forma, se você definir o mesmo valor semente em outro momento, o mesmo conjunto de números aleatórios será gerado pelo seu código. O exemplo ilustra a situação:
import random
# Setting the seed value to 42
random.seed(42)
# Generating random numbers
print(random.random()) # Example output: 0.6394267984578837
print(random.random()) # Example output: 0.025010755222666936
# Resetting the seed value to 42
random.seed(42)
# Generating random numbers again
print(random.random()) # Example output: 0.6394267984578837 (identical to the previous value)
print(random.random()) # Example output: 0.025010755222666936 (identical to the previous value)
pythonApós a definição de um valor semente qualquer, os números aleatórios solicitados foram gerados e exibidos. Como esse mesmo valor semente foi novamente definido pelo módulo random somado à função seed, os mesmos números aleatórios foram igualmente gerados, uma segunda vez. No nosso exemplo, por duas vezes random.seed
definiu o valor semente como 42. Assim sendo, os mesmos números aleatórios tiveram de ser gerados.