Skip to content
Open
60 changes: 60 additions & 0 deletions eleicoes/common.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,60 @@
class Pessoa:
__nome : str
__RG : str
__CPF : str

def __init__(self, nome, RG, CPF):
self.__nome = nome
self.__RG = RG
self.__CPF = CPF

def __str__(self):
info = (f'Nome: {self.__nome}\n'
f'RG: {self.__RG}\n'
f'CPF: {self.__CPF}\n')
return info

def __repr__(self):
return f"Pessoa(nome='{self.__nome}', RG='{self.__RG}', CPF='{self.__CPF}')"

class Eleitor(Pessoa):
__titulo : int
secao : int
zona : int

def __init__(self, nome, RG, CPF, titulo, secao, zona):
super().__init__(nome, RG, CPF)
self.__titulo = titulo
self.secao = secao
self.zona = zona

def __str__(self):
info = super().__str__()
info += (f'Titulo: {self.__titulo}\n'
f'Seção: {self.secao}\n'
f'Zona: {self.zona}\n')
return info

def __repr__(self):
return f"Eleitor({super().__repr__()}, titulo='{self.__titulo}', secao='{self.secao}', zona='{self.zona}')"

def get_titulo(self):
return self.__titulo

class Candidato(Pessoa):
__numero : int

def __init__(self, nome, RG, CPF, numero):
super().__init__(nome, RG, CPF)
self.__numero = numero

def __str__(self):
info = super().__str__()
info += (f'Numero: {self.__numero}\n')
return info

def __repr__(self):
return f"Candidato({super().__repr__()}, numero='{self.__numero})'"

def get_numero(self):
return self.__numero
54 changes: 54 additions & 0 deletions eleicoes/eleicao.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,54 @@
import pickle
from typing import List
from common import *

class Urna:
mesario : Pessoa
__secao : int
__zona : int
__eleitores_presentes : List[Eleitor] = []
__votos = {} #dicionario chave = numero do candidato, valor é a quantidade de votos

def __init__(self, mesario : Pessoa, secao : int, zona : int,
candidatos : List[Candidato], eleitores : List[Eleitor]):
self.mesario = mesario
self.__secao = secao
self.__zona = zona
self.__nome_arquivo = f'{self.__zona}_{self.__secao}.pkl'
self.__candidatos = candidatos
self.__eleitores = []
for eleitor in eleitores:
if eleitor.zona == zona and eleitor.secao == secao:
self.__eleitores.append(eleitor)

for candidato in self.__candidatos:
self.__votos[candidato.get_numero()] = 0
self.__votos['BRANCO'] = 0
self.__votos['NULO'] = 0

with open(self.__nome_arquivo, 'wb') as arquivo:
pickle.dump(self.__votos, arquivo)

def get_eleitor(self, titulo : int):
for eleitor in self.__eleitores:
if eleitor.get_titulo() == titulo:
return eleitor
return False

def registrar_voto(self, eleitor : Eleitor, n_cand : int):
self.__eleitores_presentes.append(eleitor)
if n_cand in self.__votos:
self.__votos[n_cand] += 1
else:
self.__votos['NULO'] += 1

with open(self.__nome_arquivo, 'wb') as arquivo:
pickle.dump(self.__votos, arquivo)

def __str__(self):
info = (f'Urna da seção {self.__secao}, zona {self.__zona}\n'
f'Mesario {self.mesario}\n')




30 changes: 30 additions & 0 deletions eleicoes/gerenciar_urna.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,30 @@
from common import *
from eleicao import Urna

def iniciar_urna(eleitores, candidatos):
print("Iniciando Urna")
print("==============")
secao = int(input("Número da secao: "))
zona = int(input("Número da zona: "))

nome_mes = input("Nome do Mesario: ")
rg_mes = input("RG do Mesario: ")
cpf_mes = input("CPF do Mesario: ")

mesario = Pessoa(nome_mes, rg_mes, cpf_mes)

return Urna(mesario, secao, zona, candidatos, eleitores)

def votar(urna : Urna):
titulo_eleitor = int(input("Digite o titulo do eleitor: "))
eleitor = urna.get_eleitor(titulo_eleitor)

if not eleitor:
raise Exception("Eleitor não é desta Urna")

print(eleitor)
print("Pode votar!")
print("===========")
voto = int(input("Digite o numero do candidato: "))
urna.registrar_voto(eleitor, voto)

130 changes: 130 additions & 0 deletions eleicoes/main.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,130 @@
import pickle
import traceback
import gerenciar_urna
from common import *

FILE_ELEITORES = 'eleitores.pkl'
FILE_CANDIDATOS = 'candidatos.pkl'

def menu():
print("1-Novo Eleitor")
print("2-Atualizar Eleitor")
print("3-Inserir Candidato")
print("4-Listar Candidatos")
print("5-Iniciar Urna")
print("6-Testar Urna")
print("7-Sair")
op = int(input("Digite a opcao [1 a 7]? "))
while op not in range(1, 8):
op = int(input("Digite a opcao [1 a 7]? "))
return op

def inserir_eleitor(eleitores):
titulo = int(input("Digite o Títlulo: "))

if titulo in eleitores:
raise Exception("Titulo já existente!")

nome = input("Digite o nome: ")
RG = input("Digite o RG: ")
CPF = input("Digite o CPF: ")
secao = int(input("Digite a secao: "))
zona = int(input("Digite a zona: "))

eleitor = Eleitor(nome, RG, CPF, titulo, secao, zona)
eleitores[eleitor.get_titulo()] = eleitor

with open(FILE_ELEITORES, 'wb') as arquivo:
pickle.dump(eleitores, arquivo)

print('Eleitor gravado com sucesso!')
print(eleitor)

def atualizar_eleitor(eleitores):
titulo = int(input('Digite o titulo do eleitor: '))

if titulo in eleitores:
eleitor = eleitores[titulo]
print(eleitor)
secao = int(input("Digite a nova secao: "))
zona = int(input("Digite a nova zona: "))
eleitor.secao = secao
eleitor.zona = zona

with open(FILE_ELEITORES, 'wb') as arquivo:
pickle.dump(eleitores, arquivo)

print('Atualizados dados do eleitor!')
print(eleitor)
else:
raise Exception('Titulo inexistente')

def inserir_candidato(candidatos):
numero = int(input("Digite o número do candidato: "))

if numero in candidatos:
raise Exception("Candidato já existente!")

nome = input("Digite o nome: ")
RG = input("Digite o RG: ")
CPF = input("Digite o CPF: ")

candidato = Candidato(nome, RG, CPF, numero)
candidatos[candidato.get_numero()] = candidato

with open(FILE_CANDIDATOS, 'wb') as arquivo:
pickle.dump(candidatos, arquivo)

print('Candidato gravado com sucesso!')
print(candidato)

def listar_candidatos(candidatos):
for candidato in candidatos.values():
print(candidato)

if __name__ == "__main__":
eleitores = {} #dicionário a chave será o titulo
try:
print("Carregando arquivo de eleitores ...")

with open(FILE_ELEITORES, 'rb') as arquivo:
eleitores = pickle.load(arquivo)
except FileNotFoundError as fnfe:
print(fnfe)
print("Arquivo nao encontrado, nenhum eleitor carregado!")

candidatos = {} # dicionário a chave será o titulo
try:
print("Carregando arquivo de candidatos ...")

with open(FILE_CANDIDATOS, 'rb') as arquivo:
candidatos = pickle.load(arquivo)
except FileNotFoundError as fnfe:
print(fnfe)
print("Arquivo nao encontrado, nenhum candidato carregado!")

opcao = 1
while opcao in range(1,8):
try:
opcao = menu()

if opcao == 1:
inserir_eleitor(eleitores)
elif opcao == 2:
atualizar_eleitor(eleitores)
elif opcao == 3:
inserir_candidato(candidatos)
elif opcao == 4:
listar_candidatos(candidatos)
elif opcao == 5:
urna = gerenciar_urna.iniciar_urna(eleitores.values(),
candidatos.values())
elif opcao == 6:
gerenciar_urna.votar(urna)
elif opcao == 7:
print("Saindo!")
break
except Exception as e:
#traceback.print_exc()
print(e)

27 changes: 15 additions & 12 deletions src/frota.py → exemplo_carro/frota.py
Original file line number Diff line number Diff line change
Expand Up @@ -2,39 +2,42 @@ class Carro:
modelo : str
marca : str
cor : str
odometro : 0.0
motor_on : False
__odometro = 0.0
__motor_on = False

def __init__(self, modelo : str, marca : str, cor : str,
odometro : float, motor : bool):
self.modelo = modelo
self.marca = marca
self.cor = cor
self.odometro = odometro
self.motor_on = motor
self.__odometro = odometro
self.__motor_on = motor

def ligar(self):
if not self.motor_on:
self.motor_on = True
if not self.__motor_on:
self.__motor_on = True
else:
raise Exception("Erro: Motor já ligado!")

def acelerar(self, velocidade : float, tempo : float):
if self.motor_on:
self.odometro += velocidade * tempo
if self.__motor_on:
self.__odometro += velocidade * tempo
else:
raise Exception("Erro: Não é possível acelerar! Motor desligado!")

def desligar(self):
if self.motor_on:
self.motor_on = False
if self.__motor_on:
self.__motor_on = False
else:
raise Exception("Erro: Motor já desligado!")

def get_odometro(self):
return self.__odometro

def __str__(self):
info = (f'Carro {self.modelo}, marca {self.marca}, '
f'cor {self.cor}\n{self.odometro} Km, '
f'motor {self.motor_on}')
f'cor {self.cor}\n{self.__odometro} Km, '
f'motor {self.__motor_on}')
return info


Expand Down
2 changes: 1 addition & 1 deletion src/main.py → exemplo_carro/main.py
Original file line number Diff line number Diff line change
Expand Up @@ -13,7 +13,7 @@
'''
Controlando o carro até ele atingir 10000 Km
'''
while carro1.odometro < 10000:
while carro1.get_odometro() < 10000:
try:
print('1- Ligar motor')
print('2- Desligar motor')
Expand Down