Skip to content

Instantly share code, notes, and snippets.

@MrCl0wnLab
Last active July 29, 2021 22:45
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 1 You must be signed in to fork a gist
  • Save MrCl0wnLab/4fa85ed4b890fe86c284b8d405632d9d to your computer and use it in GitHub Desktop.
Save MrCl0wnLab/4fa85ed4b890fe86c284b8d405632d9d to your computer and use it in GitHub Desktop.
Estudo Python: Mini sistema de sorteio, Gera tickets para cada nome cadastrado em data_sorteio.
from random import shuffle
class Cadastro:
''' Recebe um cpf e gera um objeto Cadastro que possui um atributo para
guardar o ticket definido a partir do cpf passado.
'''
def __init__(self, cpf):
self.ticket = self.ticket_generator(cpf)
def ticket_generator(self, cpf):
ticket = list(str(id(cpf)))
shuffle(ticket)
ticket = self.ticket_normalize(ticket)
return ticket
def ticket_normalize(self, ticket):
str_ticket = ''
for item_number in ticket:
str_ticket += item_number
return str_ticket
person_qt person_name person_email person_cpf person_code person_date
5 Juliana Dantas de Andrade july.dantas@teste-hotmail.com 942909461465 322205 23/02/1989
5 Lais Vale de Melo lais25vm@teste-hotmail.com 4639948454 515105 24/02/1989
5 Silvaneide Rosa da Silva silvaneiderosa40@teste-teste-yahoo.com.br 942909461 515105 25/02/1989
5 Ana Lucia de Fatima Lopes lopes.filha@teste-hotmail.com 942909462 515105 26/02/1989
8 Denize Santos de Medeiros denize.medeiros@teste-teste-yahoo.com.br 942909463 515105 27/02/1989
5 Maria Elaine Felix maria.elaine.felix@teste-gmail.com 942909464 515105 28/02/1989
5 Édson Wânder Véras edsonveras9@teste-hotmail.com 942909465 223505 01/03/1989
5 Andreza Cristina Costa Fernandes andrezaccf@teste-teste-yahoo.com.br 942909466 223505 02/03/1989
5 Dagoberto Gonzalez Martinez dagoyana26@teste-gmail.com 942909467 225142 03/03/1989
7 Narriman dos Santos Barbosa narrisantosrn@teste-teste-yahoo.com.br 942909468 515105 04/03/1989
7 Tércio Guimarães de Oliveira tguimaraes@teste-hotmail.com 942909469 515105 05/03/1989
5 Ana Ivete Vale de Luciana Brasil smscaico@rn.teste-gov.br 942909470 515105 06/03/1989
5 José Alves Filho alvespedagogia@teste-teste-yahoo.com.br 942909471 515105 07/03/1989
5 Fabiana de Azevedo Guedes Sales fafaguedes@teste-teste-yahoo.com.br 942909472 515105 08/03/1989
6 Maria do Rosario Dantas dantaerosa@teste-hotmail.com 942909473 515105 09/03/1989
5 Jurema Sandra de Souza jussouza@outlook.com 942909474 515105 10/03/1989
5 Betiane Fernandes da Costa betiane@teste-hotmail.com.br 942909475 223505 11/03/1989
5 Maria Edith de Medeiros Silva elitaabc@teste-hotmail.com 942909476 515105 12/03/1989
6 Iasodaria Kaiwe Gomes dos Santos iadossantos@outlook.com 942909477 515105 13/03/1989
5 Alexsandra Pereira da Silva negaalepereira@teste-hotmail.com 942909478 515105 14/03/1989
10 Josicleia Pereira de Medeiros josic_l@teste-hotmail.com 942909479 515105 15/03/1989
7 Selma Santos de Melo selmamelo01@teste-gmail.com 942909480 515105 16/03/1989
5 Maria José Crispim de Araújo marj.crispim@holtmail.com 942909481 515105 17/03/1989
5 Jose Miguel Rivaflecha Vicente lizykarol13@teste-yahoo.es 942909482 225142 18/03/1989
5 Reinaldo Batista Sales Júnior reinaldos22@teste-teste-yahoo.com.br 942909483 515105 19/03/1989
1 Ana Karla dos Santos Silva an.karladossantos@teste-hotmail.com 942909484 223505 20/03/1989
5 Lorena Santos Dantas Saraiva lo_saraiva@teste-hotmail.com 942909485 223505 21/03/1989
5 Martha Concepcion Pujol Luna leiradiaz.mpl@teste-gmail.com 942909486 225142 22/03/1989
5 Roseane Cristina Santos de Medeiros roseanecristi@teste-hotmail.com 942909487 515105 23/03/1989
12 Kim Mansur kimmansur@teste-gmail.com 942909488 223605 24/03/1989
6 Marcela Fernandes de A B de Morais marcela-fernandes14@teste-hotmail.com 942909489 223505 25/03/1989
5 Ana Karla Silva de Carvalho ankcarvalho@teste-gmail.com 942909490 223272 26/03/1989
5 Maria Concebida Maia concebidamaia@teste-teste-yahoo.com.br 942909491 515105 27/03/1989
import csv
from person import Person
from cadastro import Cadastro
from sorteio import Sorteio
person_data_list = []
with open('data_sorteio.csv', mode='r') as csv_file:
csv_reader = csv.DictReader(csv_file)
for row in csv_reader:
person = Person(row['person_name'], row['person_date'], row['person_cpf'])
cadastro = Cadastro(person.atCpf)
person.set_ticket(cadastro.ticket)
if person.atNot_teenAge:
person_data_list.append(person)
for count_person_win in range(10):
sorteio = Sorteio(person_data_list)
person_win = sorteio.sorteado
print(f"[+]Nome: {person_win.atName}")
print(f"[+]Ticket: {person_win.atTicket}\n")
from datetime import datetime
class Person:
''' Recebe nome, data de nascimento e cpf de uma pessoa. Calcula sua
idade, checa se é menor de 18 anos e cria um objeto do tipo Pessoa com
esses atributos. Tem métodos que possibilitam definir um ticket pra
pessoa e criar um dicionário com seus respectivos dados.
'''
__slots__ = ['atName','atDate','atCpf','atDate','atNot_teenAge','atAge', 'atTicket']
def __init__(self, person_name, person_date, person_cpf):
self.atName = person_name
self.atDate = person_date
self.atCpf = person_cpf
self.atAge = self.calcule_age()
self.atNot_teenAge = self.check_not_teen_age()
self.atTicket = None
def calcule_age(self):
today = datetime.today()
date = datetime.strptime(self.atDate, '%d/%m/%Y')
return today.year - date.year
def check_not_teen_age(self):
return self.atAge >= 18
def set_ticket(self, ticket):
self.atTicket = ticket
def get_data(self):
data = {
'person_name': self.atName,
'person_date': self.atDate,
'person_cpf': self.atCpf,
'person_age': self.atAge,
'person_not_teen_age': self.atNot_teenAge
}
return data
from random import randrange
class Sorteio:
''' Recebe uma lista com candidatos a um sorteio e devolve um objeto
Sorteio que contém o atributo 'sorteado' com o elemento sorteado
aleatoriamente.
'''
def __init__(self, data):
random_index = randrange(len(data))
self.sorteado = self.ticket_raffle(data)
def ticket_raffle(self, data):
random_index = randrange(len(data))
return data[random_index]
@MrCl0wnLab
Copy link
Author

Executor:
python main.py

@danigfavero
Copy link

Muito bacana o programa!
Eu mudaria algumas decisões de projeto pra que cada classe tivesse funcionalidades mais claras e coerentes:

  • A classe Person e Cadastro fazem quase a mesma coisa, seria legal deixar o registro da pessoa só na classe Pessoa e construir o dicionário com os dados pessoais na própria classe;
  • A classe Sorteio faz duas coisas: cadastra o ticket de cada pessoa e sorteia. Eu deixaria o trabalho de cadastrar a pessoa pra classe Cadastro e só faria o sorteio na classe Sorteio;
  • Por último, seria legal abusar bastante dos seus objetos no módulo main.py, pegando atributos direto de Pessoa em vez de criar um dicionário e lidar com ele. Uma lista de objetos da classe Pessoa seria bem interessante.

@MrCl0wnLab
Copy link
Author

MrCl0wnLab commented Feb 11, 2020

Check List:

  • A classe Person e Cadastro fazem quase a mesma coisa, seria legal deixar o registro da pessoa só na classe Pessoa e construir o dicionário com os dados pessoais na própria classe;
  • A classe Sorteio faz duas coisas: cadastra o ticket de cada pessoa e sorteia. Eu deixaria o trabalho de cadastrar a pessoa pra classe Cadastro e só faria o sorteio na classe Sorteio;
  • Por último, seria legal abusar bastante dos seus objetos no módulo main.py, pegando atributos direto de Pessoa em vez de criar um dicionário e lidar com ele. Uma lista de objetos da classe Pessoa seria bem interessante.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment