Last active
July 29, 2021 22:45
-
-
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.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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 |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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 |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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") |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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 |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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] |
Muito bacana o programa!
Eu mudaria algumas decisões de projeto pra que cada classe tivesse funcionalidades mais claras e coerentes:
- A classe
Person
eCadastro
fazem quase a mesma coisa, seria legal deixar o registro da pessoa só na classePessoa
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 classeCadastro
e só faria o sorteio na classeSorteio
; - Por último, seria legal abusar bastante dos seus objetos no módulo
main.py
, pegando atributos direto dePessoa
em vez de criar um dicionário e lidar com ele. Uma lista de objetos da classePessoa
seria bem interessante.
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
Executor:
python main.py