-2

Tenho uma lista onde existem vinte e cinco números. Desses vinte cinco números quero sortear treze números aleatórios e inserir em uma nova lista chamada trezeFixas.Após isso gostaria de colocar os dozer números restantes em outra lista chamada dozeFixas. Consigo fazer a primeira parte mas a segunda está dando problemas, alguma dica?

segue o código até o momento:

import random

vinteCinco = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 7, 18, 19, 20, 21, 22, 23, 24, 25]
trezeFixas = []
dozeRestantes = []

while len(trezeFixas) != 13:
    r = random.choice(vinteCinco)
    if r not in trezeFixas:
        trezeFixas.append(r)
        trezeFixas.sort()
    while len(dozeRestantes) != 12:
        r = random.choice(vinteCinco)
        if r in trezeFixas and r not in dozeRestantes:
            dozeRestantes.append(r)
            dozeRestantes.sort()


print("Vinte e cinco números sorteados: {}".format(vinteCinco))
print("Treze fixas: {}".format(trezeFixas))
print("Doze restantes: {} ".format(dozeRestantes))
5
  • 2
    Acho mais simples usar random.shuffle pra embaralhar a lista, depois basta pegar os 13 primeiros e os 12 últimos em listas separadas
    – hkotsubo
    Commented 31/08/2022 às 20:41
  • 1
    A solucao do hkotsubo eh a melhor, mas veja aqui o metodo sample Commented 31/08/2022 às 20:47
  • Realmente as soluções são mais simples, porém estou com números duplicados e se eu for remover os duplicados a lista dozeRestante não fica com exatos 12 números. Commented 31/08/2022 às 21:49
  • 1
    Se quer eliminar valores duplicados aí é outro problema. Sugiro editar a pergunta e deixar mais claro o que pretende, quais os valores possíveis, o que acontece se tem duplicados, etc
    – hkotsubo
    Commented 31/08/2022 às 21:59
  • Tem razão. De qualquer forma obrigado pelas dicas(Hkotsubo e Paulo Marques)!!! Foram de grande ajuda! Commented 31/08/2022 às 22:12

1 Resposta 1

0

Como tentei rodar o seu programa e por algum motivo a minha IDE não funcionou, acabei tentando refazer ele. Vou explicar loop por loop.

#programa_pricipal
import random

vinteCinco = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 
19, 20, 21, 22, 23, 24, 25]
trezeFixas = []
dozeRestantes = []

#primeiro loop
while len(trezeFixas) < 13:
   r = random.choice(vinteCinco)
   if r not in trezeFixas:
      trezeFixas.append(r)

#segundo loop
   for e in vinteCinco:
      if e not in trezeFixas:
         dozeRestantes.append(e)

print("Vinte e cinco números sorteados: {}".format(vinteCinco))
print("Treze fixas: {}".format(trezeFixas))
print("Doze restantes: {} ".format(dozeRestantes))

No primeiro loop, enquanto o len() da lista for menor que 13, ele irá armazenar na variável r um número aleatório da lista vinteCinco. Caso o número não esteja na lista trezeFixas, ele será adicionado nesta lista. Esse loop se repetirá até a lista tiver 13 elementos nela.

Já no segundo loop, para cada elemento e na lista vinteCinco, caso esse número e não estiver na trezeFixas, ele isenta adicionado na lista dozeRestantes.

2
  • Pra poucos números não seria um problema, mas conforme o array cresce, essa solução não escala. Pois pode chegar um momento em que o array trezeFixas tem muitos elementos e a chance de sortear um que ainda não está nele diminiu bastante (ou seja, o while se repete várias vezes, sem contar que cada vez que o in é usado, ele precisa percorrer o array novamente para ver se o número está contido nele). Isso não é muito eficiente. Outra coisa, o array tem duas vezes o 7, não seria um 17 ali? Enfim, ainda acho mais simples da forma que eu sugeri: ideone.com/kuMMTY
    – hkotsubo
    Commented 2/09/2022 às 13:38
  • Valeu Otto. eu agradeço o interesse! hkotsubo sua solução é mais do que satisfatório, interessante como fica fácil depois que alguém resolve. Eu estava quebrando a cabeça para resolver isso. Preciso treinar mais. Obrigado! Commented 2/09/2022 às 14:32

Você deve fazer log-in para responder a esta pergunta.

Esta não é a resposta que você está procurando? Pesquise outras perguntas com a tag .