Ir para conteúdo
Fórum Script Brasil
  • 0

Dúvida sobre sorteio de números aleatórios


YagoBarrozo

Pergunta

Sou bem amador em python (comecei a estudar há mais ou menos uma semana), então desculpem se a dúvida for muito idiota.
Escrevi o código para sortear 8 números aleatórios, em ordem crescente, sem reposição, de um conjunto que vai de 1 a 25.

>>> import random
>>> sorted (random.sample (range (1,25), 8))

No entanto, eu queria adicionar uma função para que ele não sorteie determinadas sequências de números. Por exemplo, não quero que ele sorteie as seguintes sequências:

1, 2, 3, 5, 6, 9, 10, 12

4, 5, 6, 8, 9, 12, 13, 14

1, 4, 5, 6, 7, 8, 11, 14

1, 3, 4, 5, 6, 8, 9, 23

3, 5, 6, 7, 10, 12, 13, 25

5, 6, 7, 8, 11, 12, 13, 14

3, 4, 5, 6, 9, 10, 11, 14

Como eu escreveria um código para realizar essa função?

Link para o comentário
Compartilhar em outros sites

8 respostass a esta questão

Posts Recomendados

  • 0

Você pode criar uma lista contendo as listas que não devem ser sorteadas e testar se a a sequência sorteada está dentro dela usando o operador in em um loop, para gerar uma nova lista neste caso:

import random

naosortear = [[1, 2, 3, 5, 6, 9, 10, 12], [4, 5, 6, 8, 9, 12, 13, 14], [1, 4, 5, 6, 7, 8, 11, 14], [1, 3, 4, 5, 6, 8, 9, 23], [3, 5, 6, 7, 10, 12, 13, 25], [5, 6, 7, 8, 11, 12, 13, 14], [3, 4, 5, 6, 9, 10, 11, 14]]

while (True):
	listasorteada = sorted(random.sample(range (1,25), 8))

	if listasorteada in naosortear:
		pass #Não faz nada, o que significa executar o loop novamente e sortear outros números
	else:
		print(listasorteada)
		break #Sai do loop, já que a lista sorteada não faz parte das quais não devem ser sorteadas

Abraços!

Link para o comentário
Compartilhar em outros sites

  • 0

Na verdade ele está executando, porém o como o Range(1, 4) vai sempre retornar [1, 2, 3] e esta combinação está na lista "naosortear" ele vai ficar em um loop infinito (já que não haverá outra combinação). Se você não utilizasse o sorted() (para deixar em ordem), você teria outras combinações (tipo, [3, 2, 1]) e aí sim estaria diferente.

Abraços!

Link para o comentário
Compartilhar em outros sites

  • 0

Lembrando que estou fazendo esse exemplo menor apenas para verificar a validade do algoritmo.
Fiz a alteração que você citou:
 

import random
lista = sorted (random.sample (range (1, 5) , 3)) 
                
naolista = [[2 ,3 ,4], [1, 2, 3]]

while (True):
	lista = (random.sample (range (1, 5) , 3))

	if lista in naolista:
		pass
	else:
		print(lista)
		break

Porém ele continua sem sortear  [1, 2, 4] e [1, 3 ,4],  sorteando somente a sequência [3, 2, 1] quando executo o comando print (lista). Que inclusive está em ordem decrescente. Qual seria sua sugestão para o problema e como fazer a sequência surgir apenas em ordem crescente? Porque minha lista de exclusão será composta por uma série de sequências numéricas que estarão somente em ordem crescente.

Link para o comentário
Compartilhar em outros sites

  • 0

Aqui pra mim funcionou corretamente, você só esqueceu do segundo sorted() (dentro do loop):

import random
lista = sorted(random.sample (range (1, 5) , 3)) 

naolista = [[2 ,3 ,4], [1, 2, 3]]

while (True):
    lista = sorted(random.sample (range (1, 5) , 3))

    if lista in naolista:
        pass
    else:
        print(lista)
        break

Com esse código só se gera [1, 2, 4] ou [1, 3, 4], já que as duas outras possibilidades são excluídas pela "naolista".

Certo?

Abraços!

Link para o comentário
Compartilhar em outros sites

Participe da discussão

Você pode postar agora e se registrar depois. Se você já tem uma conta, acesse agora para postar com sua conta.

Visitante
Responder esta pergunta...

×   Você colou conteúdo com formatação.   Remover formatação

  Apenas 75 emoticons são permitidos.

×   Seu link foi incorporado automaticamente.   Exibir como um link em vez disso

×   Seu conteúdo anterior foi restaurado.   Limpar Editor

×   Você não pode colar imagens diretamente. Carregar ou inserir imagens do URL.



  • Estatísticas dos Fóruns

    • Tópicos
      152,3k
    • Posts
      652,5k
×
×
  • Criar Novo...