# Módulo Python random: resumo das funções

O módulo random do Python possui diversas funções para **gerar números aleatórios** em diferentes formatos, desde números inteiros até números de vírgula flutuante, ou selecionar elementos de listas.

## O que é o módulo Python random?

O módulo Python random é uma biblioteca integrada com a qual é possível gerar números aleatórios e realizar operações aleatórias nos programas. Dispõe de várias funções para **gerar números pseudoaleatórios** que podem ser utilizados em muitos campos, desde a simulação até ao desenvolvimento de jogos e tarefas criptográficas.

Uma das suas características importantes é a capacidade de reprodutibilidade. Ao especificar um valor inicial ou **semente**, os resultados da geração de números aleatórios podem ser replicados, o que é útil para realizar testes, experiências e simulações que requerem dados aleatórios consistentes.

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

O módulo random do Python contém diferentes métodos para **gerar e processar números aleatórios**. A tabela a seguir resume suas funções e características:

<table>
  <thead>
    <tr>
      <th>Nome da função</th>
      <th>Explicação</th>
    </tr>
  </thead>
  <tbody>
    <tr>
      <td>`seed(a=None, version=2)`</td>
      <td>Define o valor inicial (semente) para o gerador de números aleatórios.</td>
    </tr>
    <tr>
      <td>`getstate()`</td>
      <td>Retorna o estado atual do gerador de números aleatórios como objeto.</td>
    </tr>
    <tr>
      <td>`setstate(state)`</td>
      <td>Redefine o estado do gerador de números aleatórios através de um objeto de estado.</td>
    </tr>
    <tr>
      <td>`getrandbits(k)`</td>
      <td>Retorna um número inteiro com k bits.</td>
    </tr>
    <tr>
      <td>`randrange(start, stop, step)`</td>
      <td>Cria um número inteiro aleatório dentro do intervalo especificado.</td>
    </tr>
    <tr>
      <td>`randint(a, b)`</td>
      <td>Retorna um número inteiro aleatório dentro do intervalo especificado.</td>
    </tr>
    <tr>
      <td>`choice(seq)`</td>
      <td>Retorna um elemento aleatório da sequência definida.</td>
    </tr>
    <tr>
      <td>`choices(population, weights=None, *, cum_weights=None, k=1)`</td>
      <td>Cria uma lista com k elementos selecionados aleatoriamente da população; as probabilidades podem ser especificadas opcionalmente.</td>
    </tr>
    <tr>
      <td>`sample(k, population)`</td>
      <td>Cria uma lista com k elementos selecionados aleatoriamente da população; sem duplicados.</td>
    </tr>
    <tr>
      <td>`shuffle(x)`</td>
      <td>Mistura os elementos de uma lista numa ordem aleatória.</td>
    </tr>
    <tr>
      <td>`random()`</td>
      <td>Retorne um número flutuante aleatório no intervalo de 0 a 1.</td>
    </tr>
    <tr>
      <td>`uniform(a, b)`</td>
      <td>Retorna um número de ponto flutuante aleatório no intervalo especificado, incluindo os valores limite.</td>
    </tr>
    <tr>
      <td>`triangular(low, high, mode)`</td>
      <td>Cria um número aleatório de ponto flutuante na distribuição triangular.</td>
    </tr>
    <tr>
      <td>`betavariate(alpha, beta)`</td>
      <td>Retorna um número flutuante aleatório de uma distribuição beta.</td>
    </tr>
    <tr>
      <td>`expovariate(lambd)`</td>
      <td>Retorna um número flutuante aleatório de uma distribuição exponencial.</td>
    </tr>
    <tr>
      <td>`gammavariate(alpha, beta)`</td>
      <td>Cria um número flutuante aleatório de uma distribuição gama.</td>
    </tr>
    <tr>
      <td>`gauss(mu, sigma)`</td>
      <td>Retorna um número flutuante aleatório de uma distribuição gaussiana.</td>
    </tr>
    <tr>
      <td>`lognormvariate(mu, sigma)`</td>
      <td>Cria um número flutuante aleatório de uma distribuição logarítmica normal.</td>
    </tr>
    <tr>
      <td>`normalvariate(mu, sigma)`</td>
      <td>Retorna um número flutuante aleatório de uma distribuição normal.</td>
    </tr>
    <tr>
      <td>`vonmisesvariate(mu, kappa)`</td>
      <td>Retorna um número flutuante aleatório de uma distribuição de Von Mises.</td>
    </tr>
    <tr>
      <td>`paretovariate(alpha)`</td>
      <td>Retorna um número flutuante aleatório de uma distribuição de Pareto.</td>
    </tr>
    <tr>
      <td>`weibullvariate(alpha, beta)`</td>
      <td>Retorna um número flutuante aleatório de uma distribuição de Weibull.</td>
    </tr>
  </tbody>
</table>

## Selecionar elementos aleatórios de uma lista

Para selecionar vários elementos aleatórios de uma lista, pode utilizar a função `choices(seq, k=n)` do módulo aleatório do Python, em que `n` é o número de elementos aleatórios desejados.

```python
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)
```

Neste exemplo, a função `choices()` é utilizada para selecionar três elementos aleatórios da lista `my_list`. Os resultados são devolvidos como uma lista de três elementos aleatórios.

## Misturar uma lista

A função `shuffle()` ordena os elementos das listas Python numa ordem aleatória.

```python
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']
```

Tenha em atenção que `shuffle()` altera a lista e não devolve uma nova. Após utilizar esta função, a lista original ficará numa ordem aleatória.

## Estabelecer uma semente

Se utilizar `random.seed()` módulo random do Python para **definir um valor de semente específico**, o gerador de números aleatórios começará a gerar números aleatórios com base nessa semente. Ou seja, se definir o mesmo valor de semente posteriormente, o mesmo conjunto de números aleatórios será gerado na aplicação.

```python
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)
```

Depois de definir o valor inicial ou semente, são gerados e emitidos números aleatórios. Se o valor da semente for redefinido para o **mesmo valor**, os mesmos números aleatórios serão gerados novamente. No código acima, a semente tem o valor 42, portanto, os números aleatórios podem ser reproduzidos sempre que o valor da semente permanecer o mesmo.


This is a markdown version of: [https://www.ionos.com/pt-pt/digitalguide/paginas-web/desenvolvimento-web/python-aleatorio/](https://www.ionos.com/pt-pt/digitalguide/paginas-web/desenvolvimento-web/python-aleatorio/) for AI/LLM consumption.