Módulo 5 - Módulos e a biblioteca padrão
Matemática e sorte: math e random
11 min de leitura · por Cesar Gargiulo, revisado pela equipe ValorFinal e GuardiaSec · Atualizado em 01/07/2026
O que você vai aprender
- Usar o módulo math: sqrt, pi, ceil e floor.
- Gerar números aleatórios com randint e random.
- Escolher e embaralhar itens com choice e shuffle.
- Saber quando cada função de aleatoriedade é a certa.
Ouvir o resumo desta aula
Um recap de cerca de 2 minutos na voz do Valim, para ouvir no trânsito ou na academia.
Ler a transcrição do resumo
Resumo da aula: Matemática e sorte: math e random.
Os objetivos desta aula. Usar o módulo math: sqrt, pi, ceil e floor. Gerar números aleatórios com randint e random. Escolher e embaralhar itens com choice e shuffle. Saber quando cada função de aleatoriedade é a certa.
Veja o essencial, parte por parte.
O módulo math: contas prontas. math.sqrt(x) dá a raiz quadrada; math.pi é o valor de pi pronto.
O módulo random: sorteio e embaralhamento. random.shuffle(lista) embaralha a lista no próprio lugar e devolve None.
Juntando math e random. Na prática, esses dois módulos costumam trabalhar juntos.
Esse foi o resumo do essencial. Para se aprofundar, leia a aula completa e responda os exercícios.
O módulo math: contas prontas
O módulo math reúne as operações matemáticas que não vêm nos operadores básicos. Você já tem soma, subtração e potência com o próprio Python, mas raiz quadrada, o valor de pi, logaritmos e arredondamentos específicos moram no math. As quatro funções mais usadas no dia a dia são sqrt, para raiz quadrada, a constante pi, e o par ceil e floor, que arredondam sempre para cima e sempre para baixo, respectivamente. Diferente do round, que arredonda para o mais próximo, esses dois têm direção fixa.
import math
print(math.sqrt(144)) # 12.0
print(math.pi) # 3.141592653589793
# ceil sempre para cima, floor sempre para baixo
print(math.ceil(4.1)) # 5
print(math.floor(4.9)) # 4
# util de verdade: quantas caixas de 12 para 100 itens?
itens = 100
por_caixa = 12
caixas = math.ceil(itens / por_caixa)
print(f"Precisa de {caixas} caixas") # Precisa de 9 caixasmath.ceil é perfeito para arredondar quantidades para cima, como caixas ou páginas.
O exemplo das caixas mostra por que ceil aparece tanto em código real. Cem itens em caixas de doze dão oito caixas cheias e sobra, então você precisa de nove. Um round arredondaria para oito e deixaria itens de fora; o floor faria o mesmo. Sempre que a resposta precisa comportar tudo, o arredondamento é para cima, e ceil resolve. Guarde a dupla: ceil para cima, floor para baixo, sem depender do valor das casas decimais.
O módulo random: sorteio e embaralhamento
O módulo random traz o acaso controlado para os seus programas: sortear um número, escolher um item de uma lista, embaralhar uma sequência. As quatro funções que resolvem quase tudo são randint, choice, shuffle e random. A randint sorteia um inteiro dentro de um intervalo, incluindo as duas pontas, ótima para simular um dado. A choice pega um item aleatório de uma lista. A shuffle embaralha a lista no próprio lugar. E a random, sem argumentos, devolve um decimal entre zero e um.
import random
# um dado de 6 lados: inclui 1 e 6
print(random.randint(1, 6)) # ex.: 4
# escolher um item de uma lista
frutas = ["maca", "uva", "pera", "manga"]
print(random.choice(frutas)) # ex.: pera
# embaralhar no proprio lugar (nao devolve nada)
baralho = [1, 2, 3, 4, 5]
random.shuffle(baralho)
print(baralho) # ex.: [3, 1, 5, 2, 4]
# um decimal entre 0.0 e 1.0
print(random.random()) # ex.: 0.732...As quatro funções mais úteis do random, cada uma com um exemplo de saída.
Um detalhe importante de honestidade técnica: os números do random são pseudoaleatórios. Eles vêm de uma fórmula que imita o acaso muito bem para jogos, sorteios e simulações, mas são previsíveis para quem conhece a semente. Por isso, nunca use random para gerar senhas, tokens ou qualquer coisa de segurança. Para esses casos, o Python tem o módulo secrets, feito sob medida. Para o resto, um dado, um sorteio de brinde, embaralhar cartas, o random é exatamente a ferramenta certa.
Juntando math e random
Na prática, esses dois módulos costumam trabalhar juntos. Imagine simular vários lançamentos de dois dados e ver a média dos resultados. O random gera cada lançamento; um pouco de matemática resume tudo no final. O trecho abaixo lança dois dados mil vezes, soma cada par e calcula a média das somas. É uma simulação simples que já mostra como aleatoriedade e conta andam de mãos dadas.
import random
lancamentos = 1000
soma_total = 0
for _ in range(lancamentos):
dado1 = random.randint(1, 6)
dado2 = random.randint(1, 6)
soma_total += dado1 + dado2
media = soma_total / lancamentos
print(f"Media da soma de 2 dados: {media:.2f}")
# Media da soma de 2 dados: ~7.00 (o valor teorico e 7)Simular mil lançamentos de dois dados: a média da soma se aproxima de 7, o valor teórico.
Rode algumas vezes e repare que a média fica sempre pertinho de sete, o valor que a estatística prevê para a soma de dois dados. Aumente para dez mil lançamentos e ela chega ainda mais perto. Isso é uma simulação: em vez de calcular a probabilidade na teoria, você deixa o computador experimentar muitas vezes e observa o padrão emergir. É um dos usos mais divertidos do random, e você vai fazer algo parecido na prática do fim deste módulo.
Teste rápido
Qual função escolhe um item aleatório de uma lista já existente?
Perguntas frequentes
- Por que math.sqrt(9) devolve 3.0 e não 3?
- Porque as funções do math trabalham com ponto flutuante e devolvem um float, o tipo de número com casas decimais. Por isso o resultado sai como 3.0. Se você precisar de um inteiro, pode converter com int(math.sqrt(9)), lembrando que isso corta a parte decimal.
- Qual a diferença entre ceil, floor e round?
- O math.ceil sempre arredonda para cima e o math.floor sempre para baixo, não importa a casa decimal. Já o round arredonda para o inteiro mais próximo, então round(4.9) dá 5 e round(4.1) dá 4. Use ceil quando a resposta precisa comportar tudo, como número de caixas.
- O random.randint(1, 6) pode devolver 6?
- Pode. A randint inclui as duas pontas do intervalo, então randint(1, 6) sorteia qualquer inteiro de 1 a 6, os dois inclusive. Isso a torna perfeita para simular um dado. É diferente do range, que não inclui o número final.
- Por que meu shuffle guardou None em vez da lista?
- Porque random.shuffle embaralha a lista no próprio lugar e devolve None, não uma lista nova. Não escreva nova = random.shuffle(lista). Chame random.shuffle(lista) sozinho e depois use a própria lista, que já ficou embaralhada.
- Posso usar random para gerar senhas?
- Não é recomendado. Os números do random são pseudoaleatórios e previsíveis para quem conhece a semente, o que é inseguro. Para senhas, tokens e qualquer coisa de segurança, use o módulo secrets, feito para gerar valores imprevisíveis. Para jogos e sorteios comuns, o random serve bem.
- O que é uma semente (seed) do random?
- É um número inicial que determina a sequência de valores pseudoaleatórios. Com random.seed(42), por exemplo, você fixa a semente e obtém sempre a mesma sequência, útil para testes reproduzíveis. Sem definir a semente, o Python usa uma baseada no horário, e cada execução varia.
Fontes
Seu progresso fica salvo neste aparelho. Assinantes sincronizam entre os aparelhos.