import, math e random: ferramentas prontas da biblioteca padrão
Calcular uma raiz quadrada ou sortear um número aleatório não exige escrever essa lógica do zero. Python já vem com uma biblioteca padrão enorme, pronta para importar.
Estudar esta lição interativa →Calcular a raiz quadrada de um número, ou sortear um valor aleatório para um joguinho, não exige escrever essa lógica matemática do zero: o Python já vem, de fábrica, com uma biblioteca padrão enorme, cheia de módulos prontos para tarefas comuns. Usar um desses módulos é só uma questão de import.
import math
print(math.sqrt(16))
print(math.pi)
print(math.ceil(4.2))
print(math.floor(4.8))import math dá acesso a math.sqrt, math.pi e outras funções e constantes.
import math traz o módulo math inteiro para o seu programa; suas funções e constantes são acessadas com um ponto, math.sqrt(16), math.pi. math.ceil(x) arredonda para cima até o próximo inteiro; math.floor(x) arredonda para baixo. São operações que você poderia escrever à mão, mas que já vêm prontas, testadas e otimizadas.
Pense na biblioteca padrão como uma caixa de ferramentas que já vem junto com a casa nova: você não precisa comprar (nem fabricar) um martelo do zero toda vez que precisa pendurar um quadro, ele já está lá, guardado, pronto para pegar quando for útil.
O módulo random gera números e escolhas aleatórias: random.randint(a, b) sorteia um inteiro entre a e b (os dois incluídos); random.choice(lista) sorteia um item qualquer de uma lista; random.shuffle(lista) embaralha uma lista no próprio lugar (sem devolver uma nova, ela muda a lista original).
import random
print(random.randint(1, 6))
print(random.choice(["pedra", "papel", "tesoura"]))
numeros = [1, 2, 3, 4, 5]
random.shuffle(numeros)
print(numeros)Cada execução pode sortear um valor diferente.
Chamar random.seed(algum_numero) antes de usar o módulo random faz os "sorteios" seguintes sempre saírem na mesma ordem, o que é essencial para escrever testes automáticos que dependam de aleatoriedade: sem uma seed fixa, o mesmo teste poderia passar numa execução e falhar em outra, por puro acaso.
Depois de import math, escrever só sqrt(16), sem o prefixo math., gera NameError: name 'sqrt' is not defined. Diferente de outras linguagens, o Python não "derrama" automaticamente as funções de um módulo importado no espaço geral do programa; elas continuam acessíveis só através do nome do módulo, o que evita que dois módulos diferentes com funções de mesmo nome entrem em conflito.
O import math não é a única forma de importar. Com from math import sqrt, pi você traz só os nomes que quer e passa a usá-los sem o prefixo: sqrt(25). E com import random as sorteio o módulo ganha um apelido, útil quando o nome é longo ou quando dois módulos teriam nomes iguais. Cada forma resolve um gosto de leitura, com um cuidado: from módulo import * traz tudo e dificulta saber de onde cada nome veio, então evite.
import math # traz o módulo inteiro: use math.sqrt(...)
from math import sqrt, pi # traz só estes nomes: use sqrt(...) direto
import random as sorteio # apelido (as): use sorteio.randint(...)
print(math.sqrt(25))
print(sqrt(25))
print(round(pi, 2))
print(sorteio.randint(1, 1)) # sorteia entre 1 e 1, então sempre sai 1As três formas de importar, rodando juntas.
Qualquer arquivo .py seu vira um módulo: se existe um util.py ao lado do seu programa, import util traz o que ele define. Para que um arquivo possa ser importado sem executar tudo o que há nele, se usa o bloco if __name__ == "__main__":, que só roda quando o arquivo é executado diretamente. Aqui, o código que você roda é sempre o programa principal: __name__ vale "__main__" e o bloco executa. O que o ambiente de prática não mostra é o outro lado, importar um arquivo separado (não há arquivos aqui); no seu computador, ao fazer import util, o bloco de dentro do util.py não roda.
import math
print(math.ceil(4.2))
print(math.floor(4.8))Use math.ceil e math.floor e imprima os resultados.