Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

desafio.py Updated #87

Open
wants to merge 4 commits into
base: main
Choose a base branch
from
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
3 changes: 3 additions & 0 deletions .idea/.gitignore

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

8 changes: 8 additions & 0 deletions .idea/Python.iml

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

6 changes: 6 additions & 0 deletions .idea/inspectionProfiles/profiles_settings.xml

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

7 changes: 7 additions & 0 deletions .idea/misc.xml

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

8 changes: 8 additions & 0 deletions .idea/modules.xml

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

6 changes: 6 additions & 0 deletions .idea/vcs.xml

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

140 changes: 96 additions & 44 deletions 00 - Fundamentos/desafio.py
Original file line number Diff line number Diff line change
@@ -1,66 +1,118 @@
menu = """

def menu():
return """
[d] Depositar
[s] Sacar
[t] Transferir
[p] Pagar Conta
[e] Extrato
[q] Sair

=> """

saldo = 0
limite = 500
extrato = ""
numero_saques = 0
LIMITE_SAQUES = 3

while True:

opcao = input(menu)

if opcao == "d":
valor = float(input("Informe o valor do depósito: "))
def depositar(saldo, extrato):
valor = float(input("Informe o valor do depósito: "))
if valor > 0:
saldo += valor
extrato += f"Depósito: R$ {valor:.2f}\n"
else:
print("Operação falhou! O valor informado é inválido.")
return saldo, extrato


def sacar(saldo, extrato, numero_saques, limite, LIMITE_SAQUES):
valor = float(input("Informe o valor do saque: "))
excedeu_saldo = valor > saldo
excedeu_limite = valor > limite
excedeu_saques = numero_saques >= LIMITE_SAQUES

if excedeu_saldo:
print("Operação falhou! Você não tem saldo suficiente.")
elif excedeu_limite:
print("Operação falhou! O valor do saque excede o limite.")
elif excedeu_saques:
print("Operação falhou! Número máximo de saques excedido.")
elif valor > 0:
saldo -= valor
extrato += f"Saque: R$ {valor:.2f}\n"
numero_saques += 1
else:
print("Operação falhou! O valor informado é inválido.")

if valor > 0:
saldo += valor
extrato += f"Depósito: R$ {valor:.2f}\n"
return saldo, extrato, numero_saques

else:
print("Operação falhou! O valor informado é inválido.")

elif opcao == "s":
valor = float(input("Informe o valor do saque: "))
def transferir(saldo, extrato, historico_transferencias):
valor = float(input("Informe o valor da transferência: "))
excedeu_saldo = valor > saldo

excedeu_saldo = valor > saldo
if excedeu_saldo:
print("Operação falhou! Você não tem saldo suficiente.")
elif valor > 0:
conta_destino = input("Informe o número da conta de destino: ")
saldo -= valor
historico_transferencias += f"Transferência de R$ {valor:.2f} para a conta {conta_destino}\n"
extrato += f"Transferência: R$ {valor:.2f}\n"
else:
print("Operação falhou! O valor informado é inválido.")

excedeu_limite = valor > limite
return saldo, extrato, historico_transferencias

excedeu_saques = numero_saques >= LIMITE_SAQUES

if excedeu_saldo:
print("Operação falhou! Você não tem saldo suficiente.")
def pagar_conta(saldo, extrato, historico_pagamentos):
valor = float(input("Informe o valor do pagamento: "))
excedeu_saldo = valor > saldo

elif excedeu_limite:
print("Operação falhou! O valor do saque excede o limite.")
if excedeu_saldo:
print("Operação falhou! Você não tem saldo suficiente.")
elif valor > 0:
descricao = input("Informe a descrição do pagamento: ")
saldo -= valor
historico_pagamentos += f"Pagamento de R$ {valor:.2f} para {descricao}\n"
extrato += f"Pagamento: R$ {valor:.2f}\n"
else:
print("Operação falhou! O valor informado é inválido.")

elif excedeu_saques:
print("Operação falhou! Número máximo de saques excedido.")
return saldo, extrato, historico_pagamentos

elif valor > 0:
saldo -= valor
extrato += f"Saque: R$ {valor:.2f}\n"
numero_saques += 1

def mostrar_extrato(saldo, extrato):
print("\n================ EXTRATO ================")
if not extrato:
print("Não foram realizadas movimentações.")
else:
print(extrato)
print(f"\nSaldo: R$ {saldo:.2f}")
print("==========================================")


def main():
saldo = 0
limite = 500
extrato = ""
numero_saques = 0
LIMITE_SAQUES = 3
historico_transferencias = ""
historico_pagamentos = ""

while True:
opcao = input(menu())

if opcao == "d":
saldo, extrato = depositar(saldo, extrato)
elif opcao == "s":
saldo, extrato, numero_saques = sacar(saldo, extrato, numero_saques, limite, LIMITE_SAQUES)
elif opcao == "t":
saldo, extrato, historico_transferencias = transferir(saldo, extrato, historico_transferencias)
elif opcao == "p":
saldo, extrato, historico_pagamentos = pagar_conta(saldo, extrato, historico_pagamentos)
elif opcao == "e":
mostrar_extrato(saldo, extrato)
elif opcao == "q":
break
else:
print("Operação falhou! O valor informado é inválido.")
print("Operação inválida, por favor selecione novamente a operação desejada.")

elif opcao == "e":
print("\n================ EXTRATO ================")
print("Não foram realizadas movimentações." if not extrato else extrato)
print(f"\nSaldo: R$ {saldo:.2f}")
print("==========================================")

elif opcao == "q":
break

else:
print("Operação inválida, por favor selecione novamente a operação desejada.")
if __name__ == "__main__":
main()
55 changes: 14 additions & 41 deletions 02 - Programação Orientada a Objetos/10 - desafio/desafio_v1.py
Original file line number Diff line number Diff line change
@@ -1,7 +1,6 @@
from abc import ABC, abstractclassmethod, abstractproperty
from abc import ABC, abstractmethod
from datetime import datetime


class Cliente:
def __init__(self, endereco):
self.endereco = endereco
Expand All @@ -13,15 +12,13 @@ def realizar_transacao(self, conta, transacao):
def adicionar_conta(self, conta):
self.contas.append(conta)


class PessoaFisica(Cliente):
def __init__(self, nome, data_nascimento, cpf, endereco):
super().__init__(endereco)
self.nome = nome
self.data_nascimento = data_nascimento
self.cpf = cpf


class Conta:
def __init__(self, numero, cliente):
self._saldo = 0
Expand Down Expand Up @@ -55,56 +52,40 @@ def historico(self):
return self._historico

def sacar(self, valor):
saldo = self.saldo
excedeu_saldo = valor > saldo

if excedeu_saldo:
if valor > self._saldo:
print("\n@@@ Operação falhou! Você não tem saldo suficiente. @@@")

elif valor > 0:
elif valor <= 0:
print("\n@@@ Operação falhou! O valor informado é inválido. @@@")
else:
self._saldo -= valor
print("\n=== Saque realizado com sucesso! ===")
return True

else:
print("\n@@@ Operação falhou! O valor informado é inválido. @@@")

return False

def depositar(self, valor):
if valor > 0:
self._saldo += valor
print("\n=== Depósito realizado com sucesso! ===")
return True
else:
print("\n@@@ Operação falhou! O valor informado é inválido. @@@")
return False

return True


class ContaCorrente(Conta):
def __init__(self, numero, cliente, limite=500, limite_saques=3):
super().__init__(numero, cliente)
self.limite = limite
self.limite_saques = limite_saques

def sacar(self, valor):
numero_saques = len(
[transacao for transacao in self.historico.transacoes if transacao["tipo"] == Saque.__name__]
)

excedeu_limite = valor > self.limite
excedeu_saques = numero_saques >= self.limite_saques
numero_saques = len([transacao for transacao in self.historico.transacoes if transacao["tipo"] == Saque.__name__])

if excedeu_limite:
if valor > self.limite:
print("\n@@@ Operação falhou! O valor do saque excede o limite. @@@")

elif excedeu_saques:
elif numero_saques >= self.limite_saques:
print("\n@@@ Operação falhou! Número máximo de saques excedido. @@@")

else:
return super().sacar(valor)

return False

def __str__(self):
Expand All @@ -114,7 +95,6 @@ def __str__(self):
Titular:\t{self.cliente.nome}
"""


class Historico:
def __init__(self):
self._transacoes = []
Expand All @@ -128,22 +108,20 @@ def adicionar_transacao(self, transacao):
{
"tipo": transacao.__class__.__name__,
"valor": transacao.valor,
"data": datetime.now().strftime("%d-%m-%Y %H:%M:%s"),
"data": datetime.now().strftime("%d-%m-%Y %H:%M:%S"),
}
)


class Transacao(ABC):
@property
@abstractproperty
@abstractmethod
def valor(self):
pass

@abstractclassmethod
@abstractmethod
def registrar(self, conta):
pass


class Saque(Transacao):
def __init__(self, valor):
self._valor = valor
Expand All @@ -153,12 +131,9 @@ def valor(self):
return self._valor

def registrar(self, conta):
sucesso_transacao = conta.sacar(self.valor)

if sucesso_transacao:
if conta.sacar(self.valor):
conta.historico.adicionar_transacao(self)


class Deposito(Transacao):
def __init__(self, valor):
self._valor = valor
Expand All @@ -168,7 +143,5 @@ def valor(self):
return self._valor

def registrar(self, conta):
sucesso_transacao = conta.depositar(self.valor)

if sucesso_transacao:
if conta.depositar(self.valor):
conta.historico.adicionar_transacao(self)
Loading