O módulo Python random dispõe de uma série de recursos para a geração de números ale­a­tó­rios em di­fe­ren­tes formatos (como de inteiros e de vírgula flutuante), para controlar a ale­a­to­ri­e­dade das sequên­cias geradas, para realizar dis­tri­bui­ções ale­a­tó­rias, para em­ba­ra­lhar sequên­cias e também para fins crip­to­grá­fi­cos. Nosso artigo in­tro­du­tó­rio sobre Python random apresenta suas prin­ci­pais ca­rac­te­rís­ti­cas, 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 bi­bli­o­teca integrada que fornece fun­ci­o­na­li­da­des para a geração de números ale­a­tó­rios e a execução de operações randô­mi­cas por apli­ca­ções. Ele também dispõe de funções capazes de criar números pseu­do­a­le­a­tó­rios de alta qualidade que podem ser uti­li­za­dos nas mais diversas situações, como em si­mu­la­ções e testes, no de­sen­vol­vi­mento de jogos e na segurança crip­to­grá­fica.

Uma das ca­rac­te­rís­ti­cas mais im­por­tan­tes do módulo random de Python é ca­pa­ci­dade que ele tem de se repetir de forma de­ter­mi­nís­tica e pre­vi­sí­vel. Desde que seja definido um valor inicial (valor semente ou seed), a geração randômica do módulo random pode ser re­pro­du­zida, o que é es­pe­ci­al­mente útil em testes, ex­pe­ri­men­tos e si­mu­la­ções que exigem a geração repetida de dados ale­a­tó­rios con­sis­ten­tes.

Lista de funções do módulo Python random

O módulo Python random oferece suporte a di­fe­ren­tes funções capazes de gerar e processar números ale­a­tó­rios. Ainda, você também pode definir funções per­so­na­li­za­das para controlar ou modificar o com­por­ta­mento da geração de números ale­a­tó­rios. Com­pi­la­mos, abaixo, uma tabela com as prin­ci­pais funções já es­ta­be­le­ci­das de Random, assim como a utilidade de cada uma delas:

F unção Ex­pli­ca­Ã§Ã£o
seed(a=None, version=2) Define o valor inicial (seed) para a geração de números ale­a­tó­rios.
getstate() Retorna o estado atual da geração de números ale­a­tó­rios como objeto.
setstate(state) Redefine o estado da geração de números ale­a­tó­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 es­pe­ci­fi­cado.
randint(a, b) Retorna um número inteiro aleatório dentro de um intervalo es­pe­ci­fi­cado.
choice(seq) Retorna um elemento aleatório de uma sequência es­pe­ci­fi­cada.
choices(population, weights=None, *, cum_weights=None, k=1) Gera uma lista com* k* elementos se­le­ci­o­na­dos ale­a­to­ri­a­mente dentre uma população; op­ci­o­nal­mente, é possível definir as pro­ba­bi­li­da­des.
sample(k, population) Cria uma lista com k elementos se­le­ci­o­na­dos ale­a­to­ri­a­mente dentre a população, sem du­pli­ca­tas.
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 es­pe­ci­fi­cado, 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 dis­tri­bui­Ã§Ã£o tri­an­gu­lar.
betavariate(alpha, beta) Retorna um número de vírgula flutuante aleatório a partir de uma dis­tri­bui­Ã§Ã£o beta.
expovariate(lambd) Retorna um número de vírgula flutuante aleatório a partir de uma dis­tri­bui­Ã§Ã£o ex­po­nen­cial.
gammavariate(alpha, beta) Gera um número de vírgula flutuante aleatório a partir de uma dis­tri­bui­Ã§Ã£o gama.
gauss(mu, sigma) Retorna um número de vírgula flutuante aleatório a partir de uma dis­tri­bui­Ã§Ã£o de Gauss.
lognormvariate(mu, sigma) Gera um número de vírgula flutuante aleatório a partir de uma dis­tri­bui­Ã§Ã£o normal lo­ga­rít­mica.
normalvariate(mu, sigma) Retorna um número de vírgula flutuante aleatório a partir de uma dis­tri­bui­Ã§Ã£o normal.
vonmisesvariate(mu, kappa) Retorna um número de vírgula flutuante aleatório a partir de uma dis­tri­bui­Ã§Ã£o de von Mises.
paretovariate(alpha) Retorna um número de vírgula flutuante aleatório a partir de uma dis­tri­bui­Ã§Ã£o de Pareto.
weibullvariate(alpha, beta) Retorna um número de vírgula flutuante aleatório a partir de uma dis­tri­bui­Ã§Ã£o de Weibull.

Python random para se­le­ci­o­nar elementos ale­a­tó­rios de uma lista

Se você precisa se­le­ci­o­nar di­fe­ren­tes elementos de uma lista ale­a­to­ri­a­mente, 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 ale­a­tó­rios desejados, como você pode perceber no exemplo abaixo:

import random
# A list of elements
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)
python

Nesse código, fizemos uso da função choices() para se­le­ci­o­nar ran­do­mi­ca­mente três elementos da lista que chamamos de my_list. Assim sendo, os re­sul­ta­dos serão re­tor­na­dos no formato de uma lista que conterá apenas três elementos ale­a­tó­rios dos cinco pre­vi­a­mente listados.

Hos­pe­da­gem que se adapta às suas ambições
  • Fique online com 99,99% de tempo de atividade e segurança robusta
  • Aumente o de­sem­pe­nho com um clique à medida que o tráfego cresce
  • Inclui domínio gratuito, SSL, e-mail e suporte 24 horas por dia, 7 dias por semana

Python random para em­ba­ra­lhar 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']
python

Perceba 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 em­ba­ra­lhada ale­a­to­ri­a­mente, o que sig­ni­fi­cará 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) es­pe­cí­fico e garantir a re­pro­du­ti­bi­li­dade dos re­sul­ta­dos, 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 ale­a­tó­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)
python

Após a definição de um valor semente qualquer, os números ale­a­tó­rios so­li­ci­ta­dos foram gerados e exibidos. Como esse mesmo valor semente foi novamente definido pelo módulo random somado à função seed, os mesmos números ale­a­tó­rios foram igual­mente gerados, uma segunda vez. No nosso exemplo, por duas vezes random.seed definiu o valor semente como 42. Assim sendo, os mesmos números ale­a­tó­rios tiveram de ser gerados.

Ir para o menu principal