1
resposta

Mega Sena - Lista de 6 números sem repetir

Olá,

Faz alguns dias que estou quebrando a cabeça com um trabalho que precisa gerar 6 números aleatórios e então comparar com 6 números escolhidos. Caso o usuario erre, será sorteado mais 6 novos números em loop até que esteja correto, lembrando que a cada erro deverá ser somado mais 1 na quantidade de tentativas, segue o meu código:

import random

sorteados = []
escolhidos = []

numeros1 = 1
numeros2 = 1
tentativas = 1
while numeros1 <= 6:
    numeroEscolhido = int(input("Insira um número de 1 a 60: "))
    escolhidos.append(numeroEscolhido)
    escolhidos.sort()
    numeros1 = numeros1 + 1

while sorteados != escolhidos:
    print(sorteados)
    sorteados.clear()
    print("Foram necessário",tentativas,"tentativas")
    tentativas = tentativas + 1
    numeros2 = 1
    while numeros2 <= 6:
        numeroSorteado = random.randrange(1,60)
        sorteados.append(numeroSorteado)
        sorteados.sort()
        numeros2 = numeros2 + 1
if sorteados == escolhidos:
    print("Você acertou! Foram necessárias",tentativas,"tentativas")

Como faço para saber se está certo? A quantidade de tentativas pode demorar semanas até estar certo e não tem problema, a questão pede dessa forma mesmo

1 resposta

Olá Guilherme, tudo bem com você?

Meus parabéns pela implementação do código, fico feliz que tenha compartilhado com a comunidade do fórum Alura.

Realizei o teste do código apresentado, a lógica inicial está funcionando corretamente, buscando os valores declarados inicialmente em uma lista gerada aleatoriamente a cada tentativa. Como ocorre a geração de números aleatórios repetidos, deixo abaixo uma proposta para que não sejam gerados números repetidos.

Para que os valores gerados e salvos sejam sem repetição numérica, podemos fazer o uso do conjunto (set()), o conjunto por padrão não salva objetos repetidos. Usando o conjunto, set, temos que fazer o uso do método random.randint() para gerar nossos números aleatórios.

Para que o código funcione, o laço de repetição while numeros2 <= 6: foi substituído por while len(sorteados) < 6: que irá verificar a quantidade de números inseridos no conjunto, caso seja menor que 6, o laço continua adicionando valores aleatórios.

Para testarmos o código, se está apresentando uma lógica funcional e resultados como esperados, podemos modificar o intervalo de números gerados, assim a probabilidade de que a sequência inicial seja gerada será maior.

Assim, realizei o teste inicial gerando números aleatórios de 1 a 6, e informei os números de 1 a 6 durante a execução do código. Para que eu pudesse ter uma certeza maior de que os valores das variáveis sorteados e escolhidos fossem iguais, adicionou uma impressão desses valores no momento em que a sequência fosse encontrada, ficando da seguinte forma o estrutura condicional if.

if sorteados == escolhidos:
    print("Esses são os sorteados: ", sorteados)
    print("Esses são escolhidos: ", escolhidos)
    print("Você acertou! Foram necessárias", tentativas, "tentativas")

Executando o código gerando um intervalo de 1 a 6 e informando valores de 1 a 6 obtemos o seguinte resultado.

Esses são os sorteados:  {1, 2, 3, 4, 5, 6}
Esses são escolhidos:  {1, 2, 3, 4, 5, 6}
Você acertou! Foram necessárias 1 tentativas

Note que o resultado foi conforme o esperado, agora podemos testar gerando valores de 1 a 60, obtendo o seguinte resultado.

Esses são os sorteados:  {40, 10, 50, 20, 60, 30}
Esses são escolhidos:  {40, 10, 50, 20, 60, 30}
Você acertou! Foram necessárias 131481645 tentativas

Concluímos que nessa loteria jogando os valores 10, 20, 30, 40, 50, 60, eu precisaria jogar 131.481.645 vezes para conseguir o prêmio. O código acima ficou em execução por 2h e 43 minutos e 18 segundos.

Código completo para comparação


import random

sorteados = set()
escolhidos = set()

numeros1 = 1
tentativas = 0
while numeros1 <= 6:
    numeroEscolhido = int(input("Insira um número de 1 a 60: "))
    escolhidos.add(numeroEscolhido)
    numeros1 = numeros1 + 1

while sorteados != escolhidos:
    print(sorteados)
    sorteados.clear()
    print("Foram necessário", tentativas, "tentativas")
    tentativas = tentativas + 1
    while len(sorteados) < 6:
        numeroSorteado = random.randint(1, 60)
        sorteados.add(numeroSorteado)
if sorteados == escolhidos:
    print("Esses são os sorteados: ", sorteados)
    print("Esses são escolhidos: ", escolhidos)
    print("Você acertou! Foram necessárias", tentativas, "tentativas")

Peço que teste o proposto acima e verifique se atente às suas necessidades.

Lembre-se que pode contar sempre com o fórum Alura, seja para compartilhar o seu desenvolvimento ou para tirar suas dúvidas.

Fico à disposição.

Abraços e bons estudos.

Caso este post tenha lhe ajudado, por favor, marcar como solucionado ✓. Bons Estudos!

Quer mergulhar em tecnologia e aprendizagem?

Receba a newsletter que o nosso CEO escreve pessoalmente, com insights do mercado de trabalho, ciência e desenvolvimento de software