From 7eaf50f17b199976d7ac93f97a825244ef91f9f0 Mon Sep 17 00:00:00 2001 From: furryCEGO Date: Wed, 21 Aug 2024 09:42:20 -0300 Subject: [PATCH 1/7] =?UTF-8?q?Simula=C3=A7=C3=A3o=20com=20dois=20carros,?= =?UTF-8?q?=20feito=20em=20aula.?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main.py | 75 ++++++++++++++++++++++++++++++++++------------------- 1 file changed, 49 insertions(+), 26 deletions(-) diff --git a/src/main.py b/src/main.py index 49c199e..2c0044b 100644 --- a/src/main.py +++ b/src/main.py @@ -1,44 +1,67 @@ from frota import * +def operar_carro(carro : Carro): + print('1- Ligar motor') + print('2- Desligar motor') + print('3- Acelerar') + + op = 0 + while op not in (1, 2, 3): + op = int(input("Digite as opcoes[1-3]: ")) + + if op == 1: + carro.ligar() + elif op == 2: + carro.desligar() + elif op == 3: + v = float(input("Informe a velocidade: ")) + t = float(input("Informe o tempo: ")) + carro.acelerar(v, t) + + print('Infos atuais do carro') + print(carro) if __name__ == "__main__": - print('Cadastre um carro') - nm_modelo = input('Digite o modelo: ') - nm_marca = input('Digite a marca: ') - nm_cor = input('Digite a cor: ') + print('Cadastre o primeiro carro') + nm_modelo1 = input('Digite o modelo: ') + nm_marca1 = input('Digite a marca: ') + nm_cor1 = input('Digite a cor: ') - kms = float(input('Digite com quantos Kms: ')) + carro1 = Carro(nm_modelo1, nm_marca1, nm_cor1, 0, motor=False) - carro1 = Carro(nm_modelo, nm_marca, nm_cor, kms, motor = True) + print('Cadastre um segundo carro') + nm_modelo2 = input('Digite o modelo: ') + nm_marca2 = input('Digite a marca: ') + nm_cor2 = input('Digite a cor: ') + + carro2 = Carro(nm_modelo2, nm_marca2, nm_cor2, 0, motor=False) ''' - Controlando o carro até ele atingir 10000 Km + Controlando dois carro até atingir 600 Km ''' - while carro1.odometro < 10000: + while carro1.odometro < 600 and carro2.odometro < 600: try: - print('1- Ligar motor') - print('2- Desligar motor') - print('3- Acelerar') - + print('Escolha um carro:') + print(f'Carro 1: {nm_modelo1} {nm_cor1}') + print(f'Carro 2: {nm_modelo2} {nm_cor2}') op = 0 - while op not in (1,2,3): - op = int(input("Digite as opcoes[1-3]: ")) - + while op not in (1, 2): + op = int(input("Digite as opcoes[1 ou 2]: ")) if op == 1: - carro1.ligar() - elif op == 2: - carro1.desligar() - elif op == 3: - v = float(input("Informe a velocidade: ")) - t = float(input("Informe o tempo: ")) - carro1.acelerar(v, t) - - print('Infos atuais do carro') - print(carro1) + operar_carro(carro1) + else: + operar_carro(carro2) except Exception as e: print("Erro!") print(e) carro1.desligar() + carro2.desligar() print(carro1) - print('Parar para trocar óleo!!!') + print(carro2) + if carro1.odometro > carro2.odometro: + print(f'{nm_modelo1} {nm_cor1} chegou primeiro que o {nm_modelo2} {nm_cor2}') + elif carro1.odometro == carro2.odometro: + print(f'{nm_modelo1} {nm_cor1} chegou ao mesmo tempo {nm_modelo2} {nm_cor2}') + else: + print(f'{nm_modelo2} {nm_cor2} chegou primeiro que o {nm_modelo1} {nm_cor1}') From f220b8014cc203fcb1c9a99041f069f933fc691a Mon Sep 17 00:00:00 2001 From: furryCEGO Date: Wed, 28 Aug 2024 08:43:38 -0300 Subject: [PATCH 2/7] Agora com variaveis privadas, aquele que chegar primeiro a 600km vence. --- src/frota.py | 69 ++++++++++++++++++++++++++++++---------------------- src/main.py | 17 +++++++------ 2 files changed, 49 insertions(+), 37 deletions(-) diff --git a/src/frota.py b/src/frota.py index a4b3891..2c45ee1 100644 --- a/src/frota.py +++ b/src/frota.py @@ -1,43 +1,54 @@ class Carro: - modelo : str - marca : str - cor : str - odometro : 0.0 - motor_on : False - - def __init__(self, modelo : str, marca : str, cor : str, - odometro : float, motor : bool): + modelo: str + marca: str + cor: str + __odometro: 0.0 + __motor_on: False + __tanque = 0.0 + consumo_medio = 0.0 + + def __init__(self, modelo: str, marca: str, cor: str, + __odometro: float, motor: bool, __tanque: float, consumo_medio: float): self.modelo = modelo self.marca = marca self.cor = cor - self.odometro = odometro - self.motor_on = motor + self.__odometro = __odometro + self.__motor_on = motor + self.__tanque = __tanque + self.consumo_medio = consumo_medio def ligar(self): - if not self.motor_on: - self.motor_on = True + if not self.__motor_on and self.__tanque > 0: + 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 + raise Exception("Erro: Motor já ligado ou __tanque vazio!") + + def acelerar(self, velocidade: float, tempo: float): + if self.__motor_on and self.__tanque > 0: + km = velocidade * tempo + litros = km / self.consumo_medio + if self.__tanque >= litros: + self.__tanque -= litros + else: + km = litros * self.consumo_medio + self.__tanque = 0 + self.__odometro += km else: - raise Exception("Erro: Não é possível acelerar! Motor desligado!") + raise Exception("Erro: Não é possível acelerar! Motor desligado ou sem combustivel!") 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 get_tanque(self): + return self.__tanque + def get_motor(self): + return self.__motor_on def __str__(self): info = (f'Carro {self.modelo}, marca {self.marca}, ' - f'cor {self.cor}\n{self.odometro} Km, ' - f'motor {self.motor_on}') - return info - - - - - + f'cor {self.cor}\n{self.__odometro} Km, ' + f'motor {self.__motor_on} consumo {self.consumo_medio} km/l tanque {self.__tanque} L') + return info \ No newline at end of file diff --git a/src/main.py b/src/main.py index 2c0044b..4396f4e 100644 --- a/src/main.py +++ b/src/main.py @@ -25,20 +25,24 @@ def operar_carro(carro : Carro): nm_modelo1 = input('Digite o modelo: ') nm_marca1 = input('Digite a marca: ') nm_cor1 = input('Digite a cor: ') + nm_litros1 = float(input('Tamanho do tanque: ')) + nm_cm1= float(input('Consumo do tanque: ')) - carro1 = Carro(nm_modelo1, nm_marca1, nm_cor1, 0, motor=False) + carro1 = Carro(nm_modelo1, nm_marca1, nm_cor1, 0, False, nm_litros1, nm_cm1) print('Cadastre um segundo carro') nm_modelo2 = input('Digite o modelo: ') nm_marca2 = input('Digite a marca: ') nm_cor2 = input('Digite a cor: ') + nm_litros2 = float(input('Tamanho do tanque: ')) + nm_cm2 = float(input('Consumo do tanque: ')) - carro2 = Carro(nm_modelo2, nm_marca2, nm_cor2, 0, motor=False) + carro2 = Carro(nm_modelo2, nm_marca2, nm_cor2, 0, False, nm_litros2, nm_cm2) ''' Controlando dois carro até atingir 600 Km ''' - while carro1.odometro < 600 and carro2.odometro < 600: + while carro1.get_odometro() < 600 and carro2.get_odometro() < 600 and (carro1.get_tanque() > 0 or carro2.get_tanque()> 0): try: print('Escolha um carro:') print(f'Carro 1: {nm_modelo1} {nm_cor1}') @@ -54,14 +58,11 @@ def operar_carro(carro : Carro): print("Erro!") print(e) - carro1.desligar() - carro2.desligar() print(carro1) print(carro2) - if carro1.odometro > carro2.odometro: + if carro1.get_odometro() > carro2.get_odometro(): print(f'{nm_modelo1} {nm_cor1} chegou primeiro que o {nm_modelo2} {nm_cor2}') - elif carro1.odometro == carro2.odometro: + elif carro1.get_odometro() == carro2.get_odometro(): print(f'{nm_modelo1} {nm_cor1} chegou ao mesmo tempo {nm_modelo2} {nm_cor2}') else: print(f'{nm_modelo2} {nm_cor2} chegou primeiro que o {nm_modelo1} {nm_cor1}') - From 4b7838ae73bccef838aa79f3acd1fe74ec99e58c Mon Sep 17 00:00:00 2001 From: furryCEGO Date: Wed, 28 Aug 2024 10:39:35 -0300 Subject: [PATCH 3/7] Agora com variaveis privadas, aquele que chegar primeiro a 600km vence. --- "elei\303\247\303\265es/common.py" | 56 ++++++++++++ "elei\303\247\303\265es/main.py" | 138 +++++++++++++++++++++++++++++ {src => exemplo_carro}/frota.py | 0 {src => exemplo_carro}/main.py | 0 4 files changed, 194 insertions(+) create mode 100644 "elei\303\247\303\265es/common.py" create mode 100644 "elei\303\247\303\265es/main.py" rename {src => exemplo_carro}/frota.py (100%) rename {src => exemplo_carro}/main.py (100%) diff --git "a/elei\303\247\303\265es/common.py" "b/elei\303\247\303\265es/common.py" new file mode 100644 index 0000000..ac8b57f --- /dev/null +++ "b/elei\303\247\303\265es/common.py" @@ -0,0 +1,56 @@ +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 \ No newline at end of file diff --git "a/elei\303\247\303\265es/main.py" "b/elei\303\247\303\265es/main.py" new file mode 100644 index 0000000..f266207 --- /dev/null +++ "b/elei\303\247\303\265es/main.py" @@ -0,0 +1,138 @@ +import pickle +import traceback + +from common import * + +FILE_CANDIDATOS = 'candidatos.pkl' +FILE_ELEITORES = 'eleitores.pkl' + +def menu_candidato(): + print("1-Novo Candidato") + print("2-Listar Candidatos") + print("3-Sair") + op = int(input("Digite a opcao [1,2,3]? ")) + while op not in (1, 2, 3): + op = int(input("Digite a opcao [1,2,3]? ")) + return op + +def inserir_candidato(candidatos): + numero = int(input("Digite o Numero: ")) + + if numero in candidatos: + raise Exception("Numero já existente!") + + nome = input("Digite o nome: ") + RG = input("Digite o RG: ") + CPF = input("Digite o CPF: ") + + candidato = Candidato(nome, RG, CPF, numero) + candidatos[numero] = candidato + with open(FILE_CANDIDATOS, 'wb') as arquivo: + pickle.dump(candidatos, arquivo) + + print('Candidato gravado com sucesso!') + print(candidato) + + +def menu_eleitor(): + print("1-Novo Eleitor") + print("2-Atualizar Eleitor") + print("3-Sair") + op = int(input("Digite a opcao [1,2,3]? ")) + while op not in (1, 2, 3): + op = int(input("Digite a opcao [1,2,3]? ")) + return op + +def inserir_eleitor(eleitores): + titulo = int(input("Digite o Título: ")) + + 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 = input("Digite a secao: ") + zona = 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 = input("Digite a nova secao: ") + zona = 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 listar_candidatos(candidatos): + for o in candidatos.values(): + print(o) + +if __name__ == "__main__": + eleitores = {} #dicionário a chave será o titulo + candidatos = {} # dicionário a chave será o titulo + try: + print("Carregando arquivo de eleitores e candidatos ...") + + with open(FILE_ELEITORES, 'rb') as arquivo: + eleitores = pickle.load(arquivo) + except FileNotFoundError as fnfe: + print(fnfe) + print("Arquivo nao encontrado, nenhum eleitor carregado!") + + op_usr = 1 + while op_usr in (1,2,3): + op_usr = int(input('Gerenciar: 1- Candidatos, 2- Eleitores, 3- Sair [1, 2, 3]: ')) + opcao = 1 + if op_usr == 1: + while opcao in (1,2,3): + try: + opcao = menu_candidato() + + if opcao == 1: + inserir_candidato(candidatos) + elif opcao == 2: + listar_candidatos(candidatos) + elif opcao == 3: + print("Saindo!") + break + except Exception as e: + #traceback.print_exc() + print(e) + + elif op_usr == 2: + while opcao in (1,2,3): + try: + opcao = menu_eleitor() + + if opcao == 1: + inserir_eleitor(eleitores) + elif opcao == 2: + atualizar_eleitor(eleitores) + elif opcao == 3: + print("Saindo!") + break + except Exception as e: + #traceback.print_exc() + print(e) + elif op_usr == 3: + break diff --git a/src/frota.py b/exemplo_carro/frota.py similarity index 100% rename from src/frota.py rename to exemplo_carro/frota.py diff --git a/src/main.py b/exemplo_carro/main.py similarity index 100% rename from src/main.py rename to exemplo_carro/main.py From 548482b120f38963297de9bda5446e6babb9470b Mon Sep 17 00:00:00 2001 From: furryCEGO Date: Wed, 28 Aug 2024 10:40:33 -0300 Subject: [PATCH 4/7] Candidatos e Eleitores lendo e escrevendo --- "elei\303\247\303\265es/main.py" | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git "a/elei\303\247\303\265es/main.py" "b/elei\303\247\303\265es/main.py" index f266207..ea7a577 100644 --- "a/elei\303\247\303\265es/main.py" +++ "b/elei\303\247\303\265es/main.py" @@ -84,8 +84,8 @@ def atualizar_eleitor(eleitores): raise Exception('Titulo inexistente') def listar_candidatos(candidatos): - for o in candidatos.values(): - print(o) + for c in candidatos.values(): + print(c) if __name__ == "__main__": eleitores = {} #dicionário a chave será o titulo From abf83298a9fb5c4e83dd453e22ac9a1512b4d191 Mon Sep 17 00:00:00 2001 From: furryCEGO Date: Wed, 28 Aug 2024 10:41:02 -0300 Subject: [PATCH 5/7] Candidatos e Eleitores lendo e escrevendo --- "elei\303\247\303\265es/common.py" | 1 + 1 file changed, 1 insertion(+) diff --git "a/elei\303\247\303\265es/common.py" "b/elei\303\247\303\265es/common.py" index ac8b57f..88be0a0 100644 --- "a/elei\303\247\303\265es/common.py" +++ "b/elei\303\247\303\265es/common.py" @@ -43,6 +43,7 @@ def get_titulo(self): class Candidato(Pessoa): __numero : int + def __init__(self, nome, RG, CPF, numero): super().__init__(nome, RG, CPF) self.__numero = numero From 050e1836444f0fd5b08605586326fbff29f49056 Mon Sep 17 00:00:00 2001 From: rauS2 Date: Wed, 2 Oct 2024 09:43:23 -0300 Subject: [PATCH 6/7] Agora com transparencia --- "elei\303\247\303\265es/common.py" | 57 ------------ "elei\303\247\303\265es/main.py" | 138 ----------------------------- exemplo_carro/frota.py | 58 ++++++------ exemplo_carro/main.py | 80 ++++++----------- 4 files changed, 53 insertions(+), 280 deletions(-) delete mode 100644 "elei\303\247\303\265es/common.py" delete mode 100644 "elei\303\247\303\265es/main.py" diff --git "a/elei\303\247\303\265es/common.py" "b/elei\303\247\303\265es/common.py" deleted file mode 100644 index 88be0a0..0000000 --- "a/elei\303\247\303\265es/common.py" +++ /dev/null @@ -1,57 +0,0 @@ -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 \ No newline at end of file diff --git "a/elei\303\247\303\265es/main.py" "b/elei\303\247\303\265es/main.py" deleted file mode 100644 index ea7a577..0000000 --- "a/elei\303\247\303\265es/main.py" +++ /dev/null @@ -1,138 +0,0 @@ -import pickle -import traceback - -from common import * - -FILE_CANDIDATOS = 'candidatos.pkl' -FILE_ELEITORES = 'eleitores.pkl' - -def menu_candidato(): - print("1-Novo Candidato") - print("2-Listar Candidatos") - print("3-Sair") - op = int(input("Digite a opcao [1,2,3]? ")) - while op not in (1, 2, 3): - op = int(input("Digite a opcao [1,2,3]? ")) - return op - -def inserir_candidato(candidatos): - numero = int(input("Digite o Numero: ")) - - if numero in candidatos: - raise Exception("Numero já existente!") - - nome = input("Digite o nome: ") - RG = input("Digite o RG: ") - CPF = input("Digite o CPF: ") - - candidato = Candidato(nome, RG, CPF, numero) - candidatos[numero] = candidato - with open(FILE_CANDIDATOS, 'wb') as arquivo: - pickle.dump(candidatos, arquivo) - - print('Candidato gravado com sucesso!') - print(candidato) - - -def menu_eleitor(): - print("1-Novo Eleitor") - print("2-Atualizar Eleitor") - print("3-Sair") - op = int(input("Digite a opcao [1,2,3]? ")) - while op not in (1, 2, 3): - op = int(input("Digite a opcao [1,2,3]? ")) - return op - -def inserir_eleitor(eleitores): - titulo = int(input("Digite o Título: ")) - - 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 = input("Digite a secao: ") - zona = 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 = input("Digite a nova secao: ") - zona = 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 listar_candidatos(candidatos): - for c in candidatos.values(): - print(c) - -if __name__ == "__main__": - eleitores = {} #dicionário a chave será o titulo - candidatos = {} # dicionário a chave será o titulo - try: - print("Carregando arquivo de eleitores e candidatos ...") - - with open(FILE_ELEITORES, 'rb') as arquivo: - eleitores = pickle.load(arquivo) - except FileNotFoundError as fnfe: - print(fnfe) - print("Arquivo nao encontrado, nenhum eleitor carregado!") - - op_usr = 1 - while op_usr in (1,2,3): - op_usr = int(input('Gerenciar: 1- Candidatos, 2- Eleitores, 3- Sair [1, 2, 3]: ')) - opcao = 1 - if op_usr == 1: - while opcao in (1,2,3): - try: - opcao = menu_candidato() - - if opcao == 1: - inserir_candidato(candidatos) - elif opcao == 2: - listar_candidatos(candidatos) - elif opcao == 3: - print("Saindo!") - break - except Exception as e: - #traceback.print_exc() - print(e) - - elif op_usr == 2: - while opcao in (1,2,3): - try: - opcao = menu_eleitor() - - if opcao == 1: - inserir_eleitor(eleitores) - elif opcao == 2: - atualizar_eleitor(eleitores) - elif opcao == 3: - print("Saindo!") - break - except Exception as e: - #traceback.print_exc() - print(e) - elif op_usr == 3: - break diff --git a/exemplo_carro/frota.py b/exemplo_carro/frota.py index 2c45ee1..a77339a 100644 --- a/exemplo_carro/frota.py +++ b/exemplo_carro/frota.py @@ -1,54 +1,46 @@ class Carro: - modelo: str - marca: str - cor: str - __odometro: 0.0 - __motor_on: False - __tanque = 0.0 - consumo_medio = 0.0 - - def __init__(self, modelo: str, marca: str, cor: str, - __odometro: float, motor: bool, __tanque: float, consumo_medio: float): + modelo : str + marca : str + cor : str + __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.__odometro = odometro self.__motor_on = motor - self.__tanque = __tanque - self.consumo_medio = consumo_medio def ligar(self): - if not self.__motor_on and self.__tanque > 0: + if not self.__motor_on: self.__motor_on = True else: - raise Exception("Erro: Motor já ligado ou __tanque vazio!") - - def acelerar(self, velocidade: float, tempo: float): - if self.__motor_on and self.__tanque > 0: - km = velocidade * tempo - litros = km / self.consumo_medio - if self.__tanque >= litros: - self.__tanque -= litros - else: - km = litros * self.consumo_medio - self.__tanque = 0 - self.__odometro += km + raise Exception("Erro: Motor já ligado!") + + def acelerar(self, velocidade : float, tempo : float): + if self.__motor_on: + self.__odometro += velocidade * tempo else: - raise Exception("Erro: Não é possível acelerar! Motor desligado ou sem combustivel!") + raise Exception("Erro: Não é possível acelerar! Motor desligado!") def desligar(self): if self.__motor_on: self.__motor_on = False else: raise Exception("Erro: Motor já desligado!") + def get_odometro(self): return self.__odometro - def get_tanque(self): - return self.__tanque - def get_motor(self): - return self.__motor_on + def __str__(self): info = (f'Carro {self.modelo}, marca {self.marca}, ' f'cor {self.cor}\n{self.__odometro} Km, ' - f'motor {self.__motor_on} consumo {self.consumo_medio} km/l tanque {self.__tanque} L') - return info \ No newline at end of file + f'motor {self.__motor_on}') + return info + + + + + diff --git a/exemplo_carro/main.py b/exemplo_carro/main.py index 4396f4e..782dc3a 100644 --- a/exemplo_carro/main.py +++ b/exemplo_carro/main.py @@ -1,68 +1,44 @@ from frota import * -def operar_carro(carro : Carro): - print('1- Ligar motor') - print('2- Desligar motor') - print('3- Acelerar') - - op = 0 - while op not in (1, 2, 3): - op = int(input("Digite as opcoes[1-3]: ")) - - if op == 1: - carro.ligar() - elif op == 2: - carro.desligar() - elif op == 3: - v = float(input("Informe a velocidade: ")) - t = float(input("Informe o tempo: ")) - carro.acelerar(v, t) - - print('Infos atuais do carro') - print(carro) if __name__ == "__main__": - print('Cadastre o primeiro carro') - nm_modelo1 = input('Digite o modelo: ') - nm_marca1 = input('Digite a marca: ') - nm_cor1 = input('Digite a cor: ') - nm_litros1 = float(input('Tamanho do tanque: ')) - nm_cm1= float(input('Consumo do tanque: ')) - - carro1 = Carro(nm_modelo1, nm_marca1, nm_cor1, 0, False, nm_litros1, nm_cm1) + print('Cadastre um carro') + nm_modelo = input('Digite o modelo: ') + nm_marca = input('Digite a marca: ') + nm_cor = input('Digite a cor: ') - print('Cadastre um segundo carro') - nm_modelo2 = input('Digite o modelo: ') - nm_marca2 = input('Digite a marca: ') - nm_cor2 = input('Digite a cor: ') - nm_litros2 = float(input('Tamanho do tanque: ')) - nm_cm2 = float(input('Consumo do tanque: ')) + kms = float(input('Digite com quantos Kms: ')) - carro2 = Carro(nm_modelo2, nm_marca2, nm_cor2, 0, False, nm_litros2, nm_cm2) + carro1 = Carro(nm_modelo, nm_marca, nm_cor, kms, motor = True) ''' - Controlando dois carro até atingir 600 Km + Controlando o carro até ele atingir 10000 Km ''' - while carro1.get_odometro() < 600 and carro2.get_odometro() < 600 and (carro1.get_tanque() > 0 or carro2.get_tanque()> 0): + while carro1.get_odometro() < 10000: try: - print('Escolha um carro:') - print(f'Carro 1: {nm_modelo1} {nm_cor1}') - print(f'Carro 2: {nm_modelo2} {nm_cor2}') + print('1- Ligar motor') + print('2- Desligar motor') + print('3- Acelerar') + op = 0 - while op not in (1, 2): - op = int(input("Digite as opcoes[1 ou 2]: ")) + while op not in (1,2,3): + op = int(input("Digite as opcoes[1-3]: ")) + if op == 1: - operar_carro(carro1) - else: - operar_carro(carro2) + carro1.ligar() + elif op == 2: + carro1.desligar() + elif op == 3: + v = float(input("Informe a velocidade: ")) + t = float(input("Informe o tempo: ")) + carro1.acelerar(v, t) + + print('Infos atuais do carro') + print(carro1) except Exception as e: print("Erro!") print(e) + carro1.desligar() print(carro1) - print(carro2) - if carro1.get_odometro() > carro2.get_odometro(): - print(f'{nm_modelo1} {nm_cor1} chegou primeiro que o {nm_modelo2} {nm_cor2}') - elif carro1.get_odometro() == carro2.get_odometro(): - print(f'{nm_modelo1} {nm_cor1} chegou ao mesmo tempo {nm_modelo2} {nm_cor2}') - else: - print(f'{nm_modelo2} {nm_cor2} chegou primeiro que o {nm_modelo1} {nm_cor1}') + print('Parar para trocar óleo!!!') + From 591b27913a4f7673356926441b10437a0b0839f3 Mon Sep 17 00:00:00 2001 From: rauS2 Date: Wed, 2 Oct 2024 09:44:01 -0300 Subject: [PATCH 7/7] Agora com transparencia --- .idea/.gitignore | 3 + .../inspectionProfiles/profiles_settings.xml | 6 + .idea/misc.xml | 4 + .idea/modules.xml | 8 ++ .idea/python_poo.iml | 8 ++ .idea/vcs.xml | 6 + eleicoes/Interface_Eleicao.py | 14 ++ eleicoes/common.py | 101 ++++++++++++++ eleicoes/eleicao.py | 82 +++++++++++ eleicoes/gerenciar_urna.py | 30 ++++ eleicoes/main.py | 130 ++++++++++++++++++ eleicoes/tribunal.py | 93 +++++++++++++ 12 files changed, 485 insertions(+) create mode 100644 .idea/.gitignore create mode 100644 .idea/inspectionProfiles/profiles_settings.xml create mode 100644 .idea/misc.xml create mode 100644 .idea/modules.xml create mode 100644 .idea/python_poo.iml create mode 100644 .idea/vcs.xml create mode 100644 eleicoes/Interface_Eleicao.py create mode 100644 eleicoes/common.py create mode 100644 eleicoes/eleicao.py create mode 100644 eleicoes/gerenciar_urna.py create mode 100644 eleicoes/main.py create mode 100644 eleicoes/tribunal.py diff --git a/.idea/.gitignore b/.idea/.gitignore new file mode 100644 index 0000000..26d3352 --- /dev/null +++ b/.idea/.gitignore @@ -0,0 +1,3 @@ +# Default ignored files +/shelf/ +/workspace.xml diff --git a/.idea/inspectionProfiles/profiles_settings.xml b/.idea/inspectionProfiles/profiles_settings.xml new file mode 100644 index 0000000..105ce2d --- /dev/null +++ b/.idea/inspectionProfiles/profiles_settings.xml @@ -0,0 +1,6 @@ + + + + \ No newline at end of file diff --git a/.idea/misc.xml b/.idea/misc.xml new file mode 100644 index 0000000..dc9ea49 --- /dev/null +++ b/.idea/misc.xml @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/.idea/modules.xml b/.idea/modules.xml new file mode 100644 index 0000000..65b5b08 --- /dev/null +++ b/.idea/modules.xml @@ -0,0 +1,8 @@ + + + + + + + + \ No newline at end of file diff --git a/.idea/python_poo.iml b/.idea/python_poo.iml new file mode 100644 index 0000000..8437fe6 --- /dev/null +++ b/.idea/python_poo.iml @@ -0,0 +1,8 @@ + + + + + + + + \ No newline at end of file diff --git a/.idea/vcs.xml b/.idea/vcs.xml new file mode 100644 index 0000000..35eb1dd --- /dev/null +++ b/.idea/vcs.xml @@ -0,0 +1,6 @@ + + + + + + \ No newline at end of file diff --git a/eleicoes/Interface_Eleicao.py b/eleicoes/Interface_Eleicao.py new file mode 100644 index 0000000..ff709bd --- /dev/null +++ b/eleicoes/Interface_Eleicao.py @@ -0,0 +1,14 @@ +from abc import ABCMeta, abstractmethod + +class Transparencia(metaclass=ABCMeta): + def __init__(self): + pass + + @abstractmethod + def to_csv(self): + pass + + @abstractmethod + def to_txt(self): + pass + diff --git a/eleicoes/common.py b/eleicoes/common.py new file mode 100644 index 0000000..b8e134e --- /dev/null +++ b/eleicoes/common.py @@ -0,0 +1,101 @@ +from abc import ABC, abstractmethod +import hashlib + +class Pessoa(ABC): + __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}')" + + def get_nome(self): + return self.__nome + + @abstractmethod + def assinatura_eletronica(self): + pass + +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 + + def assinatura_eletronica(self): + dados_para_hash = self.__str__() + dados_em_byte = dados_para_hash.encode('utf-8') + hash = hashlib.sha256(dados_em_byte) + return hash.hexdigest() + +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 + + def assinatura_eletronica(self): + dados_para_hash = self.__str__() + dados_em_byte = dados_para_hash.encode('utf-8') + hash = hashlib.md5(dados_em_byte) + return hash.hexdigest() + +class Juiz(Pessoa): + __registro : int + + def __init__(self, nome : str, RG : str , CPF : str, registro :int): + super().__init__(nome, RG, CPF) + self.__registro = registro + + def __str__(self): + info = super().__str__() + info += f'Registro: {self.__registro}' + return info + + def assinatura_eletronica(self): + dados_para_hash = self.__str__() + dados_em_byte = dados_para_hash.encode('utf-8') + hash = hashlib.sha1(dados_em_byte) + return hash.hexdigest() + diff --git a/eleicoes/eleicao.py b/eleicoes/eleicao.py new file mode 100644 index 0000000..7300049 --- /dev/null +++ b/eleicoes/eleicao.py @@ -0,0 +1,82 @@ +import pickle +from typing import List +from common import * +from Interface_Eleicao import Transparencia +import csv + +class Urna(Transparencia): + 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}' + 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+'.pkl', '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 get_zona(self): + return self.__zona + + def get_secao(self): + return self.__secao + + 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+'.pkl', 'wb') as arquivo: + pickle.dump(self.__votos, arquivo) + + def __str__(self): + info = f'Urna da seção {self.__secao}, zona {self.__zona}\n' + info += f'Mesario {self.mesario}\n' + return info + + def to_csv(self): + with open(self.__nome_arquivo+'.csv', mode='w', newline='') as file: + writer = csv.writer(file) + writer.writerow(['Seção', 'Zona', 'Eleitores Presentes']) + for eleitor in self.__eleitores: + writer.writerow([self.get_secao(), self.get_zona(), eleitor.get_titulo()]) + + def to_txt(self): + with open(self.__nome_arquivo+'.txt', mode='w') as file: + file.write(f'{self.__str__()}\n') + for eleitor in self.__eleitores: + file.write(f'{eleitor.get_titulo()}\n') + +if __name__ == "__main__": + c1 = Candidato("ADADADA", "223", "23123", 1) + c2 = Candidato("xxxxxxx", "333", "444", 2) + e1 = Eleitor("Jorge Pascal", "12389172389", "129837", 123123, 23, 4) + e2 = Eleitor("Olavo de Caralho", "9182738", "02984719", 343434, 23, 4) + mesario = Eleitor("Orasmo Reis", "10298730987123", "1928469", 9889889, 23, 4) + urna = Urna(mesario,23, 4, [c1, c2], [e1, e2]) + urna.to_txt() + urna.to_csv() diff --git a/eleicoes/gerenciar_urna.py b/eleicoes/gerenciar_urna.py new file mode 100644 index 0000000..9bee094 --- /dev/null +++ b/eleicoes/gerenciar_urna.py @@ -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) + diff --git a/eleicoes/main.py b/eleicoes/main.py new file mode 100644 index 0000000..ada9874 --- /dev/null +++ b/eleicoes/main.py @@ -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) + diff --git a/eleicoes/tribunal.py b/eleicoes/tribunal.py new file mode 100644 index 0000000..0151a87 --- /dev/null +++ b/eleicoes/tribunal.py @@ -0,0 +1,93 @@ +from Interface_Eleicao import * +from typing import List +from common import * +import csv + +class Denuncia: + __numero : int + __denunciante : Pessoa + __denunciado : Pessoa + __juiz : Juiz + __txt_denuncia : str + __txt_sentenca : str + + def __init__(self, n: int, denunciante : Pessoa, + denunciado : Pessoa, txt_denuncia : str): + self.__numero = n + self.__denunciante = denunciante + self.__denunciado = denunciado + self.__txt_denuncia = txt_denuncia + + def julgar(self, j : Juiz, txt_sentenca : str): + self.__juiz = j + self.__txt_sentenca = txt_sentenca + + def __str__(self): + if self.__txt_sentenca == None: + info = f'Denuncia {self.__numero}. Sentenca não proferida' + else: + info = f'Denuncia {self.__numero}\n' + info += f'Denunciante\n{self.__denunciante}\n' + info += f'Assinatura: {self.__denunciante.assinatura_eletronica()}\n' + info += f'Denunciado\n{self.__denunciado}\n' + info += f'Assinatura: {self.__denunciado.assinatura_eletronica()}\n' + info += f'Denuncia: {self.__txt_denuncia}\n' + info += f'Sentença\n{self.__txt_sentenca}\n' + info += f'Juiz\n{self.__juiz}\n' + info += f'Assinatura: {self.__juiz.assinatura_eletronica()}' + return info + + def get_denunciante(self): + return self.__denunciante + + def get_denunciado(self): + return self.__denunciado + + def get_juiz(self): + return self.__juiz + + def get_txt_sentenca(self): + return self.__txt_sentenca + + def get_txt_denuncia(self): + return self.__txt_denuncia + +class Jurisprudencia(Transparencia): + ano : int + denuncias : List[Denuncia] + + def __init__(self, a:int): + self.ano = a + self.denuncias = [] + + def add_denuncia(self, d: Denuncia): + self.denuncias.append(d) + + def to_csv(self): + with open(f'juris_{self.ano}.csv', mode='w', newline='') as file: + writer = csv.writer(file) + writer.writerow(['Denunciante', 'Denunciado', 'Denuncia', 'Sentença', 'Juiz']) + + for denuncia in self.denuncias: + writer.writerow([denuncia.get_denunciante().get_nome(), denuncia.get_denunciado().get_nome(), + denuncia.get_txt_denuncia(), denuncia.get_txt_sentenca(), + denuncia.get_juiz().get_nome()]) + + def to_txt(self): + with open(f'juris_{self.ano}.txt', mode='w') as file: + for denuncia in self.denuncias: + file.write(denuncia.__str__()) + + +if __name__ == "__main__": + j1 = Juiz("Alex Morales", "12312", 123123, 4456) + #p1 = Pessoa("Jose", 123123, 123123) + c1 = Candidato("ADADADA", "223", "23123", 1) + c2 = Candidato("xxxxxxx", "333", "444", 2) + denun = Denuncia(1, c1, c2, "Fake News!") + denun.julgar(j1, 'O denunciado é obrigado a pagar uma multa ao denunciante!') + juris1 = Jurisprudencia(2024) + juris1.add_denuncia(denun) + juris1.to_csv() + juris1.to_txt() + print(denun)