Terminei meu curso de python e como meu primeiro projeto resolvi fazer um código que importasse uma lista de um arquivo txt e posteriormente sorteasse os vencedores dentre os nomes:
import random
class Sorteador:
def __init__(self, premio, quantidade_por_sorteado, numero_de_sorteados):
self._premio = premio
self._quantidade_por_sorteado = quantidade_por_sorteado
self._numero_de_sorteados = numero_de_sorteados
self._participantes = []
@property
def premio(self):
return self._premio
@property
def quantidade_por_sorteado(self):
return self._quantidade_por_sorteado
@property
def numero_de_sorteados(self):
return self._numero_de_sorteados
@property
def participantes(self):
return self._participantes
def __iter__(self):
return self
def __str__(self):
return f'os participantes sao {self.carrega_participantes()} e os vencedores sao {self.sorteia_premiados()}'
def carrega_participantes(self):
arquivo = open("participantes.txt", "r", encoding='utf-8')
for linha in arquivo:
linha = linha.strip()
self.participantes.append(linha)
arquivo.close()
return self.participantes
def sorteia_premiados(self):
sorteados = []
contador = self.numero_de_sorteados
while contador > 0:
indice_sorteado = random.randrange(0, len(self.participantes))
participante_sorteado = self.participantes[indice_sorteado]
sorteados.append(participante_sorteado)
if participante_sorteado in self.participantes:
del(self.participantes[indice_sorteado])
contador -= 1
return sorteados
O inicializador é:
from src import Sorteador
premio = 'Box'
numero_de_sorteados = 2
quantidade_por_sorteado = 2
sorteia = Sorteador(premio, quantidade_por_sorteado, numero_de_sorteados)
print(sorteia, flush=True)
Até aqui o código está funcionando, mas quando tento realizar um laço while ou dar mais de um print:
print(sorteia, flush=True)
print()
print(sorteia, flush=True)
no inicializador a impressão retorna duplicada, da seguinte forma:
os participantes sao ['Marcos', 'Felipe', 'Mario', 'Matheus', 'Francisco', 'Antonio', 'Thiago', 'Igor', 'Paulo', 'Joao'] e os vencedores sao ['Joao', 'Thiago']
os participantes sao ['Marcos', 'Felipe', 'Mario', 'Matheus', 'Francisco', 'Antonio', 'Igor', 'thon310/python.exe c:/UsePaulo', 'Marcos', 'Felipe', 'Mario', 'Matheus', 'Francisco', 'Antonio', 'Thiago', 'Igor', 'Paulo', 'Joao'] e os vencedores sao ['Marcos', 'Paulo'] 'Igor', 'Paulo', 'Joao']
PS C:\Users\mfsra\Desktop\Projetos\Sorteidor>
Não estou conseguindo entender o problema da duplicação, agradeço desde já qualquer ajudar em solucionar esse código ou sugerir algum que faça o mesmo de forma mais simples. A ideia é que cada sorteado seja único, sem repetições de vencedores.
A lista de participantes salva em um arquivo txt é a seguinte:
Marcos
Felipe
Mario
Matheus
Francisco
Antonio
Thiago
Igor
Paulo
Joao