diff --git a/README.md b/README.md index 2bc91a8..ead4972 100644 --- a/README.md +++ b/README.md @@ -1,5 +1,14 @@ # WoMakersCode - Bootcamp Python Backend para Iniciantes +# Lista de Participantes +- Marcia Pinto Barcelo + +## Visão Geral +Bem vinda ao repositório do curso Bootcamp Python Backend para Iniciantes. +Aqui vamos manter os exemplos utilizados durante as aulas. +Você poderá rodar os exemplos em sua própria máquina após ter seguido a configuração de ambiente proposta em aula. +Além disso, ao realizar um `fork` do nosso repositório para a sua própria conta no GitHub, você poderá publicar suas soluções para os exercícios propostos. + ## Visão Geral Bem vinda ao repositório do curso Bootcamp Python Backend para Iniciantes. Aqui vamos manter os exemplos utilizados durante as aulas. diff --git a/imagens/modelagem-estacionamento.jpg b/imagens/modelagem-estacionamento.jpg new file mode 100644 index 0000000..b2653e5 Binary files /dev/null and b/imagens/modelagem-estacionamento.jpg differ diff --git a/orientacao-a-objetos/1-escopos-e-namespaces/__pycache__/funcoes_do_log.cpython-311.pyc b/orientacao-a-objetos/1-escopos-e-namespaces/__pycache__/funcoes_do_log.cpython-311.pyc new file mode 100644 index 0000000..a019b0a Binary files /dev/null and b/orientacao-a-objetos/1-escopos-e-namespaces/__pycache__/funcoes_do_log.cpython-311.pyc differ diff --git a/orientacao-a-objetos/1-escopos-e-namespaces/__pycache__/funcoes_do_log_colorido.cpython-311.pyc b/orientacao-a-objetos/1-escopos-e-namespaces/__pycache__/funcoes_do_log_colorido.cpython-311.pyc new file mode 100644 index 0000000..4bbed43 Binary files /dev/null and b/orientacao-a-objetos/1-escopos-e-namespaces/__pycache__/funcoes_do_log_colorido.cpython-311.pyc differ diff --git a/orientacao-a-objetos/1-escopos-e-namespaces/from_import_especifico.py b/orientacao-a-objetos/1-escopos-e-namespaces/from_import_especifico.py index 1ffc8cf..878bbf1 100644 --- a/orientacao-a-objetos/1-escopos-e-namespaces/from_import_especifico.py +++ b/orientacao-a-objetos/1-escopos-e-namespaces/from_import_especifico.py @@ -7,4 +7,5 @@ # O primeiro datetime é o nome do módulo, o segundo é o nome de uma classe que existe dentro # desse módulo from datetime import datetime -agora = datetime.now() \ No newline at end of file +agora = datetime.now() +print(agora) \ No newline at end of file diff --git a/orientacao-a-objetos/1-escopos-e-namespaces/import.py b/orientacao-a-objetos/1-escopos-e-namespaces/import.py index f7119b7..4a2ad00 100644 --- a/orientacao-a-objetos/1-escopos-e-namespaces/import.py +++ b/orientacao-a-objetos/1-escopos-e-namespaces/import.py @@ -4,4 +4,5 @@ # A palavra chave import disponibiliza o conteúdo do módulo através do # namespace "funcoes_do_log". import funcoes_do_log -funcoes_do_log.imprimir_no_log(f'Bem vinda, {funcoes_do_log.nome_de_usuario}!') \ No newline at end of file +funcoes_do_log.imprimir_no_log(f'Bem vinda, {funcoes_do_log.nome_de_usuario}!') + diff --git a/orientacao-a-objetos/1-escopos-e-namespaces/pacote.py b/orientacao-a-objetos/1-escopos-e-namespaces/pacote.py index a332479..1108152 100644 --- a/orientacao-a-objetos/1-escopos-e-namespaces/pacote.py +++ b/orientacao-a-objetos/1-escopos-e-namespaces/pacote.py @@ -4,3 +4,6 @@ imprimir_no_log('teste', 'aviso') imprimir_no_log('teste', 'erro') imprimir_no_log('teste', 'outro') + +import funcoes_do_log_colorido +funcoes_do_log_colorido.imprimir_no_log(f'Bem vinda, {funcoes_do_log_colorido.nome_de_usuario}!', 'erro') diff --git a/orientacao-a-objetos/1-escopos-e-namespaces/requirements.txt b/orientacao-a-objetos/1-escopos-e-namespaces/requirements.txt index 3d90aaa..3fcfb51 100644 --- a/orientacao-a-objetos/1-escopos-e-namespaces/requirements.txt +++ b/orientacao-a-objetos/1-escopos-e-namespaces/requirements.txt @@ -1 +1 @@ -colorama \ No newline at end of file +colorama diff --git a/orientacao-a-objetos/2-classes-e-objetos/lista-de-exercicios-1.py b/orientacao-a-objetos/2-classes-e-objetos/lista-de-exercicios-1.py index 9e43142..59d5031 100644 --- a/orientacao-a-objetos/2-classes-e-objetos/lista-de-exercicios-1.py +++ b/orientacao-a-objetos/2-classes-e-objetos/lista-de-exercicios-1.py @@ -2,12 +2,53 @@ # Um carro tem os seguintes atributos: ligado, cor, modelo, velocidade. # Um carro tem os seguintes comportamentos: liga, desliga, acelera, desacelera. +class Carro: + def __init__(self, cor, modelo): + self.ligado = False + self.cor = cor + self.modelo = modelo + self.velocidade = 0 + def ligar(self): + if not self.ligado: + print("O carro está ligado.") + self.ligado = True + else: + print("O carro já está ligado.") -# Crie uma instância da classe carro. + def desligar(self): + if self.ligado: + print("O carro está desligado.") + self.ligado = False + self.velocidade = 0 + else: + print("O carro já está desligado.") + def acelerar(self): + if self.ligado: + self.velocidade += 10 + print(f"O carro acelerou. Velocidade atual: {self.velocidade} km/h") + else: + print("O carro está desligado. Não é possível acelerar.") + + def desacelerar(self): + if self.ligado and self.velocidade > 0: + self.velocidade -= 10 + print(f"O carro desacelerou. Velocidade atual: {self.velocidade} km/h") + elif self.velocidade == 0: + print("O carro já está parado.") + else: + print("O carro está desligado. Não é possível desacelerar.") -# Faça o carro "andar" utilizando os métodos da sua classe. +# Crie uma instância da classe Carro. +meu_carro = Carro(cor="Vermelho", modelo=2023) + +# Faça o carro "andar" utilizando os métodos da sua classe. +meu_carro.ligar() +meu_carro.acelerar() +meu_carro.acelerar() -# Faça o carro "parar" utilizando os métodos da sua classe. \ No newline at end of file +# Faça o carro "parar" utilizando os métodos da sua classe. +meu_carro.desacelerar() +meu_carro.desligar() diff --git a/orientacao-a-objetos/3-entendendo-orientacao-a-objetos/__pycache__/estacionamento.cpython-311.pyc b/orientacao-a-objetos/3-entendendo-orientacao-a-objetos/__pycache__/estacionamento.cpython-311.pyc new file mode 100644 index 0000000..da0a278 Binary files /dev/null and b/orientacao-a-objetos/3-entendendo-orientacao-a-objetos/__pycache__/estacionamento.cpython-311.pyc differ diff --git a/orientacao-a-objetos/4-construtores-e-destrutores/02_destrutores.py b/orientacao-a-objetos/4-construtores-e-destrutores/02_destrutores.py index ab21a8a..ee0229d 100644 --- a/orientacao-a-objetos/4-construtores-e-destrutores/02_destrutores.py +++ b/orientacao-a-objetos/4-construtores-e-destrutores/02_destrutores.py @@ -1,7 +1,7 @@ # Construtor padrão class MinhaClasse: def __init__(self, nome): - self.nome = nome + self.nome = nome" print(f'MinhaClasse1: Chamou o construtor padrão de {nome}') def __del__(self): diff --git a/orientacao-a-objetos/7-classes-abstratas/lista-de-exercicios-2.py b/orientacao-a-objetos/7-classes-abstratas/lista-de-exercicios-2.py index f0d297e..faad6af 100644 --- a/orientacao-a-objetos/7-classes-abstratas/lista-de-exercicios-2.py +++ b/orientacao-a-objetos/7-classes-abstratas/lista-de-exercicios-2.py @@ -11,4 +11,77 @@ # -renda_mensal. # 5. Clientes homens por enquanto não têm direito a cheque especial. -# Para modelar seu sistema, utilize obrigatoriamente os conceitos "classe", "herança", "propriedades", "encapsulamento" e "classe abstrata". \ No newline at end of file +# Para modelar seu sistema, utilize obrigatoriamente os conceitos "classe", "herança", "propriedades", "encapsulamento" e "classe abstrata". +from abc import ABC, abstractmethod + +class Cliente(ABC): + def __init__(self, nome, telefone, renda_mensal): + self.__nome = nome + self.__telefone = telefone + self.__renda_mensal = renda_mensal + + @property + def nome(self): + return self.__nome + + @property + def telefone(self): + return self.__telefone + + @property + def renda_mensal(self): + return self.__renda_mensal + + @abstractmethod + def possui_cheque_especial(self): + pass + +class ClienteMulher(Cliente): + def possui_cheque_especial(self): + return True + +class ClienteHomem(Cliente): + def possui_cheque_especial(self): + return False + +class ContaCorrente: + def __init__(self, clientes): + self.__clientes = clientes + self.__saldo = 0 + self.__operacoes = [] + + @property + def saldo(self): + return self.__saldo + + @property + def operacoes(self): + return self.__operacoes + + def deposito(self, valor): + self.__saldo += valor + self.__operacoes.append(f'Depósito: +{valor}') + + def saque(self, valor): + if self.__saldo - valor >= -self.__clientes[0].renda_mensal or self.__clientes[0].possui_cheque_especial(): + self.__saldo -= valor + self.__operacoes.append(f'Saque: -{valor}') + else: + print("Operação não permitida. Saldo insuficiente e sem cheque especial.") + +# Exemplo de uso: +cliente_mulher = ClienteMulher("Maria", "123456789", 5000) +conta_mulher = ContaCorrente([cliente_mulher]) + +cliente_homem = ClienteHomem("João", "987654321", 6000) +conta_homem = ContaCorrente([cliente_homem]) + +conta_mulher.deposito(1000) +conta_mulher.saque(2000) +print(f"Saldo da conta de {cliente_mulher.nome}: {conta_mulher.saldo}") +print(f"Operações da conta de {cliente_mulher.nome}: {conta_mulher.operacoes}") + +conta_homem.deposito(1500) +conta_homem.saque(2000) +print(f"Saldo da conta de {cliente_homem.nome}: {conta_homem.saldo}") +print(f"Operações da conta de {cliente_homem.nome}: {conta_homem.operacoes}") diff --git a/orientacao-a-objetos/9-erros_e_excecoes/lista-de-exercicios-3.py b/orientacao-a-objetos/9-erros_e_excecoes/lista-de-exercicios-3.py index f2accb1..168f76e 100644 --- a/orientacao-a-objetos/9-erros_e_excecoes/lista-de-exercicios-3.py +++ b/orientacao-a-objetos/9-erros_e_excecoes/lista-de-exercicios-3.py @@ -2,19 +2,20 @@ ## No entanto, ele não está funcionando bem. Você pode consertá-lo? def calcular_media(valores): - tamanho = 1 - soma = 0.0 - for i, valor in enumerate(valores): - soma += valor - i += 1 + tamanho = len(valores) + soma = sum(valores) media = soma / tamanho + return media continuar = True valores = [] + while continuar: valor = input('Digite um número para entrar na sua média ou "ok" para calcular o valor:') if valor.lower() == 'ok': - continuar = false + continuar = False + else: + valores.append(float(valor)) # Converta o valor para float antes de adicioná-lo à lista media = calcular_media(valores) -print('A média calculada para os valores {} foi de {}'.format(valores, media)) \ No newline at end of file +print('A média calculada para os valores {} foi de {}'.format(valores, media))