Enviar um café pro programador

Como Gerar Números Aleatórios em Python - A Biblioteca random

Neste tutorial, vamos aprender como gerar números aleatórios usando o módulo random da biblioteca padrão do Python.

Tutorial anterior: Como criar, importar e usar Módulos
Veja também: Como entrar no mercado de trabalho Python



Números Aleatórios - Por que usar ?

A utilidade de se gerar números aleatórios, são enormes.

Um exemplo bem claro e muito utilizado, são em jogos.
Rolar os dados, escolher inimigos e personagens aleatoriamente, localização nos mapas, alguns games ficam 'sorteando' coisas (skins, gemas, poder, equipamentos etc), tudo isso através de números aleatórios.

Já perdeu a senha ou fez algum cadastro que necessitava receber um código numérico ou alfanumérico (tipo, 23&6342h) em seu e-mail ou via SMS? Pois é, aquele código é gerado aleatoriamente.

Muitas vezes, para fazer simulações, principalmente científicas e de outros cunhos acadêmicos, é necessário usar uma enormidade de números aleatórios.

Se já teve uma cadeira de Probabilidade e Estatística na faculdade, sabe que se usa bastante números aleatórios.

São um dos conceitos mais importantes no mundo da computação, e vamos aprender agora a usar a biblioteca random (random module) em Python.

Gerar Número Inteiro Aleatório: A Função randint

Primeiro, vamos aprender como gerar um número, aleatoriamente, que seja um inteiro.




Para isso, vamos usar a função randint, da biblioteca padrão do Python, a random. Ou sej, bem no início, devemos importar esse módulo:
import random

Agora, vamos usar a randint para gerar um número.
Essa função tem dois parâmetros, vamos chamar de inicio e fim:
random.randint(inicio, fim)

Essa função retorna um número inteiro de 'inicio' até 'fim' (inclusive eles).
Por exemplo:
  • randint(1,10): pode gerar qualquer número do 1 até o 10
  • randint(1,1000): pode resultar qualquer número 1,2, 3, ..., 100

Exemplo de uso da função randint()

Crie um programa em Python que simula o resultado de um dado, ou seja, gera números aleatórios de 1 até 6, quantas vezes o usuário desejar.

Como explicado, a primeira coisa é importar a biblioteca random, padrão do Python. Depois, simplesmente usar a função randint com 1 e 6 como argumentos, veja como fica:

import random

continuar=1
while continuar:
    print("Número aleatório gerado:", random.randint(1,6))
    continuar=int(input("Gerar novamente?\n1.Sim\n0.Não\n")


Definindo Melhor o Intervalo: randrange()

A função randrange é bem similar a função range (leia novamente esse tutorial para relembrar), exatamente a mesma maneira de se usar os parâmetros, a diferença que ela vai retornar apenas um valor.



  • Um argumento:
random.randrange(x) - vai gerar um número aleatório de 0 até x-1
Por exemplo:
random.randrange(5) - Pode retornar:0, 1, 2, 3 ou 4

  • Dois argumentos:
random.randrange(x,y) - vai gerar um número de x até y-1
Por exemplo:
random.randrange(1,5) - Pode sair:1, 2, 3 ou 4

  • Três argumentos:
 random.randrange(x,y,z) - Pode gerar de x até y-1, mas ao invés de 1 em 1, ela 'pula' de z em z, ou seja, z é o salto.

Por exemplo:
random.randrange(0,10,2) - Vai gerar uma dos seguintes números: 0, 2, 4, 6 ou 8 (ou seja, todos os pares de 0 até 8).

Para gerar todos os números múltiplos de 3 menores que 100, fazemos:
random.randrange(0, 101, 3) : 3, 6, 9, ..., 99

Gerar Número Aleatório Decimal: random()

Nos exemplos anteriores, as funções geram e recebem apenas números inteiros, ou seja, não servem para se trabalhar com números decimais.

Mas, e se a gente quiser um número quebrado aleatório?
Aí usamos a função random(), ela não recebe nenhum argumento.

Usou  ela, então te retorna decimal de 0.0 até 1.0
Basta fazer: random.random() e terá seu número quebrado aleatório.

Definir Aleatório Flutuante: função uniform()

Existe ainda mais uma função parar gerar valores flutuantes de maneira aleatória, que é através da função uniform().

Esta função recebe dois argumentos, um valor de início e outro final, podem ser valores float e te retorna um float aleatório.

Por exemplo, vamos supor que você é professor, tem que entregar a nota de 200 alunos e está totalmente sem saco.

Então você decide que vai dar notas aleatórias, de 5.0 até 10.0
Basta usar a função uniform:
random.uniform(5.0 , 10.0)

Pronto, ela vai te retornar uma nota rapidinho :D
Agora é curtir suas férias.

Caso tenha medo que algum aluno reclame, é só dizer 'olha, posso até recorrigir sua prova, mas se eu encontrar mais erros, eu abaixo sua nota).

Exercício Proposto

Crie um script em Python que gere 6 números aleatórios para a Mega-Sena (neste jogo, você pode escolher dezenas de 1 até 60). Não pode repetir dezena.

Deixe no comentário sua solução.

16 comentários:

  1. import random

    # Retorna a combinação completa de 6 valores, aleatórios e diferentes entre si.
    def combinacao():
    d1 = random.randrange(1, 56)
    d2 = random.randrange(d1 + 1, 57)
    d3 = random.randrange(d2 + 1, 58)
    d4 = random.randrange(d3 + 1, 59)
    d5 = random.randrange(d4 + 1, 60)
    d6 = random.randrange(d5 + 1, 61)
    return d1, d2, d3, d4, d5, d6

    while(True):
    print("\nGerando uma combinação para a Mega Sena...\n")

    print(" Combinação gerada: ", combinacao() )

    if(input("\nDigite 0 para continuar: ") != "0"):
    break

    ResponderExcluir
  2. def megasena():

    n1 = random.sample(range(1,61),6)
    return n1

    megasena()
    print('jogo: ',megasena())

    ResponderExcluir
  3. Eu nao entendi a pergunta, fiquei chateado

    ResponderExcluir
  4. import random

    print("Numeros aleatorios da MEGA.\n")

    for i in range(1,7):
    print("numero: ",random.randint(1,60))

    ResponderExcluir
  5. impor random

    print("Numeros aleatorios da MEGA.\n")

    continuar=1
    while continuar:
    for i in range(1,7):
    print("numero: ",random.randint(1,60))
    continuar=int(input("Novo jogo? 1-SIM, 2-NAO \n"))

    ResponderExcluir
  6. # -*- coding: cp1252 -*-
    from random import randint
    # CRIANDO UM JOGO PARA A MEGA-SENA

    sorteada = 0
    dezena = randint(1, 60)
    for i in range(1, 7) :
    sorteada = randint(1, 60)
    if sorteada != dezena :
    dezena = sorteada
    print("DEZENA ", i, ": ", dezena)

    ResponderExcluir
  7. Não consegui resolver o desafio, então agradeço as resoluções dos (as) colegas, foram ótimas. Espero ter um pensamento assim para resolver problemas de programação futuros

    ResponderExcluir
  8. esqueceram de falar do SAMPLE. Esta função gerar valores aleatória não repetitivos. Esta função recebe dois argumentos, início e fim. e excelente para quem quer sequencia de números não repetidos.

    Exercício Proposto
    Crie um script em Python que gere 6 números aleatórios para a Mega-Sena (neste jogo, você pode escolher dezenas de 1 até 60). Não pode repetir dezena.

    from random import sample
    jogos = int(input('Digite o número jogos quer fazer? '))
    for n in range(jogos):
    print(f'\nJOGO{n+1} - ',end='')
    for jogo in sorted(sample(range(1,61),6)):
    print(jogo,end=' ' )

    Digite o número jogos quer fazer? 5

    JOGO1 - 4 6 16 18 45 48
    JOGO2 - 15 41 48 55 59 60
    JOGO3 - 2 25 26 28 43 53
    JOGO4 - 1 7 13 28 33 47
    JOGO5 - 10 30 34 39 51 52


    ResponderExcluir
  9. from random import randint
    from time import sleep
    lista = list()
    jogos = list()
    print('_' * 30)
    print(' JOGA NA MEGA SENA ')
    print('_' * 30)
    quant = int(input('Quantos jogos você quer sorteie? '))
    tot = 1
    while tot <= quant:
    cont = 0
    while true:
    num = randint(1, 60)
    if num not in lista:
    lista.append(num)
    cont += 1
    if cont >= 6:
    break
    lista.sort()
    jogos.append(lista[:])
    lista.clear()
    tot += 1
    print('_' * 3, f' SORTEANDO {quant} JOGOS ', '-=' * 3)
    for i, l in enumerate(jogos):
    print(f'jogo {i+1}: {l}')
    sleep(1)
    print('-=' * 5, '< BOA SORTE! >', '-=' * 5)

    ResponderExcluir
  10. from random import randint
    from time import sleep
    lista = list()
    jogos = list()
    print('_' * 30)
    print(' JOGA NA MEGA SENA ')
    print('_' * 30)
    quant = int(input('Quantos jogos você quer sorteie? '))
    tot = 1
    while tot <= quant:
    cont = 0
    while true:
    num = randint(1, 60)
    if num not in lista:
    lista.append(num)
    cont += 1
    if cont >= 6:
    break
    lista.sort()
    jogos.append(lista[:])
    lista.clear()
    tot += 1
    print('_' * 3, f' SORTEANDO {quant} JOGOS ', '-=' * 3)
    for i, l in enumerate(jogos):
    print(f'jogo {i+1}: {l}')
    sleep(1)
    print('-=' * 5, '< BOA SORTE! >', '-=' * 5)

    ResponderExcluir
  11. import random
    d1 = random.randrange(1, 10)
    d2 = random.randrange(11, 20)
    d3 = random.randrange(21, 30)
    d4 = random.randrange(31, 40)
    d5 = random.randrange(41, 50)
    d6 = random.randrange(51, 60)
    print(d1, d2, d3, d4, d5, d6)

    ResponderExcluir
  12. import random

    def sorteio():
    d1 = random.randint(1,60)
    d2 = random.randint(1,60)
    while d2 == d1:
    d2 = random.randint(1,60)
    d3 = random.randint(1,60)
    while (d3 == d2) or (d3 == d1):
    d3 = random.randint(1,60)
    d4 = random.randint(1,60)
    while (d4 == d3) or (d4 == d2) or (d4 == d1):
    d4 = random.randint(1,60)
    d5 = random.randint(1,60)
    while (d5 == d4) or (d5 == d3) or (d5 == d2) or (d5 == d1):
    d5 = random.randint(1,60)
    d6 = random.randint(1,60)
    while (d6 == d5) or (d6 == d4) or (d6 == d3) or (d6 == d2) or (d6 == d1):
    d6 = random.randint(1,60)
    return d1,d2,d3,d4,d5,d6

    while True:
    print(sorteio())
    c = input("Digite 0 para parar ou qualquer outro valor para continuar:")
    if c == "0":
    break
    else:
    continue

    ResponderExcluir