trilha-python-dio's Introduction
trilha-python-dio's People
Forkers
alefaggravo jorlandosp paulo4g ubiratantavares pedrohenrique726 lburiti damareszsouza brunolinodev wesleybochi msm-m4rcelo gilberto29ap hiagofernando franciscofabio andreapnz lc-medeiros rafarodriguero luizevalu guih1993 diovanedm divoane tecnotechs-romeusouza tffreitas ana-alc marcosena2210 byalexandrepedrosa vdrdv lucas-melo-a-s alessandragalvao mateusverissimo94 fernando-vitorrr supp3rdan guilhermebtatim weberton-cardoso davibragam maiklacerda danyrodriguesti rdnvellox danielferreira83 jcbdoliveira fextreme iltonbjsilva eriiiuchi zzkelvin joaopaulorp hfellipo gabedewitt uesleiregis guicordoba jeffersonmarioto julianoalves01 moysesdutra luismendes070 cesarszabo professorsoares riltonmonte uercast fabioalvesarrais calima94 gusmazzinghydev gapinheiro felippesantia silporto nessamariano rodrigoemcode silviosodre13 prpaj guedes96 marcosrodio diego-rapha emanuel-macedo marcaosouza alexallisson edmevang devcharib carloswmd12 alan-torres-s joaopedroperes-web gillrosas dennyaugusto1975 nanipumpkin tiagosst abelisio emanuelbrit96 gustavoalbano98 joycedeisy osniramilton femartinsamorim ornilioneto chemdexx cassiovinicius ivnols diegoreis265 eduardo-98141225 leonardofs1 ichbinjuwilke wponciano ericcleptonsilva hattz10 felipeppontes eric-alvarestrilha-python-dio's Issues
Entrega Desafio Bancário
menu = """
[d] Depositar
[s] Sacar
[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: "))
if valor > 0:
saldo += valor
extrato += f"Depósito: R$ {valor:.2f}\n"
else:
print("Operação falhou! O valor informado é inválido.")
elif opcao == "s":
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úmeros 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! Ovalor informado é inválido.")
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 selecionenovamente a operação desejada.")
Sistema Bancário Simples
menu = """
[d] Depositar
[s] Sacar
[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: "))
if valor > 0:
saldo += valor
extrato += f"Depósito: R$ {valor:.2f}\n"
else:
print("Operação falhou! O valor informado é inválido.")
elif opcao == "s":
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! 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.")
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.")
Desafio Sistema Bancário V1
menu = """
[d] Depositar
[s] Sacar
[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 deposito: "))
if valor > 0:
saldo += valor
extrato += f"Depósito: R$ {valor:.2f}\n"
else:
print("Operação falhou! O valor informado é inválido.")
elif opcao == "s":
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! Numero maximo de saques excedidos. ")
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.")
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 vafor selecione novamente a opação desejada.")
Criando um Sistema Bancário com Python
menu = """
[1] Depositar
[2] Sacar
[3] Extrato
[0] Sair
=> """
saldo = 0
limite = 500
extrato = ""
numero_saques = 0
LIMITE_SAQUES = 3
while True:
opcao = input(menu)
if opcao == "1":
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.")
elif opcao == "2":
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.")
elif opcao == "3":
print("\n================ EXTRATO ================")
print("Não foram realizadas movimentações." if not extrato else extrato)
print(f"\nSaldo: R$ {saldo:.2f}")
print("==========================================")
elif opcao == "0":
break
else:
print("Operação inválida, por favor selecione novamente a operação desejada.")
#Criando um sistema bancario
#Criando um sistema bancario
menu= """
[d] Deposito
[s] Sacar
[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("Qual valor voce deseja depositar? "))
if valor >0:
saldo += valor
extrato += f"Deposito no valor de R$ {valor:.2f}\n"
else:
print("Valor informado é invalido")
elif opcao == "s":
valor = float(input("Qual o valor você deseja sacar? "))
excedeu_saldo = valor>saldo
excedeu_limite = valor>limite
excedeu_saques = numero_saques >= LIMITE_SAQUES
if excedeu_saldo:
print("Saldo insuficiente. ")
elif excedeu_limite:
print("Limite de valor para saque diario atingido.")
elif excedeu_saques:
print("Limite de saques diarios atingidos.")
elif valor > 0:
saldo -=valor
extrato += f"Saque no valor de R$ {valor:.2f}\n"
numero_saques += 1
else:
print("Valor informado é invalido.")
elif opcao == "e":
print("\n----------------Extrato----------------")
print("Não ouve nemhuma movimentação." if not extrato else extrato)
print(f"Seu saldo é de R${saldo:.2f}")
print("--------------------------------------------")
elif opcao =="q":
break
else:
print("Operação nao realizada, opção inserida invalida")
Entrega de desafio
import textwrap
def menu():
menu = """\n
========== MENU ===========
[d]\tDepositar
[s]\tSacar
[e]\tExtrato
[nc]\tNova conta
[lc]\tListar contas
[nu]\tNovo usuário
[q] \tSair
=> """
return input(textwrap.dedent(menu))
def depositar(saldo, valor, extrato, /):
if valor > 0:
saldo += valor
extrato += f"Depósito:\tR${valor:.2f}\n"
print("\n===Depósito realizado com sucesso!===")
else:
print("\n@@@ Operação falhou, o valor informado é inválido.@@@")
return saldo, extrato
def sacar(*, saldo, valor, extrato, limite, numero_saques, limite_saques):
excedeu_saldo = valor > saldo
excedeu_limite = valor > limite
excedeu_saques = numero_saques >= limite_saques
if excedeu_saldo:
print("\n@@@ Operação falhou! Você não tem saldo suficiente. @@@")
elif excedeu_limite:
print("\n@@@ Operação falhou! O valor de saque excede o limite. @@@ ")
elif excedeu_saques:
print("\n@@@ Operação falhou! Numero maximo de saques excedido. @@@")
elif valor > 0:
saldo -= valor
extrato += f"Saque:\t\tR$ {valor:.2f}\n"
numero_saques += 1
print("\n=== Saque realizado com sucesso! ===")
else:
print("\n@@@ Operação falhou! Numero maximo de saques excedido. @@@")
return saldo, extrato
def exibir_extrato(saldo, /, *, extrato):
print("\n =================EXTRATO================")
print("Não foram realizadas movimentações. " if not extrato else extrato)
print(f"\nSaldo:\t\t R$ {saldo:.2f}")
print("================================")
def criar_usuario(usuarios):
cpf = input("Informe o CPF (somente número): ")
usuario = filtrar_usuario(cpf, usuarios)
if usuario:
print("\n@@@ Já existe usuário com esse CPF! @@@")
return
nome = input("Informe o nome completo: ")
data_nascimento = input("Informe a data de nascimento (dd-mm-aaaa): ")
endereco = input ("Informe o endereço (logradouro, nro - bairro - cidade/sigla)")
usuarios.append({"nome": nome, "data_nascimento": data_nascimento, "cpf": cpf, "endereco": endereco})
print("=== Usuario criado com sucesso! ===")
def filtrar_usuario(cpf, usuarios):
usuarios_filtrados = [usuario for usuario in usuarios if usuario["cpf"] == cpf]
return usuarios_filtrados[0] if usuarios_filtrados else None
def criar_conta(agencia, numero_conta, usuarios):
cpf = input("Informe o CPF do usuário: ")
usuario = filtrar_usuario(cpf, usuarios)
if usuario:
print("\n=== Conta criada com sucesso! ===")
return {"agencia": agencia, "numero_conta": numero_conta, "usuario": usuario}
print("\@@@ Usuário não encontrado, fluxo de criação de conta encerrado! @@@")
def listar_contas(contas):
for conta in contas:
linha = f"""\
Agência:\t{conta['agencia']}
C/C:\t\t{conta['numero_conta']}
Titular:\t{conta['usuario']['nome']}
"""
print("=" * 100)
print(textwrap.dedent(linha))
def main():
LIMITE_SAQUES = 3
AGENCIA = "0001"
saldo = 0
limite = 500
extrato = ""
numero_saques = 0
usuarios = []
contas = []
while True:
opcao = menu()
if opcao == "d":
valor = float(input("Informe o valor do depósito: "))
saldo, extrato = depositar(saldo, valor, extrato)
elif opcao == "s":
valor = float(input("Informe o valor do saque: "))
saldo, extrato = sacar(
saldo=saldo,
valor=valor,
extrato=extrato,
limite=limite,
numero_saques=numero_saques,
limite_saques=LIMITE_SAQUES,
)
elif opcao == "e":
exibir_extrato(saldo, extrato=extrato)
elif opcao == "nu":
criar_usuario(usuarios)
elif opcao == "nc":
numero_conta = len(contas) +1
conta = criar_conta(AGENCIA, numero_conta, usuarios)
if conta:
contas.append(conta)
elif opcao == "lc":
listar_contas(contas)
elif opcao == "q":
break
else:
print("Operação inválida, por favor selecione a opção desejada novamente.")
main()
sistema bancário aprimorado!
from datetime import datetime, timedelta
class ContaBancaria:
def init(self, numero, titular, senha):
self.numero = numero
self.titular = titular
self.saldo = 0
self.limite_saque = 500
self.limite_transferencia = 1000
self.extrato = ""
self.numero_saques = 0
self.limite_saques = 3
self.limite_diario_saques = 1000
self.saques_dia = 0
self.historico_transacoes = []
self.senha = senha
self.ultimo_reset_diario = datetime.now()
def autenticar(self, senha):
return self.senha == senha
def resetar_limites_diarios(self):
agora = datetime.now()
if agora - self.ultimo_reset_diario > timedelta(days=1):
self.saques_dia = 0
self.numero_saques = 0
self.ultimo_reset_diario = agora
def registrar_transacao(self, tipo, valor):
transacao = {
"tipo": tipo,
"valor": valor,
"data": datetime.now().strftime("%Y-%m-%d %H:%M:%S")
}
self.historico_transacoes.append(transacao)
def depositar(self, valor):
self.resetar_limites_diarios()
if valor > 0:
self.saldo += valor
self.extrato += f"Depósito: R$ {valor:.2f}\n"
self.registrar_transacao("Depósito", valor)
return f"Depósito de {valor:.2f} concluído :)"
else:
return "Operação falhou :(. O valor informado é inválido."
def sacar(self, valor):
self.resetar_limites_diarios()
if valor <= 0:
return "Operação falhou :(. O valor informado é inválido."
elif valor > self.saldo:
return "Operação falhou :(. Você não tem saldo suficiente."
elif valor > self.limite_saque:
return "Operação falhou :(. O valor do saque excede o limite."
elif self.numero_saques >= self.limite_saques:
return "Operação falhou :(. Número máximo de saques excedido."
elif self.saques_dia + valor > self.limite_diario_saques:
return "Operação falhou :(. Você excedeu o limite diário de saques."
else:
self.saldo -= valor
self.extrato += f"Saque: R$ {valor:.2f}\n"
self.numero_saques += 1
self.saques_dia += valor
self.registrar_transacao("Saque", valor)
return f"Saque de {valor:.2f} realizado com sucesso."
def exibir_extrato(self):
extrato = "\n EXTRATO \n"
extrato += "Não foram realizadas movimentações." if not self.extrato else self.extrato
extrato += f"\nSaldo: R$ {self.saldo:.2f}\n "
return extrato
def exibir_historico_transacoes(self):
historico = "\n HISTÓRICO DE TRANSAÇÕES \n"
if not self.historico_transacoes:
historico += "Não foram realizadas transações."
else:
for transacao in self.historico_transacoes:
historico += f"{transacao['data']} - {transacao['tipo']}: R$ {transacao['valor']:.2f}\n"
historico += " "
return historico
def transferir(self, valor, conta_destino):
self.resetar_limites_diarios()
if valor <= 0:
return "Operação falhou :(. O valor informado é inválido."
elif valor > self.saldo:
return "Operação falhou :(. Você não tem saldo suficiente."
elif valor > self.limite_transferencia:
return "Operação falhou :(. O valor da transferência excede o limite."
else:
self.saldo -= valor
conta_destino.saldo += valor
self.extrato += f"Transferência: R$ {valor:.2f} para conta {conta_destino.numero}\n"
conta_destino.extrato += f"Transferência: R$ {valor:.2f} da conta {self.numero}\n"
self.registrar_transacao("Transferência Enviada", valor)
conta_destino.registrar_transacao("Transferência Recebida", valor)
return f"Transferência de {valor:.2f} para conta {conta_destino.numero} realizada com sucesso."
Gerenciamento de contas
contas = {}
def criar_conta(numero, titular, senha):
if numero in contas:
return "Número de conta já existente. Tente outro número."
else:
contas[numero] = ContaBancaria(numero, titular, senha)
return f"Conta {numero} criada com sucesso para {titular}."
def selecionar_conta(numero, senha):
conta = contas.get(numero)
if conta and conta.autenticar(senha):
return conta
else:
return None
Menus
menu_principal = """
[c] Criar Conta
[s] Selecionar Conta
[S] Sair
"""
menu_conta = """
[d] Depositar
[s] Sacar
[e] Extrato
[h] Histórico de Transações
[t] Transferir
[S] Sair
"""
Loop principal do sistema
while True:
opcao = input(menu_principal)
if opcao == "c":
numero = input("Informe o número da conta: ")
titular = input("Informe o nome do titular: ")
senha = input("Crie uma senha: ")
print(criar_conta(numero, titular, senha))
elif opcao == "s":
numero = input("Informe o número da conta: ")
senha = input("Informe a senha: ")
conta = selecionar_conta(numero, senha)
if conta:
while True:
opcao_conta = input(menu_conta)
if opcao_conta == "d":
valor = float(input("Informe o valor do depósito: "))
print(conta.depositar(valor))
elif opcao_conta == "s":
valor = float(input("Informe o valor do saque: "))
print(conta.sacar(valor))
elif opcao_conta == "e":
print(conta.exibir_extrato())
elif opcao_conta == "h":
print(conta.exibir_historico_transacoes())
elif opcao_conta == "t":
valor = float(input("Informe o valor da transferência: "))
numero_destino = input("Informe o número da conta destino: ")
conta_destino = contas.get(numero_destino)
if conta_destino:
print(conta.transferir(valor, conta_destino))
else:
print("Conta destino não encontrada.")
elif opcao_conta == "S":
break
else:
print("Operação Inválida. Selecione a operação desejada.")
elif opcao == "S":
break
else:
print("Operação Inválida. Selecione a operação desejada.")
Sistema Bancario
Sistema Desenvolvido na Trilha-python POO
Desafio Modelando o Sistema Bancário em POO com Python
import textwrap
from abc import ABC, abstractclassmethod, abstractproperty
from datetime import datetime
class Cliente:
def init(self, endereco):
self.endereco = endereco
self.contas = []
def realizar_transacao(self, conta, transacao):
transacao.registrar(conta)
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
self._numero = numero
self._agencia = "0001"
self._cliente = cliente
self._historico = Historico()
@classmethod
def nova_conta(cls, cliente, numero):
return cls(numero, cliente)
@property
def saldo(self):
return self._saldo
@property
def numero(self):
return self._numero
@property
def agencia(self):
return self._agencia
@property
def cliente(self):
return self._cliente
@property
def historico(self):
return self._historico
def sacar(self, valor):
saldo = self.saldo
excedeu_saldo = valor > saldo
if excedeu_saldo:
print("\n@@@ Operação falhou! Você não tem saldo suficiente. @@@")
elif valor > 0:
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! ===")
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
if excedeu_limite:
print("\n@@@ Operação falhou! O valor do saque excede o limite. @@@")
elif excedeu_saques:
print("\n@@@ Operação falhou! Número máximo de saques excedido. @@@")
else:
return super().sacar(valor)
return False
def __str__(self):
return f"""\
Agência:\t{self.agencia}
C/C:\t\t{self.numero}
Titular:\t{self.cliente.nome}
"""
class Historico:
def init(self):
self._transacoes = []
@property
def transacoes(self):
return self._transacoes
def adicionar_transacao(self, transacao):
self._transacoes.append(
{
"tipo": transacao.__class__.__name__,
"valor": transacao.valor,
"data": datetime.now().strftime("%d-%m-%Y %H:%M:%s"),
}
)
class Transacao(ABC):
@Property
@abstractproperty
def valor(self):
pass
@abstractclassmethod
def registrar(self, conta):
pass
class Saque(Transacao):
def init(self, valor):
self._valor = valor
@property
def valor(self):
return self._valor
def registrar(self, conta):
sucesso_transacao = conta.sacar(self.valor)
if sucesso_transacao:
conta.historico.adicionar_transacao(self)
class Deposito(Transacao):
def init(self, valor):
self._valor = valor
@property
def valor(self):
return self._valor
def registrar(self, conta):
sucesso_transacao = conta.depositar(self.valor)
if sucesso_transacao:
conta.historico.adicionar_transacao(self)
def menu():
menu = """\n
================ MENU ================
[d]\tDepositar
[s]\tSacar
[e]\tExtrato
[nc]\tNova conta
[lc]\tListar contas
[nu]\tNovo usuário
[q]\tSair
=> """
return input(textwrap.dedent(menu))
def filtrar_cliente(cpf, clientes):
clientes_filtrados = [cliente for cliente in clientes if cliente.cpf == cpf]
return clientes_filtrados[0] if clientes_filtrados else None
def recuperar_conta_cliente(cliente):
if not cliente.contas:
print("\n@@@ Cliente não possui conta! @@@")
return
# FIXME: não permite cliente escolher a conta
return cliente.contas[0]
def depositar(clientes):
cpf = input("Informe o CPF do cliente: ")
cliente = filtrar_cliente(cpf, clientes)
if not cliente:
print("\n@@@ Cliente não encontrado! @@@")
return
valor = float(input("Informe o valor do depósito: "))
transacao = Deposito(valor)
conta = recuperar_conta_cliente(cliente)
if not conta:
return
cliente.realizar_transacao(conta, transacao)
def sacar(clientes):
cpf = input("Informe o CPF do cliente: ")
cliente = filtrar_cliente(cpf, clientes)
if not cliente:
print("\n@@@ Cliente não encontrado! @@@")
return
valor = float(input("Informe o valor do saque: "))
transacao = Saque(valor)
conta = recuperar_conta_cliente(cliente)
if not conta:
return
cliente.realizar_transacao(conta, transacao)
def exibir_extrato(clientes):
cpf = input("Informe o CPF do cliente: ")
cliente = filtrar_cliente(cpf, clientes)
if not cliente:
print("\n@@@ Cliente não encontrado! @@@")
return
conta = recuperar_conta_cliente(cliente)
if not conta:
return
print("\n================ EXTRATO ================")
transacoes = conta.historico.transacoes
extrato = ""
if not transacoes:
extrato = "Não foram realizadas movimentações."
else:
for transacao in transacoes:
extrato += f"\n{transacao['tipo']}:\n\tR$ {transacao['valor']:.2f}"
print(extrato)
print(f"\nSaldo:\n\tR$ {conta.saldo:.2f}")
print("==========================================")
def criar_cliente(clientes):
cpf = input("Informe o CPF (somente número): ")
cliente = filtrar_cliente(cpf, clientes)
if cliente:
print("\n@@@ Já existe cliente com esse CPF! @@@")
return
nome = input("Informe o nome completo: ")
data_nascimento = input("Informe a data de nascimento (dd-mm-aaaa): ")
endereco = input("Informe o endereço (logradouro, nro - bairro - cidade/sigla estado): ")
cliente = PessoaFisica(nome=nome, data_nascimento=data_nascimento, cpf=cpf, endereco=endereco)
clientes.append(cliente)
print("\n=== Cliente criado com sucesso! ===")
def criar_conta(numero_conta, clientes, contas):
cpf = input("Informe o CPF do cliente: ")
cliente = filtrar_cliente(cpf, clientes)
if not cliente:
print("\n@@@ Cliente não encontrado, fluxo de criação de conta encerrado! @@@")
return
conta = ContaCorrente.nova_conta(cliente=cliente, numero=numero_conta)
contas.append(conta)
cliente.contas.append(conta)
print("\n=== Conta criada com sucesso! ===")
def listar_contas(contas):
for conta in contas:
print("=" * 100)
print(textwrap.dedent(str(conta)))
def main():
clientes = []
contas = []
while True:
opcao = menu()
if opcao == "d":
depositar(clientes)
elif opcao == "s":
sacar(clientes)
elif opcao == "e":
exibir_extrato(clientes)
elif opcao == "nu":
criar_cliente(clientes)
elif opcao == "nc":
numero_conta = len(contas) + 1
criar_conta(numero_conta, clientes, contas)
elif opcao == "lc":
listar_contas(contas)
elif opcao == "q":
break
else:
print("\n@@@ Operação inválida, por favor selecione novamente a operação desejada. @@@")
main()
Vou te mandar o codigo. Espero que ajude
class UsuarioTelefone:
def init(self, nome, numero, plano):
self.__nome = nome
self.__numero = numero
self.__plano = plano
@property
def nome(self):
return self.__nome
@property
def numero(self):
return self.__numero
@property
def plano(self):
return self.__plano
def __str__(self):
return f"Usuário {self.nome} criado com sucesso."
Entrada:
nome = input()
numero = input()
plano = input()
Crie um novo objeto UsuarioTelefone
com os dados fornecidos:
usuario = UsuarioTelefone(nome, numero, plano)
print(usuario)
Desafio "Otimizando o Sistema Bancário com Funções Python"
import textwrap
def menu():
menu = """\n
================ MENU ================
[d]\tDepositar
[s]\tSacar
[e]\tExtrato
[nc]\tNova conta
[lc]\tListar contas
[nu]\tNovo usuário
[q]\tSair
=> """
return input(textwrap.dedent(menu))
def depositar(saldo, valor, extrato, /):
if valor > 0:
saldo += valor
extrato += f"Depósito:\tR$ {valor:.2f}\n"
print("\n=== Depósito realizado com sucesso! ===")
else:
print("\n@@@ Operação falhou! O valor informado é inválido. @@@")
return saldo, extrato
def sacar(*, saldo, valor, extrato, limite, numero_saques, limite_saques):
excedeu_saldo = valor > saldo
excedeu_limite = valor > limite
excedeu_saques = numero_saques >= limite_saques
if excedeu_saldo:
print("\n@@@ Operação falhou! Você não tem saldo suficiente. @@@")
elif excedeu_limite:
print("\n@@@ Operação falhou! O valor do saque excede o limite. @@@")
elif excedeu_saques:
print("\n@@@ Operação falhou! Número máximo de saques excedido. @@@")
elif valor > 0:
saldo -= valor
extrato += f"Saque:\t\tR$ {valor:.2f}\n"
numero_saques += 1
print("\n=== Saque realizado com sucesso! ===")
else:
print("\n@@@ Operação falhou! O valor informado é inválido. @@@")
return saldo, extrato
def exibir_extrato(saldo, /, *, extrato):
print("\n================ EXTRATO ================")
print("Não foram realizadas movimentações." if not extrato else extrato)
print(f"\nSaldo:\t\tR$ {saldo:.2f}")
print("==========================================")
def criar_usuario(usuarios):
cpf = input("Informe o CPF (somente número): ")
usuario = filtrar_usuario(cpf, usuarios)
if usuario:
print("\n@@@ Já existe usuário com esse CPF! @@@")
return
nome = input("Informe o nome completo: ")
data_nascimento = input("Informe a data de nascimento (dd-mm-aaaa): ")
endereco = input("Informe o endereço (logradouro, nro - bairro - cidade/sigla estado): ")
usuarios.append({"nome": nome, "data_nascimento": data_nascimento, "cpf": cpf, "endereco": endereco})
print("=== Usuário criado com sucesso! ===")
def filtrar_usuario(cpf, usuarios):
usuarios_filtrados = [usuario for usuario in usuarios if usuario["cpf"] == cpf]
return usuarios_filtrados[0] if usuarios_filtrados else None
def criar_conta(agencia, numero_conta, usuarios):
cpf = input("Informe o CPF do usuário: ")
usuario = filtrar_usuario(cpf, usuarios)
if usuario:
print("\n=== Conta criada com sucesso! ===")
return {"agencia": agencia, "numero_conta": numero_conta, "usuario": usuario}
print("\n@@@ Usuário não encontrado, fluxo de criação de conta encerrado! @@@")
def listar_contas(contas):
for conta in contas:
linha = f"""
Agência:\t{conta['agencia']}
C/C:\t\t{conta['numero_conta']}
Titular:\t{conta['usuario']['nome']}
"""
print("=" * 100)
print(textwrap.dedent(linha))
def main():
LIMITE_SAQUES = 3
AGENCIA = "0001"
saldo = 0
limite = 500
extrato = ""
numero_saques = 0
usuarios = []
contas = []
while True:
opcao = menu()
if opcao == "d":
valor = float(input("Informe o valor do depósito: "))
saldo, extrato = depositar(saldo, valor, extrato)
elif opcao == "s":
valor = float(input("Informe o valor do saque: "))
saldo, extrato = sacar(
saldo=saldo,
valor=valor,
extrato=extrato,
limite=limite,
numero_saques=numero_saques,
limite_saques=LIMITE_SAQUES,
)
elif opcao == "e":
exibir_extrato(saldo, extrato=extrato)
elif opcao == "nu":
criar_usuario(usuarios)
elif opcao == "nc":
numero_conta = len(contas) + 1
conta = criar_conta(AGENCIA, numero_conta, usuarios)
if conta:
contas.append(conta)
elif opcao == "lc":
listar_contas(contas)
elif opcao == "q":
break
else:
print("Operação inválida, por favor selecione novamente a operação desejada.")
main()
Comentar melhor o código do desafio
Sugiro dividir o código em partes de acordo com as funções, por exemplo:
**# ================= Função de Criar Usuário ==================== #**
def criar_usuario(usuarios):
cpf = input("Informe o CPF (somente número): ")
usuario = filtrar_usuario(cpf, usuarios)
if usuario:
print("\n@@@ Já existe usuário com esse CPF! @@@")
return
nome = input("Informe o nome completo: ")
data_nascimento = input("Informe a data de nascimento (dd-mm-aaaa): ")
endereco = input("Informe o endereço (logradouro, nro - bairro - cidade/sigla estado): ")
usuarios.append({"nome": nome, "data_nascimento": data_nascimento, "cpf": cpf, "endereco": endereco})
print("=== Usuário criado com sucesso! ===")
**# ================= Função Filtrar Usuários ==================== #**
def filtrar_usuario(cpf, usuarios):
usuarios_filtrados = [usuario for usuario in usuarios if usuario["cpf"] == cpf]
return usuarios_filtrados[0] if usuarios_filtrados else None
**# ================= Função Criar Conta ================ #**
def criar_conta(agencia, numero_conta, usuarios):
cpf = input("Informe o CPF do usuário: ")
usuario = filtrar_usuario(cpf, usuarios)
if usuario:
print("\n=== Conta criada com sucesso! ===")
return {"agencia": agencia, "numero_conta": numero_conta, "usuario": usuario}
print("\n@@@ Usuário não encontrado, fluxo de criação de conta encerrado! @@@")
**# ================= Função Lista Conta ================= #**
def listar_contas(contas):
for conta in contas:
linha = f"""\
Agência:\t{conta['agencia']}
C/C:\t\t{conta['numero_conta']}
Titular:\t{conta['usuario']['nome']}
"""
print("=" * 100)
print(textwrap.dedent(linha))
Isso ajuda na leitura e organização me determinadas IDE's como o Google Colaboratory
Desafio do projeto "Criando um sistema bancário com Python
menu = """
[d] Depositar
[s] Sacar
[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: "))
if valor > 0:
saldo += valor
extrato += f"Depósito: R$ {valor:.2f}\n"
else:
print("Operação falhou! O valor informado é inválido.")
elif opcao == "s":
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.")
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.")
sistema bancario -Dio-Python-melhoria
import textwrap
def depositar(saldo, valor, extrato):
if valor > 0:
saldo += valor
extrato += f"Depósito:\tR$ {valor:.2f}\n"
print("\n=== Depósito realizado com sucesso! ===")
else:
print("\n@@@ Operação falhou! O valor informado é inválido. @@@")
return saldo, extrato
def sacar(*, saldo, valor, extrato, limite, numero_saques, limite_saques):
excedeu_saldo = valor > saldo
excedeu_limite = valor > limite
excedeu_saques = numero_saques >= limite_saques
if excedeu_saldo:
print("\n@@@ Operação falhou! Você não tem saldo suficiente. @@@")
elif excedeu_limite:
print("\n@@@ Operação falhou! O valor do saque excede o limite. @@@")
elif excedeu_saques:
print("\n@@@ Operação falhou! Número máximo de saques excedido. @@@")
elif valor > 0:
saldo -= valor
extrato += f"Saque:\t\tR$ {valor:.2f}\n"
numero_saques += 1
print("\n=== Saque realizado com sucesso! ===")
else:
print("\n@@@ Operação falhou! O valor informado é inválido. @@@")
return saldo, extrato, numero_saques
def exibir_extrato(saldo, extrato):
print("\n================ EXTRATO ================")
if not extrato:
print("Não foram realizadas movimentações.")
else:
print(extrato)
print(f"\nSaldo:\t\tR$ {saldo:.2f}")
print("==========================================")
def criar_usuario(usuarios):
cpf = input("Informe o CPF (somente números): ")
usuario = filtrar_usuario(cpf, usuarios)
if usuario:
print("\n@@@ Já existe usuário com esse CPF! @@@")
return
nome = input("Informe o nome completo: ")
data_nascimento = input("Informe a data de nascimento (dd-mm-aaaa): ")
endereco = input("Informe o endereço (logradouro, nro - bairro - cidade/sigla estado): ")
usuarios.append({"nome": nome, "data_nascimento": data_nascimento, "cpf": cpf, "endereco": endereco})
print("=== Usuário criado com sucesso! ===")
def filtrar_usuario(cpf, usuarios):
usuarios_filtrados = [usuario for usuario in usuarios if usuario["cpf"] == cpf]
return usuarios_filtrados[0] if usuarios_filtrados else None
def criar_conta(agencia, numero_conta, usuarios):
cpf = input("Informe o CPF do usuário: ")
usuario = filtrar_usuario(cpf, usuarios)
if usuario:
print("\n=== Conta criada com sucesso! ===")
return {"agencia": agencia, "numero_conta": numero_conta, "usuario": usuario}
print("\n@@@ Usuário não encontrado, fluxo de criação de conta encerrado! @@@")
def listar_contas(contas):
for conta in contas:
linha = f"""
Agência:\t{conta['agencia']}
C/C:\t\t{conta['numero_conta']}
Titular:\t{conta['usuario']['nome']}
"""
print("=" * 100)
print(textwrap.dedent(linha))
def menu():
print("\n=== MENU ===")
print("d - Depositar")
print("s - Sacar")
print("e - Exibir Extrato")
print("nu - Novo Usuário")
print("nc - Nova Conta")
print("lc - Listar Contas")
print("q - Sair")
return input("Escolha uma opção: ").lower()
def main():
LIMITE_SAQUES = 3
AGENCIA = "0001"
saldo = 0
limite = 500
extrato = ""
numero_saques = 0
usuarios = []
contas = []
while True:
opcao = menu()
if opcao == "d":
valor = float(input("Informe o valor do depósito: "))
saldo, extrato = depositar(saldo, valor, extrato)
elif opcao == "s":
valor = float(input("Informe o valor do saque: "))
saldo, extrato, numero_saques = sacar(
saldo=saldo,
valor=valor,
extrato=extrato,
limite=limite,
numero_saques=numero_saques,
limite_saques=LIMITE_SAQUES,
)
elif opcao == "e":
exibir_extrato(saldo, extrato)
elif opcao == "nu":
criar_usuario(usuarios)
elif opcao == "nc":
numero_conta = len(contas) + 1
conta = criar_conta(AGENCIA, numero_conta, usuarios)
if conta:
contas.append(conta)
elif opcao == "lc":
listar_contas(contas)
elif opcao == "q":
break
else:
print("Operação inválida, por favor selecione novamente a operação desejada.")
main()
Desafio: Sistema Bancario
#Variáveis iniciais
saldo = 0
limite = 500
extrato = ""
numero_saques = 0
LIMITE_SAQUES = 3
#Tela de menu inicial
#Loop infinito para que o usuário possa realizar várias operações
while True:
print("BANCO XZ")
print("\n[1] Depositar")
print("[2] Sacar")
print("[3] Extrato")
print("[4] Sair")
opcao = input("Escolha uma opção: ")
if opcao == "1":
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.")
elif opcao == "2":
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! Saldo insuficiente.")
elif excedeu_limite:
print("Operação falhou! Valor do saque excede o limite.")
elif excedeu_saques:
print("Operação falhou! Número máximo de saques atingido.")
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.")
elif opcao == "3":
print("\n================ EXTRATO ================")
print("Não foram realizadas movimentações." if not extrato else extrato)
print(f"\nSaldo: R$ {saldo:.2f}")
print("==========================================")
elif opcao == "4":
break
else:
print("Opção inválida. Escolha novamente.")
Sistema Bancario
Entrega sistema bancario POO
segundo desafio banco
segundo desafio criando um sitema bancário
desafio banco aprimorado
def menu():
menu = """\n
================ MENU ================
[1]Depositar
[2]Sacar
[3]Extrato
[4]Novo usuário
[5]Nova conta
[6]Sair
=> """
return input((menu))
def depositar(saldo, valor, extrato, /):
if valor > 0:
saldo += valor
extrato += f"Depósito:\tR$ {valor:.2f}\n"
print("\n=== Depósito realizado com sucesso! ===")
else:
print("\n O valor informado é inválido.")
return saldo, extrato
def sacar(*, saldo, valor, extrato, limite, numero_saques, limite_saques):
excedeu_saldo = valor > saldo
excedeu_limite = valor > limite
excedeu_saques = numero_saques >= limite_saques
if excedeu_saldo:
print("\n saldo insuficiente.")
elif excedeu_limite:
print("\n valor de saque diário excedido.")
elif excedeu_saques:
print("\nNúmero máximo de saques excedido.")
elif valor > 0:
saldo -= valor
extrato += f"Saque:\t\tR$ {valor:.2f}\n"
numero_saques += 1
print("\nSaque realizado com sucesso!!!")
else:
print("\n O valor informado é inválido.")
return saldo, extrato
def exibir_extrato(saldo, /, *, extrato):
print("\n================ EXTRATO ================")
print("Não foram realizadas movimentações." if not extrato else extrato)
print(f"\nSaldo: R$ {saldo:.2f}")
print("==========================================")
def criar_usuario(usuarios):
cpf = input("Informe o CPF (somente número): ")
usuario = filtrar_usuario(cpf, usuarios)
if usuario:
print("\n usuário já cadastrado")
return
nome = input("Informe o nome completo: ")
data_nascimento = input("Informe a data de nascimento (dd-mm-aaaa): ")
endereco = input("Informe o endereço (logradouro, nro - bairro - cidade/sigla estado): ")
usuarios.append({"nome": nome, "data_nascimento": data_nascimento, "cpf": cpf, "endereco": endereco})
print(" Usuário criado com sucesso!")
def filtrar_usuario(cpf, usuarios):
usuarios_filtrados = [usuario for usuario in usuarios if usuario["cpf"] == cpf]
return usuarios_filtrados[0] if usuarios_filtrados else None
def criar_conta(agencia, numero_conta, usuarios):
cpf = input("Informe o CPF do usuário: ")
usuario = filtrar_usuario(cpf, usuarios)
if usuario:
print("\n=== Conta criada com sucesso! ===")
return {"agencia": agencia, "numero_conta": numero_conta, "usuario": usuario}
print("\nUsuário não encontrado!")
def main():
LIMITE_SAQUES = 3
AGENCIA = "0001"
saldo = 0
limite = 500
extrato = ""
numero_saques = 0
usuarios = []
contas = []
while True:
opcao = menu()
if opcao == "1":
valor = float(input("Informe o valor do depósito: "))
saldo, extrato = depositar(saldo, valor, extrato)
elif opcao == "2":
valor = float(input("Informe o valor do saque: "))
saldo, extrato = sacar(
saldo=saldo,
valor=valor,
extrato=extrato,
limite=limite,
numero_saques=numero_saques,
limite_saques=LIMITE_SAQUES,
)
elif opcao == "3":
exibir_extrato(saldo, extrato=extrato)
elif opcao == "4":
criar_usuario(usuarios)
elif opcao == "5":
numero_conta = len(contas) + 1
conta = criar_conta(AGENCIA, numero_conta, usuarios)
if conta:
contas.append(conta)
elif opcao == "6":
break
else:
print("Operação inválida, por favor selecione novamente a operação desejada.")
main()
numero_saques não esta sendo alimentado no código.
Ao realizar testes no meu código para entregar no projeto, verifiquei que minha variável "numero_saques" não estava sendo alimentada no programa e consequentemente poderia fazer a quantidade de saques que quisesse. Ao conferir este código, vi que também esta assim.
Segue correção que encontrei para solucionar esta situação:
1º - Adicionar o parametro (numero_saques) no return da função sacar:
return saldo, extrato, numero_saques
2º - Adicionar a chamada (numero_saques) na função main no bloco da opção correspondente ao saque "s":
saldo, extrato, numero_saques = sacar( saldo=saldo, valor=valor, extrato=extrato, limite=limite, numero_saques=numero_saques, limite_saques=LIMITE_SAQUES, )
Desafio - Otimizando o Sistema Bancário
import textwrap
def menu():
menu = """
============ MENU ===========
[1] Depositar
[2] Sacar
[3] Extrato
[4] Nova conta
[5] Listar contas
[6] Novo usuário
[0] Sair
"""
return input(textwrap.dedent(menu))
def depositar(saldo, valor, extrato):
if valor > 0:
saldo += valor
extrato += f"Depósito:\tR$ {valor:.2f}\n"
print("\n**** Depósito realizado com sucesso! ****")
else:
print("\n### Operação falhou! O valor informado é inválido. ###")
return saldo, extrato
def sacar(*, saldo, valor, extrato, limite, numero_saques, limite_saques):
excedeu_saldo = valor > saldo
excedeu_limite = valor > limite
excedeu_saques = numero_saques > limite_saques
if excedeu_saldo:
print("\n**** Operação falhou! Você não tem saldo suficiente. ****")
elif excedeu_limite:
print("\n&&&& Operação falhou! O valor do saque excedeu o limite. &&&&")
elif excedeu_saques:
print("\n@@@ Operação falhou! Número máximo de saques excedido. @@@")
elif valor > 0:
saldo -= valor
extrato += f"Saque:\t\tR$ {valor:.2f}\n"
numero_saques += 1
print("\n%%%% Saque realizado com sucesso! %%%%")
else:
print("\n#### Operação falhou! O valor informado é inválido. ####")
return saldo, extrato
def exibir_extrato(saldo, /, *, extrato):
print("\n============= EXTRATO ================")
print("Não foram realizados movimentações." if not extrato else extrato)
print(f"\nSaldo:\t\tR$ {saldo:.2f}")
print("==================================")
def criar_usuario(usuarios):
cpf = input("Informe o CPF (somente número): ")
usuario = filtrar_usuario(cpf, usuarios)
if usuario:
print("\n===Já existe usuário com esse CPF!===")
return
nome = input("Informe o nome completo: ")
data_nascimento = input("Informe a data de nascimento (dd-mm-aaaa): ")
endereco = input("Informe o endereço (lograduro, nro - bairro - cidade/sigla estado): ")
usuarios.append({"nome": nome, "data_nascimento": data_nascimento, "cpf": cpf, "endereco": endereco})
print("===Usuário criado com sucesso!===")
def filtrar_usuario(cpf, usuarios):
usuarios_filtrados = [usuario for usuario in usuarios if usuario["cpf"] == cpf]
return usuarios_filtrados[0] if usuarios_filtrados else None
def criar_conta(agencia, numero_conta, usuarios):
cpf = input("Informe o CPF do usuário: ")
usuario = filtrar_usuario(cpf, usuarios)
if usuario:
print("\n=== Conta criada com sucesso! ===")
return {"agencia": agencia, "numero_conta": numero_conta, "usuario": usuario}
print("\n# Usuário não encontrado, fluxo de criação de conta encerrado! #")
def listar_contas(contas):
for conta in contas:
linha = f"""
Agência:\t{conta['agencia']}
C/C:\t\t{conta['numero_conta']}
Titular:\t{conta['usuario']['nome']}
"""
print("=" * 100)
print(textwrap.dedent(linha))
def main():
LIMITE_SAQUES = 3
AGENCIA = "0001"
saldo = 0
limite = 500
extrato = ""
numero_saques = 0
usuarios = []
contas = []
while True:
opcao = menu()
if opcao == "1":
valor = float(input("Informe o valor do depósito: "))
saldo, extrato = depositar(saldo, valor, extrato)
elif opcao == "2":
valor = float(input("Informe o valor do saque: "))
saldo, extrato = sacar(
saldo=saldo,
valor=valor,
extrato=extrato,
limite=limite,
numero_saques=numero_saques,
limite_saques=LIMITE_SAQUES,
)
elif opcao == "3":
exibir_extrato(saldo, extrato=extrato)
elif opcao == "6":
criar_usuario(usuarios)
elif opcao == "4":
numero_conta = len(contas) + 1
conta = criar_conta(AGENCIA, numero_conta, usuarios)
if conta:
contas.append(conta)
elif opcao == "5":
listar_contas(contas)
elif opcao == "0":
break
else:
print("Operação inválido, por favor selecione novamente a operação desejada.")
main()
desafio 2 - Otimizando um sistema bancário com python
importar data e hora importar quebra de texto importar re
menu = """ [d] Depositar [s] Sair [e] Extrair [nu] Novo Usuário [nc] Nova Conta [lc] Listar Contas [q] Sair => """
class Conta: def init (self, agência, numero_conta, usuário): self.agencia = agência self.numero_conta = numero_conta self.usuario = usuário self.saldo = 0 self.limite = 500 self.extrato = [] self.numero_saques = 0 self.LIMITE_SAQUES = 3
def depositar(self): valor = float(input("Informe o valor do depósito: ")) if valor > 0: self.saldo += valor self.extrato.append((datetime.datetime.now(), "Depósito", valor)) print("\n=== Depósito realizado com sucesso! ===") else: print("\n@@@ Operação falhou! O valor informado é inválido. @@@")
def sacar(self):
valor = float(input("Informe o valor do saque: "))
excedeu_saldo = valor > self.saldo
excedeu_limite = valor > self.limite
excedeu_saques = self.numero_saques >= self.LIMITE_SAQUES
if excedeu_saldo:
print("\n@@@ Operação falhou! Você não tem saldo suficiente. @@@")
elif excedeu_limite:
print("\n@@@ Operação falhou! O valor do saque excedeu o limite. @@@")
elif excedeu_saques:
print("\n@@@ Operação falhou! Número máximo de saques excedidos. @@@")
elif valor > 0:
self.saldo -= valor
self.extrato.append((datetime.datetime.now(), "Saque", valor))
self.numero_saques += 1
print("\n=== Saque realizado com sucesso! ===")
else:
print("\n@@@ Operação falhou! O valor informado é inválido. @@@")
def exibir_extrato(self):
print("\n================ EXTRATO ================")
if not self.extrato:
print("Não foram realizadas movimentações.")
else:
for data, operacao, valor in self.extrato:
print(f"{data.strftime('%d/%m/%Y %H:%M:%S')} - {operacao}: R$ {valor:.2f}")
print(f"\nSaldo:\t\tR$ {self.saldo:.2f}")
print("==========================================")
def criar_usuario(usuários): cpf = input("Informe o CPF (alguns números): ") usuario = filtrar_usuario(cpf, usuarios)
if usuário: print("\n@@@ Já existe usuário com esse CPF! @@@") return
nome = input("Informe o nome completo: ") data_nascimento = input("Informe a data de nascimento (dd-mm-aaaa): ") endereco = input("Informe o endereço (logradouro, nro - bairro - cidade/sigla estado): ")
usuarios.append( { "nome": nome, "data_nascimento": data_nascimento, "cpf": cpf, "endereco": endereco, } ) print("=== Usuário criado com sucesso! ===")
def filtrar_usuario(cpf, usuarios): usuarios_filtrados = [usuario para usuario em usuarios if usuario["cpf"] == cpf] return usuarios_filtrados[0] if usuarios_filtrados else Nenhum
def criar_conta(agencia, numero_conta, usuários): cpf = input("Informe o CPF do usuário: ") usuário = filtrar_usuario(cpf, usuários)
if usuário: print("\n=== Conta criada com sucesso! ===") return { "agencia": agencia, "numero_conta": numero_conta, "usuario": usuario, }
print("\n@@@ Usuário não encontrado, fluxo de criação de conta encerrado! @@@") return None # Retorna None se o usuário não for encontrado
def listar_contas(contas): for conta em contas: linha = f""" Agência:\t{conta['agencia']} C/C:\t\t{conta['numero_conta']} Titular:\t{conta['usuario']['nome']} """ print("=" * 100) print(textwrap.dedent(linha))
def main():
LIMITE_SAQUES = 3
AGENCIA = "0001"
usuarios = []
contas = []
while True:
opcao = input(menu)
if opcao == "d":
cpf = input("Informe o CPF do titular da conta: ")
conta = filtrar_usuario(cpf, contas)
if conta:
conta.depositar() # Chama o método depositar da instância da conta
else:
print("\n@@@ Conta não encontrada! @@@")
elif opcao == "s":
cpf = input("Informe o CPF do titular da conta: ")
conta = filtrar_usuario(cpf, contas)
if conta:
conta.sacar() # Chama o método sacar da instância da conta
else:
print("\n@@@ Conta não encontrada! @@@")
elif opcao == "e":
cpf = input("Informe o CPF do titular da conta: ")
conta = filtrar_usuario(cpf, contas)
if conta:
conta.exibir_extrato() # Chama o método exibir_extrato da instância da conta
else:
print("\n@@@ Conta não encontrada! @@@")
elif opcao == "nu":
criar_usuario(usuarios)
elif opcao == "nc":
numero_conta = len(contas) + 1
conta = criar_conta(AGENCIA, numero_conta, usuarios)
if conta:
contas.append(conta)
elif opcao == "lc":
listar_contas(contas)
elif opcao == "q":
break
else:
print("Operação inválida, por favor selecione novamente a operação desejada.")
if nome == " principal ": main()
aa
Operadores de comparação
adicionei informações que podem ser importantes principalmente para quem está começando (igual eu), no código:
saldo = 200 # valor do saldo
saque = 200 # valor do saque
print("Igualdade ", saldo == saque) # Verifica se o saldo é igual ao saque
print("Diferença ", saldo != saque) # Verifica se o saldo é diferente do saque
print("Maior que ", saldo > saque) # Verifica se o saldo é maior que o saque
print("Maior ou igual ", saldo >= saque) # Verifica se o saldo é maior ou igual ao saque
print("Menor que ", saldo < saque) # Verifica se o saldo é menor que o saque
print("Menor ou igual ", saldo <= saque) # Verifica se o saldo é menor ou igual ao saque
Desafio V1- Modelando o Sistema Bancário em POO com Python
DESAFIO DIO
-
Uso de classes abstratas: A utilização de classes abstratas Transação e Cliente permite a criação de subclasses específicas (como Saque, Deposito, PessoaFisica) com herança, promovendo organização e reuso de código.
-
Propriedades e métodos bem definidos: As propriedades (saldo, numero, agencia, etc.) e métodos (sacar, depositar, registrar) possuem descrições claras e estão bem implementados.
from abc import ABC, abstractclassmethod, abstractproperty
from datetime import datetime
class Cliente:
def __init__(self, endereco):
self.endereco = endereco
self.contas = []
def realizar_transacao(self, conta, transacao):
transacao.registrar(conta)
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
self._numero = numero
self._agencia = "0001"
self._cliente = cliente
self._historico = Historico()
@classmethod
def nova_conta(cls, cliente, numero):
return cls(numero, cliente)
@property
def saldo(self):
return self._saldo
@property
def numero(self):
return self._numero
@property
def agencia(self):
return self._agencia
@property
def cliente(self):
return self._cliente
@property
def historico(self):
return self._historico
def sacar(self, valor):
saldo = self.saldo
excedeu_saldo = valor > saldo
if excedeu_saldo:
print("\n@@@ Operação falhou! Você não tem saldo suficiente. @@@")
elif valor > 0:
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! ===")
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
if excedeu_limite:
print("\n@@@ Operação falhou! O valor do saque excede o limite. @@@")
elif excedeu_saques:
print("\n@@@ Operação falhou! Número máximo de saques excedido. @@@")
else:
return super().sacar(valor)
return False
def __str__(self):
return f"""\
Agência:\t{self.agencia}
C/C:\t\t{self.numero}
Titular:\t{self.cliente.nome}
"""
class Historico:
def __init__(self):
self._transacoes = []
@property
def transacoes(self):
return self._transacoes
def adicionar_transacao(self, transacao):
self._transacoes.append(
{
"tipo": transacao.__class__.__name__,
"valor": transacao.valor,
"data": datetime.now().strftime("%d-%m-%Y %H:%M:%s"),
}
)
class Transacao(ABC):
@property
@abstractproperty
def valor(self):
pass
@abstractclassmethod
def registrar(self, conta):
pass
class Saque(Transacao):
def __init__(self, valor):
self._valor = valor
@property
def valor(self):
return self._valor
def registrar(self, conta):
sucesso_transacao = conta.sacar(self.valor)
if sucesso_transacao:
conta.historico.adicionar_transacao(self)
class Deposito(Transacao):
def __init__(self, valor):
self._valor = valor
@property
def valor(self):
return self._valor
def registrar(self, conta):
sucesso_transacao = conta.depositar(self.valor)
if sucesso_transacao:
conta.historico.adicionar_transacao(self)
Desafio Bancário com PYTHON- Entregando projeto.
menu = """
[d]Depositar
[s]Sacar
[e]Extrato
[q]Sair
=> """
saldo=0
limite= 500
extrato= ""
numero_saque= 0
LIMITE_SAQUE=3
while True:
opcao=input(menu)
if opcao== "d":
valor= float(input("Qual o valor que deseja depositar?"))
if valor > 0:
saldo += valor
extrato += f"Deposito: R${valor:.2f}\n"
else:
print("Operação falhou: o valor informado é inválido ")
elif opcao== "s":
valor = float(input("Qual o valor do saque?"))
excedeu_saldo = valor > saldo
excedeu_limite = valor > limite
excedeu_saques= numero_saque >= LIMITE_SAQUE
if excedeu_saldo:
print("Operação falhou! você não tem saldo sulficiente.")
elif excedeu_limite:
print("Operação falhou, o valor do saque excede o limite!")
elif excedeu_saques:
print("Operação falhou! Numero máximo de saques excedido.")
elif valor>0:
saldo -= valor
extrato += f"Saque: R$ {valor:.2f}\n"
numero_saque += 1
else:
print("Operação falhou, valor inserido inválido.")
elif opcao=="e":
print("\n================EXTRATO================")
print(" Não foram realizada 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 selacione novamente a operação desejada.")
Extrato
menu = """
[d] Depositar
[s] Sacar
[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: ")) if valor > 0: saldo += valor extrato += f"Depósito: R$ {valor:.2f}\n" else: print("Operação falhou! O valor informado é inválido.") elif opcao == "s": 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úmeros 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! Ovalor informado é inválido.") 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 selecionenovamente a operação desejada.")
Explorando POO com Python 1 / 3 - Criando uma Classe de Usuário
Boa tarde .
Alguem tem a resolução desse desafio ?
Não estou conseguindo resolver ...
Vamos criar uma classe chamada UsuarioTelefone para representar um usuário de telefone. Você pode definir um método especial e depois aplicar conceitos de encapsulamento nos atributos dentro da classe. Lembre-se que, cada usuário terá um nome, um número de telefone e um plano associado, neste desafio, simulamos três planos, sendo: Plano Essencial Fibra, Plano Prata Fibra e Plano Premium Fibra.
Entrada
Nome do usuário, número de telefone e plano.
Saída
Mensagem indicando que o usuário foi criado com sucesso.
Entrada | Saída
Ana(11) 91111-1111 Usuário Ana criado com sucesso.
Plano Essencial Fibra |
Sofia(22) 92222-2222 Usuário Ana criado com sucesso.
Plano Prata Fibra
Pedro(33) 93333-3333 Usuário Ana criado com sucesso.
Plano Premium Fibra
TODO: Crie uma classe UsuarioTelefone.
TODO: Defina um método especial __init__
, que é o construtor da classe.
O método __init__
, irá inicializar os atributos da classe: nome
, numero
e plano
.
# TODO: Aplique o conceito de encapsulamento, onde os atributos serão encapsulados dentro da classe.
# A classe `UsuarioTelefone` define um método especial `__str__`, que retorna uma representação em string do objeto.
def __str__(self):
return f"Usuário {self.nome} criado com sucesso."
Entrada:
nome = input()
numero = input()
plano = input()
TODO: Crie um novo objeto UsuarioTelefone
com os dados fornecidos:
print(usuario)
Desafio V2- Modelando o Sistema Bancário em POO com Python
DESAFIO DIO
-
Classes Abstratas: A utilização de classes abstratas Transação e Cliente permite a criação de subclasses específicas (como Saque, Deposito, PessoaFisica) com herança, promovendo organização e reuso de código.
-
Encapsulamento: Os dados privados das classes são encapsulados utilizando o underline (_) na frente dos atributos, seguindo boas práticas de programação.
-
Propriedades e métodos bem definidos: As propriedades (saldo, numero, agencia, etc.) e métodos (sacar, depositar, registrar) possuem descrições claras e estão bem implementados.
import textwrap
from abc import ABC, abstractclassmethod, abstractproperty
from datetime import datetime
class Cliente:
def __init__(self, endereco):
self.endereco = endereco
self.contas = []
def realizar_transacao(self, conta, transacao):
transacao.registrar(conta)
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
self._numero = numero
self._agencia = "0001"
self._cliente = cliente
self._historico = Historico()
@classmethod
def nova_conta(cls, cliente, numero):
return cls(numero, cliente)
@property
def saldo(self):
return self._saldo
@property
def numero(self):
return self._numero
@property
def agencia(self):
return self._agencia
@property
def cliente(self):
return self._cliente
@property
def historico(self):
return self._historico
def sacar(self, valor):
saldo = self.saldo
excedeu_saldo = valor > saldo
if excedeu_saldo:
print("\n@@@ Operação falhou! Você não tem saldo suficiente. @@@")
elif valor > 0:
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! ===")
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
if excedeu_limite:
print("\n@@@ Operação falhou! O valor do saque excede o limite. @@@")
elif excedeu_saques:
print("\n@@@ Operação falhou! Número máximo de saques excedido. @@@")
else:
return super().sacar(valor)
return False
def __str__(self):
return f"""\
Agência:\t{self.agencia}
C/C:\t\t{self.numero}
Titular:\t{self.cliente.nome}
"""
class Historico:
def __init__(self):
self._transacoes = []
@property
def transacoes(self):
return self._transacoes
def adicionar_transacao(self, transacao):
self._transacoes.append(
{
"tipo": transacao.__class__.__name__,
"valor": transacao.valor,
"data": datetime.now().strftime("%d-%m-%Y %H:%M:%s"),
}
)
class Transacao(ABC):
@property
@abstractproperty
def valor(self):
pass
@abstractclassmethod
def registrar(self, conta):
pass
class Saque(Transacao):
def __init__(self, valor):
self._valor = valor
@property
def valor(self):
return self._valor
def registrar(self, conta):
sucesso_transacao = conta.sacar(self.valor)
if sucesso_transacao:
conta.historico.adicionar_transacao(self)
class Deposito(Transacao):
def __init__(self, valor):
self._valor = valor
@property
def valor(self):
return self._valor
def registrar(self, conta):
sucesso_transacao = conta.depositar(self.valor)
if sucesso_transacao:
conta.historico.adicionar_transacao(self)
def menu():
menu = """\n
================ MENU ================
[d]\tDepositar
[s]\tSacar
[e]\tExtrato
[nc]\tNova conta
[lc]\tListar contas
[nu]\tNovo usuário
[q]\tSair
=> """
return input(textwrap.dedent(menu))
def filtrar_cliente(cpf, clientes):
clientes_filtrados = [cliente for cliente in clientes if cliente.cpf == cpf]
return clientes_filtrados[0] if clientes_filtrados else None
def recuperar_conta_cliente(cliente):
if not cliente.contas:
print("\n@@@ Cliente não possui conta! @@@")
return
# FIXME: não permite cliente escolher a conta
return cliente.contas[0]
def depositar(clientes):
cpf = input("Informe o CPF do cliente: ")
cliente = filtrar_cliente(cpf, clientes)
if not cliente:
print("\n@@@ Cliente não encontrado! @@@")
return
valor = float(input("Informe o valor do depósito: "))
transacao = Deposito(valor)
conta = recuperar_conta_cliente(cliente)
if not conta:
return
cliente.realizar_transacao(conta, transacao)
def sacar(clientes):
cpf = input("Informe o CPF do cliente: ")
cliente = filtrar_cliente(cpf, clientes)
if not cliente:
print("\n@@@ Cliente não encontrado! @@@")
return
valor = float(input("Informe o valor do saque: "))
transacao = Saque(valor)
conta = recuperar_conta_cliente(cliente)
if not conta:
return
cliente.realizar_transacao(conta, transacao)
def exibir_extrato(clientes):
cpf = input("Informe o CPF do cliente: ")
cliente = filtrar_cliente(cpf, clientes)
if not cliente:
print("\n@@@ Cliente não encontrado! @@@")
return
conta = recuperar_conta_cliente(cliente)
if not conta:
return
print("\n================ EXTRATO ================")
transacoes = conta.historico.transacoes
extrato = ""
if not transacoes:
extrato = "Não foram realizadas movimentações."
else:
for transacao in transacoes:
extrato += f"\n{transacao['tipo']}:\n\tR$ {transacao['valor']:.2f}"
print(extrato)
print(f"\nSaldo:\n\tR$ {conta.saldo:.2f}")
print("==========================================")
def criar_cliente(clientes):
cpf = input("Informe o CPF (somente número): ")
cliente = filtrar_cliente(cpf, clientes)
if cliente:
print("\n@@@ Já existe cliente com esse CPF! @@@")
return
nome = input("Informe o nome completo: ")
data_nascimento = input("Informe a data de nascimento (dd-mm-aaaa): ")
endereco = input("Informe o endereço (logradouro, nro - bairro - cidade/sigla estado): ")
cliente = PessoaFisica(nome=nome, data_nascimento=data_nascimento, cpf=cpf, endereco=endereco)
clientes.append(cliente)
print("\n=== Cliente criado com sucesso! ===")
def criar_conta(numero_conta, clientes, contas):
cpf = input("Informe o CPF do cliente: ")
cliente = filtrar_cliente(cpf, clientes)
if not cliente:
print("\n@@@ Cliente não encontrado, fluxo de criação de conta encerrado! @@@")
return
conta = ContaCorrente.nova_conta(cliente=cliente, numero=numero_conta)
contas.append(conta)
cliente.contas.append(conta)
print("\n=== Conta criada com sucesso! ===")
def listar_contas(contas):
for conta in contas:
print("=" * 100)
print(textwrap.dedent(str(conta)))
def main():
clientes = []
contas = []
while True:
opcao = menu()
if opcao == "d":
depositar(clientes)
elif opcao == "s":
sacar(clientes)
elif opcao == "e":
exibir_extrato(clientes)
elif opcao == "nu":
criar_cliente(clientes)
elif opcao == "nc":
numero_conta = len(contas) + 1
criar_conta(numero_conta, clientes, contas)
elif opcao == "lc":
listar_contas(contas)
elif opcao == "q":
break
else:
print("\n@@@ Operação inválida, por favor selecione novamente a operação desejada. @@@")
main()
Criando um Sistema Bancário com Python - **Alterando enquanto aprendo**
saldo = 0
limite = 500
extrato = ""
numero_saques = 0
LIMITE_SAQUES = 3
#Contas cadastradas no Sistema: Joao:234 e Maria:432
print("Olá, Seja Bem-Vindo(a)")
while True:
print("Por favor, insira o codigo de sua conta")
conta = input()
if conta == "234":
print("Como vai, Joao? Deseja ver seu Saldo")
saldo = 5000
verificar = input().upper()
if verificar == ("S"):
print(f"Seu saldo e de {saldo}")
break
elif conta == "432":
print("Como vai, Maria? Deseja ver seu Saldo")
saldo = 1200
verificar = input("").upper()
if verificar == ("S"):
print (f"Seu saldo e de {saldo}")
break
else:
print("Conta não encontrada.")
menu = """
[d] Depositar
[s] Sacar
[e] Extrato
[q] Sair
=> """
while True:
opcao = input(menu)
if opcao == "d":
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.")
elif opcao == "s":
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.")
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.")
criação de sistema de pagamento
criado e alterado um sistema de pagamento
Obrigado por disponibilizar o Conteúdo.
Olá estou fazendo o Bootcamp de Formação Python e gostaria agradecer por disponibilizar este conteúdo.
att byttencourt
facanha:adicionar sistema bancário v1
sistema bancario 2
import textwrap
def depositar(saldo, valor, extrato):
if valor > 0:
saldo += valor
extrato += f"Depósito:\tR$ {valor:.2f}\n"
print("\n=== Depósito realizado com sucesso! ===")
else:
print("\n@@@ Operação falhou! O valor informado é inválido. @@@")
return saldo, extrato
def sacar(*, saldo, valor, extrato, limite, numero_saques, limite_saques):
excedeu_saldo = valor > saldo
excedeu_limite = valor > limite
excedeu_saques = numero_saques >= limite_saques
if excedeu_saldo:
print("\n@@@ Operação falhou! Você não tem saldo suficiente. @@@")
elif excedeu_limite:
print("\n@@@ Operação falhou! O valor do saque excede o limite. @@@")
elif excedeu_saques:
print("\n@@@ Operação falhou! Número máximo de saques excedido. @@@")
elif valor > 0:
saldo -= valor
extrato += f"Saque:\t\tR$ {valor:.2f}\n"
numero_saques += 1
print("\n=== Saque realizado com sucesso! ===")
else:
print("\n@@@ Operação falhou! O valor informado é inválido. @@@")
return saldo, extrato, numero_saques
def exibir_extrato(saldo, extrato):
print("\n================ EXTRATO ================")
if not extrato:
print("Não foram realizadas movimentações.")
else:
print(extrato)
print(f"\nSaldo:\t\tR$ {saldo:.2f}")
print("==========================================")
def criar_usuario(usuarios):
cpf = input("Informe o CPF (somente números): ")
usuario = filtrar_usuario(cpf, usuarios)
if usuario:
print("\n@@@ Já existe usuário com esse CPF! @@@")
return
nome = input("Informe o nome completo: ")
data_nascimento = input("Informe a data de nascimento (dd-mm-aaaa): ")
endereco = input("Informe o endereço (logradouro, nro - bairro - cidade/sigla estado): ")
usuarios.append({"nome": nome, "data_nascimento": data_nascimento, "cpf": cpf, "endereco": endereco})
print("=== Usuário criado com sucesso! ===")
def filtrar_usuario(cpf, usuarios):
usuarios_filtrados = [usuario for usuario in usuarios if usuario["cpf"] == cpf]
return usuarios_filtrados[0] if usuarios_filtrados else None
def criar_conta(agencia, numero_conta, usuarios):
cpf = input("Informe o CPF do usuário: ")
usuario = filtrar_usuario(cpf, usuarios)
if usuario:
print("\n=== Conta criada com sucesso! ===")
return {"agencia": agencia, "numero_conta": numero_conta, "usuario": usuario}
print("\n@@@ Usuário não encontrado, fluxo de criação de conta encerrado! @@@")
def listar_contas(contas):
for conta in contas:
linha = f"""
Agência:\t{conta['agencia']}
C/C:\t\t{conta['numero_conta']}
Titular:\t{conta['usuario']['nome']}
"""
print("=" * 100)
print(textwrap.dedent(linha))
def menu():
print("\n=== MENU ===")
print("d - Depositar")
print("s - Sacar")
print("e - Exibir Extrato")
print("nu - Novo Usuário")
print("nc - Nova Conta")
print("lc - Listar Contas")
print("q - Sair")
return input("Escolha uma opção: ").lower()
def main():
LIMITE_SAQUES = 3
AGENCIA = "0001"
saldo = 0
limite = 500
extrato = ""
numero_saques = 0
usuarios = []
contas = []
while True:
opcao = menu()
if opcao == "d":
valor = float(input("Informe o valor do depósito: "))
saldo, extrato = depositar(saldo, valor, extrato)
elif opcao == "s":
valor = float(input("Informe o valor do saque: "))
saldo, extrato, numero_saques = sacar(
saldo=saldo,
valor=valor,
extrato=extrato,
limite=limite,
numero_saques=numero_saques,
limite_saques=LIMITE_SAQUES,
)
elif opcao == "e":
exibir_extrato(saldo, extrato)
elif opcao == "nu":
criar_usuario(usuarios)
elif opcao == "nc":
numero_conta = len(contas) + 1
conta = criar_conta(AGENCIA, numero_conta, usuarios)
if conta:
contas.append(conta)
elif opcao == "lc":
listar_contas(contas)
elif opcao == "q":
break
else:
print("Operação inválida, por favor selecione novamente a operação desejada.")
Entrega de Desafio - Sistema Bancário
from datetime import datetime
menu = """
[d] Depositar
[s] Sacar
[e] Extrato
[a] Alterar Senha
[q] Sair
=> """
def formatar_extrato(extrato):
return "\n".join([f"{transacao['data']} - {transacao['descricao']}: R$ {transacao['valor']:.2f}" for transacao in extrato])
saldo = 0
limite = 500
extrato = []
numero_saques = 0
LIMITE_SAQUES = 3
nome = input("Por favor, informe seu nome: ")
senha = input("Crie uma senha para sua conta: ")
print(f"Bem-vindo ao Banco Python, {nome}!")
while True:
opcao = input(menu).lower().strip()
if opcao == "d":
try:
valor = float(input("Informe o valor do depósito: R$ "))
if valor > 0:
saldo += valor
extrato.append({"data": datetime.now().strftime("%d/%m/%Y %H:%M:%S"), "descricao": "Depósito", "valor": valor})
print(f"Depósito de R$ {valor:.2f} realizado com sucesso, {nome}!")
else:
print("Operação falhou! O valor informado é inválido.")
except ValueError:
print("Operação falhou! Por favor, insira um valor numérico válido.")
elif opcao == "s":
try:
senha_informada = input("Digite sua senha: ")
if senha_informada != senha:
print("Senha incorreta! Operação não autorizada.")
continue
valor = float(input("Informe o valor do saque: R$ "))
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.append({"data": datetime.now().strftime("%d/%m/%Y %H:%M:%S"), "descricao": "Saque", "valor": valor})
numero_saques += 1
print(f"Saque de R$ {valor:.2f} realizado com sucesso, {nome}!")
else:
print("Operação falhou! O valor informado é inválido.")
except ValueError:
print("Operação falhou! Por favor, insira um valor numérico válido.")
elif opcao == "e":
senha_informada = input("Digite sua senha: ")
if senha_informada != senha:
print("Senha incorreta! Operação não autorizada.")
continue
print("\n================ EXTRATO ================")
if not extrato:
print("Não foram realizadas movimentações.")
else:
print(formatar_extrato(extrato))
print(f"\nSaldo: R$ {saldo:.2f}")
print("==========================================")
elif opcao == "a":
senha_informada = input("Digite sua senha atual: ")
if senha_informada == senha:
nova_senha = input("Digite sua nova senha: ")
senha = nova_senha
print("Senha alterada com sucesso!")
else:
print("Senha incorreta! Operação não autorizada.")
elif opcao == "q":
print(f"Obrigado por usar o Banco Python, {nome}. Até logo!")
break
else:
print("Operação inválida, por favor selecione novamente a operação desejada.")
Desafio dio
Entrega de desafio
Desafio 1
from abc import ABC, abstractclassmethod, abstractproperty
from datetime import datetime
class Cliente:
def init(self, endereco):
self.endereco = endereco
self.contas = []
def realizar_transacao(self, conta, transacao):
transacao.registrar(conta)
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
self._numero = numero
self._agencia = "0001"
self._cliente = cliente
self._historico = Historico()
@classmethod
def nova_conta(cls, cliente, numero):
return cls(numero, cliente)
@property
def saldo(self):
return self._saldo
@property
def numero(self):
return self._numero
@property
def agencia(self):
return self._agencia
@property
def cliente(self):
return self._cliente
@property
def historico(self):
return self._historico
def sacar(self, valor):
saldo = self.saldo
excedeu_saldo = valor > saldo
if excedeu_saldo:
print("\n@@@ Saldo insuficiente. @@@")
elif valor > 0:
self._saldo -= valor
print("\n=== Saque realizado com sucesso! ===")
return True
else:
print("\n@@@ Operação falhou! O valor digitado é inválido. @@@")
return False
def depositar(self, valor):
if valor > 0:
self._saldo += valor
print("\n=== Depósito realizado com sucesso! ===")
else:
print("\n@@@ Operação falhou! O valor digitado é 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
if excedeu_limite:
print("\n@@@ Operação falhou! O valor do saque excedeu o limite. @@@")
elif excedeu_saques:
print("\n@@@ Operação falhou! Número máximo de saques excedido. @@@")
else:
return super().sacar(valor)
return False
def __str__(self):
return f"""\
Agência:\t{self.agencia}
C/C:\t\t{self.numero}
Titular:\t{self.cliente.nome}
"""
class Historico:
def init(self):
self._transacoes = []
@property
def transacoes(self):
return self._transacoes
def adicionar_transacao(self, transacao):
self._transacoes.append(
{
"tipo": transacao.__class__.__name__,
"valor": transacao.valor,
"data": datetime.now().strftime("%d-%m-%Y %H:%M:%s"),
}
)
class Transacao(ABC):
@Property
@abstractproperty
def valor(self):
pass
@abstractclassmethod
def registrar(self, conta):
pass
class Saque(Transacao):
def init(self, valor):
self._valor = valor
@property
def valor(self):
return self._valor
def registrar(self, conta):
sucesso_transacao = conta.sacar(self.valor)
if sucesso_transacao:
conta.historico.adicionar_transacao(self)
class Deposito(Transacao):
def init(self, valor):
self._valor = valor
@property
def valor(self):
return self._valor
def registrar(self, conta):
sucesso_transacao = conta.depositar(self.valor)
if sucesso_transacao:
conta.historico.adicionar_transacao(self)
Correção
no desafio V_2. ao compilar, a função de depósito apresenta alguns erros. Maiormente causado pela inserção da data. Seria interessante um programa sem a data, e outro com. Para que o erro seja resolvido e o conhecimento aproveitado quando alguém tentar baixar e executar o código para teste. Dado que o código está todo correto!
Desafio do projeto: "Otimizando o Sistema Bancário com Funções Python"
Neste projeto o professor apresentou as possíveis configurações do código e a partir dos códigos apresentados foi possível fazer o exercício da replicação, compreendendo a lógica da programação e a funcionalidade dos códigos bem como o funcionamento do Python. Segue abaixo o código baseado na aula do desafio do projeto e em seguida a execução que fiz com exemplos que fui utilizando.
import textwrap
def menu():
menu = """\n
============ MENU ===========
[d]\tDepositar
[s]\tSacar
[e]\tExtrato
[nc]\tNova conta
[lc]\tListar contas
[nu]\tNovo usuário
[q]\tSair
"""
return input(textwrap.dedent(menu))
def depositar(saldo, valor, extrato, /):
if valor > 0:
saldo += valor
extrato += f"Depósito:\tR$ {valor:.2f}\n"
print("\n**** Depósito realizado com sucesso! ****")
else:
print("\n### Operação falhou! O valor informado é inválido. ###")
return saldo, extrato
def sacar(*, saldo, valor, extrato, limite, numero_saques, limite_saques):
excedeu_saldo = valor > saldo
excedeu_limite = valor > limite
excedeu_saques = numero_saques > limite_saques
if excedeu_saldo:
print("\n**** Operação falhou! Você não tem saldo suficiente. ****")
elif excedeu_limite:
print("\n&&&& Operação falhou! O valor do saque excedeu o limite. &&&&")
elif excedeu_saques:
print("\n@@@ Operação falhou! Número máximo de saques excedido. @@@")
elif valor > 0:
saldo -= valor
extrato += f"Saque:\t\tR$ {valor:.2f}\n"
numero_saques += 1
print("\n%%%% Saque realizado com sucesso! %%%%")
else:
print("\n#### Operação falhou! O valor informado é inválido. ####")
return saldo, extrato
def exibir_extrato(saldo, /, *, extrato):
print("\n============= EXTRATO ================")
print("Não foram realizados movimentações." if not extrato else extrato)
print(f"\nSaldo:\t\tR$ {saldo:.2f}")
print("==================================")
def criar_usuario(usuarios):
cpf = input("Informe o CPF (somente número): ")
usuario = filtrar_usuario(cpf, usuarios)
if usuario:
print("\n$$$$ Já existe usuário com esse CPF! $$$$")
return
nome = input("Informe o nome completo: ")
data_nascimento = input("Informe a data de nascimento (dd-mm-aaaa): ")
endereco = input("Informe o endereço (lograduro, nro - bairro - cidade/sigla estado): ")
usuarios.append({"nome": nome, "data_nascimento": data_nascimento, "cpf": cpf, "endereco": endereco})
print("@@@@ Usuário criado com sucesso! @@@@")
def filtrar_usuario(cpf, usuarios):
usuarios_filtrados = [usuario for usuario in usuarios if usuario["cpf"] == cpf]
return usuarios_filtrados[0] if usuarios_filtrados else None
def criar_conta(agencia, numero_conta, usuarios):
cpf = input("Informe o CPF do usuário: ")
usuario = filtrar_usuario(cpf, usuarios)
if usuario:
print("\n**** Conta criada com sucesso! ****")
return {"agencia": agencia, "numero_conta": numero_conta, "usuario": usuario}
print("\n#### Usuário não encontrado, fluxo de criação de conta encerrado! ####")
def listar_contas(contas):
for conta in contas:
linha = f"""\
Agência:\t{conta['agencia']}
C/C:\t\t{conta['numero_conta']}
Titular:\t{conta['usuario']['nome']}
"""
print("=" * 100)
print(textwrap.dedent(linha))
def main():
LIMITE_SAQUES = 3
AGENCIA = "0001"
saldo = 0
limite = 500
extrato = ""
numero_saques = 0
usuarios = []
contas = []
while True:
opcao = menu()
if opcao == "d":
valor = float(input("Informe o valor do depósito: "))
saldo, extrato = depositar(saldo, valor, extrato)
elif opcao == "s":
valor = float(input("Informe o valor do saque: "))
saldo, extrato = sacar(
saldo=saldo,
valor=valor,
extrato=extrato,
limite=limite,
numero_saques=numero_saques,
limite_saques=LIMITE_SAQUES,
)
elif opcao == "e":
exibir_extrato(saldo, extrato=extrato)
elif opcao == "nu":
criar_usuario(usuarios)
elif opcao == "nc":
numero_conta = len(contas) + 1
conta = criar_conta(AGENCIA, numero_conta, usuarios)
if conta:
contas.append(conta)
elif opcao == "lc":
listar_contas(contas)
elif opcao == "q":
break
else:
print("Operação inválido, por favor selecione novamente a operação desejada.")
main()
Agora segue a execução das funções do código com exemplos que fui inserindo:
PS C:\Users\Rafael> & C:/Users/Rafael/AppData/Local/Programs/Python/Python312/python.exe c:/Users/Rafael/desafio.py
============ MENU ===========
[d] Depositar
[s] Sacar
[e] Extrato
[nc] Nova conta
[lc] Listar contas
[nu] Novo usuário
[q] Sair
d
Informe o valor do depósito: 100
**** Depósito realizado com sucesso! ****
============ MENU ===========
[d] Depositar
[s] Sacar
[e] Extrato
[nc] Nova conta
[lc] Listar contas
[nu] Novo usuário
[q] Sair
nc
Informe o CPF do usuário: 123
Usuário não encontrado, fluxo de criação de conta encerrado!
============ MENU ===========
[d] Depositar
[s] Sacar
[e] Extrato
[nc] Nova conta
[lc] Listar contas
[nu] Novo usuário
[q] Sair
nu
Informe o CPF (somente número): 123
Informe o nome completo: Raphael do Amaral Vaz
Informe a data de nascimento (dd-mm-aaaa): 05-05-2024
Informe o endereço (lograduro, nro - bairro - cidade/sigla estado): Rua Odette de Oliveira. 500 - Jardim da Penha - Vitória/ES
@@@@ Usuário criado com sucesso! @@@@
============ MENU ===========
[d] Depositar
[s] Sacar
[e] Extrato
[nc] Nova conta
[lc] Listar contas
[nu] Novo usuário
[q] Sair
nc
Informe o CPF do usuário: 123
**** Conta criada com sucesso! ****
============ MENU ===========
[d] Depositar
[s] Sacar
[e] Extrato
[nc] Nova conta
[lc] Listar contas
[nu] Novo usuário
[q] Sair
lc
Agência: 0001
C/C: 1
Titular: Raphael do Amaral Vaz
============ MENU ===========
[d] Depositar
[s] Sacar
[e] Extrato
[nc] Nova conta
[lc] Listar contas
[nu] Novo usuário
[q] Sair
nc
Informe o CPF do usuário: 123
**** Conta criada com sucesso! ****
============ MENU ===========
[d] Depositar
[s] Sacar
[e] Extrato
[nc] Nova conta
[lc] Listar contas
[nu] Novo usuário
[q] Sair
lc
Agência: 0001
C/C: 1
Titular: Raphael do Amaral Vaz
====================================================================================================
Agência: 0001
C/C: 2
Titular: Raphael do Amaral Vaz
============ MENU ===========
[d] Depositar
[s] Sacar
[e] Extrato
[nc] Nova conta
[lc] Listar contas
[nu] Novo usuário
[q] Sair
nu
Informe o CPF (somente número): 123
============ MENU ===========
[d] Depositar
[s] Sacar
[e] Extrato
[nc] Nova conta
[lc] Listar contas
[nu] Novo usuário
[q] Sair
nu
Informe o CPF (somente número): 456
Informe o nome completo: João Carvalho
Informe a data de nascimento (dd-mm-aaaa): 31-10-1994
Informe o endereço (lograduro, nro - bairro - cidade/sigla estado): Rua Silva Pinto, 134 aptº 201 - Vila Isabel - Rio de Janeiro/RJ
@@@@ Usuário criado com sucesso! @@@@
============ MENU ===========
[d] Depositar
[s] Sacar
[e] Extrato
[nc] Nova conta
[lc] Listar contas
[nu] Novo usuário
[q] Sair
nc
Informe o CPF do usuário: 456
**** Conta criada com sucesso! ****
============ MENU ===========
[d] Depositar
[s] Sacar
[e] Extrato
[nc] Nova conta
[lc] Listar contas
[nu] Novo usuário
[q] Sair
lc
Agência: 0001
C/C: 1
Titular: Raphael do Amaral Vaz
====================================================================================================
Agência: 0001
C/C: 2
Titular: Raphael do Amaral Vaz
====================================================================================================
Agência: 0001
C/C: 3
Titular: João Carvalho
============ MENU ===========
[d] Depositar
[s] Sacar
[e] Extrato
[nc] Nova conta
[lc] Listar contas
[nu] Novo usuário
[q] Sair
Entrega do desafio - sistema bancário 1
menu = """
[d] Depositar
[s] Sacar
[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 de depósito: "))
if valor > 0:
saldo += valor
extrato += f"Depósito: R$ {valor:.2f}\n"
else:
print("Erro na operação! O valor informado é inválido.")
elif opcao == "s":
valor = float(input("Informe o valor de saque: "))
excedeu_saldo = valor > saldo
excedeu_limite = valor > limite
excedeu_saques = numero_saques >= LIMITE_SAQUES
if excedeu_saldo:
print("Erro na operação! Você não tem saldo suficiente.")
elif excedeu_limite:
print("Erro na operação! O valor do saque excede o limite diário permitido.")
elif excedeu_saques:
print("Erro na operação! Número máximo de saques diário excedido.")
elif valor > 0:
saldo -= valor
extrato += f"Saque: R$ {valor:.2f}\n"
numero_saques += 1
else:
print("Erro na operação! O valor informado é inválido.")
elif opcao == "e":
print("\n================ EXTRATO ================")
print("Não houve movimentações." if not extrato else extrato)
print(f"\nSaldo: R$ {saldo:.2f}")
print("==========================================")
elif opcao == "q":
break
else:
print("Erro na operação, por favor selecione novamente a opção desejada.")
Sistema Versão 1
class Banco:
def init(self):
self.saldo = 0
self.depositos = []
self.saques = []
def deposito(self, valor):
if valor > 0:
self.saldo += valor
self.depositos.append(valor)
return f"Depósito de R$ {valor:.2f} realizado com sucesso."
else:
return "Valor inválido para depósito."
def saque(self, valor):
if valor > 0 and valor <= 500:
if self.saldo >= valor:
self.saldo -= valor
self.saques.append(valor)
return f"Saque de R$ {valor:.2f} realizado com sucesso."
else:
return "Saldo insuficiente para saque."
else:
return "Valor inválido para saque."
def extrato(self):
if not self.depositos and not self.saques:
return "Nenhuma movimentação financeira."
else:
extrato = "\n".join([f"Depósito: R$ {d:.2f}" for d in self.depositos])
extrato += "\n" + "\n".join([f"Saque: R$ {s:.2f}" for s in self.saques])
extrato += f"\nSaldo atual: R$ {self.saldo:.2f}"
return extrato
def menu(self):
while True:
print("\nMenu:")
print("[s] Sacar")
print("[d] Depositar")
print("[e] Extrato")
print("[q] Sair da operação")
opcao = input("Escolha uma opção: ").lower()
if opcao == "s":
valor_saque = float(input("Digite o valor a ser sacado: "))
print(self.saque(valor_saque))
elif opcao == "d":
valor_deposito = float(input("Qual valor a ser depositado? "))
print(self.deposito(valor_deposito))
elif opcao == "e":
print(self.extrato())
elif opcao == "q":
print("Operação encerrada.")
break
else:
print("Opção inválida. Tente novamente.")
Exemplo de uso:
banco = Banco()
banco.menu()
Sistema bancário com POO sem gerenciamento de contas
No desafio de sistema bancário utilizando POO é possível que um usuário cadastrado possua uma ou mais contas porém não há nenhuma validação no momento de utilizar estas contas.
exemplo:
--usuário que possui 3 contas, numero 1, 2, e 3 não consegue definir um deposito para a conta de numero 3 ou qualquer outra, nem consegue sacar de nenhuma conta especifica. fazendo com que a funcionalidade de criação de contas não seja bem aproveitada.
Falta de pastas da aula
Esta faltando as pasta 03 em diante, das aulas.
Não encontro conteúdo Formação Python
Estou fazendo o curso de formação Python da DIO.pro, nas aulas ele deu uma url do repositório aqui no Git, mas não tem arquivos nenhum quando abro o repositório informado.
Entrega sistema bancário otimizado
import textwrap
def menu():
menu = """\n
================ MENU ================
[d]\tDepositar
[s]\tSacar
[e]\tExtrato
[nc]\tNova conta
[lc]\tListar contas
[nu]\tNovo usuário
[q]\tSair
=> """
return input(textwrap.dedent(menu))
def depositar(saldo, valor, extrato, /):
if valor > 0:
saldo += valor
extrato += f"Depósito:\tR$ {valor:.2f}\n"
print("\n=== Depósito realizado com sucesso! ===")
else:
print("\n@@@ Erro na operação! O valor informado é inválido. @@@")
return saldo, extrato
def sacar(*, saldo, valor, extrato, limite, numero_saques, limite_saques):
excedeu_saldo = valor > saldo
excedeu_limite = valor > limite
excedeu_saques = numero_saques >= limite_saques
if excedeu_saldo:
print("\n@@@ Erro na operação! Você não tem saldo suficiente. @@@")
elif excedeu_limite:
print("\n@@@ Erro na operação! O valor do saque excede o limite. @@@")
elif excedeu_saques:
print("\n@@@ Operação falhou! Número máximo de saques excedido. @@@")
elif valor > 0:
saldo -= valor
extrato += f"Saque:\t\tR$ {valor:.2f}\n"
numero_saques += 1
print("\n=== Saque realizado com sucesso! ===")
else:
print("\n@@@ Erro na operação! O valor informado é inválido. @@@")
return saldo, extrato
def exibir_extrato(saldo, /, *, extrato):
print("\n================ EXTRATO ================")
print("Não foram realizadas movimentações." if not extrato else extrato)
print(f"\nSaldo:\t\tR$ {saldo:.2f}")
print("==========================================")
def criar_usuario(usuarios):
cpf = input("Informe o CPF (somente os números): ")
usuario = filtrar_usuario(cpf, usuarios)
if usuario:
print("\n@@@ Já existe usuário com este CPF! @@@")
return
nome = input("Informe o seu nome completo: ")
data_nascimento = input("Informe sua data de nascimento (dd-mm-aaaa): ")
endereco = input("Informe o seu endereço (logradouro, nro - bairro - cidade/sigla estado): ")
usuarios.append({"nome": nome, "data_nascimento": data_nascimento, "cpf": cpf, "endereco": endereco})
print("=== Usuário criado com exito! ===")
def filtrar_usuario(cpf, usuarios):
usuarios_filtrados = [usuario for usuario in usuarios if usuario["cpf"] == cpf]
return usuarios_filtrados[0] if usuarios_filtrados else None
def criar_conta(agencia, numero_conta, usuarios):
cpf = input("Informe o CPF do usuário: ")
usuario = filtrar_usuario(cpf, usuarios)
if usuario:
print("\n=== Conta criada com sucesso! ===")
return {"agencia": agencia, "numero_conta": numero_conta, "usuario": usuario}
print("\n@@@ Usuário não localizado, fluxo de criação de conta interrompido! @@@")
def listar_contas(contas):
for conta in contas:
linha = f"""
Agência:\t{conta['agencia']}
C/C:\t\t{conta['numero_conta']}
Titular:\t{conta['usuario']['nome']}
"""
print("=" * 100)
print(textwrap.dedent(linha))
def main():
LIMITE_SAQUES = 3
AGENCIA = "0001"
saldo = 0
limite = 500
extrato = ""
numero_saques = 0
usuarios = []
contas = []
while True:
opcao = menu()
if opcao == "d":
valor = float(input("Digite o valor do depósito: "))
saldo, extrato = depositar(saldo, valor, extrato)
elif opcao == "s":
valor = float(input("Digite o valor do saque: "))
saldo, extrato = sacar(
saldo=saldo,
valor=valor,
extrato=extrato,
limite=limite,
numero_saques=numero_saques,
limite_saques=LIMITE_SAQUES,
)
elif opcao == "e":
exibir_extrato(saldo, extrato=extrato)
elif opcao == "nu":
criar_usuario(usuarios)
elif opcao == "nc":
numero_conta = len(contas) + 1
conta = criar_conta(AGENCIA, numero_conta, usuarios)
if conta:
contas.append(conta)
elif opcao == "lc":
listar_contas(contas)
elif opcao == "q":
break
else:
print("Erro na operação, por gentileza selecione novamente a operação desejada.")
main()
Projeto DIO - Sistema bancário v1
menu = '''
[d] Depositar
[s] Sacar
[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 de deposito: "))
if valor > 0:
saldo += valor
print("R$", valor, "depositado com sucesso!")
extrato += f"Depósito: R$ {valor:.2f}\n"
else:
print("Operação falhou! O valor informado é inválido. ")
elif opcao == "s":
valor = float(input("Informe o valor de saque: "))
print("R$", valor, "sacado com sucesso!")
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 é invalido. ")
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":
print(f"Obrigado por utilizar nosso sistema! Até breve. ")
else:
print("Operação inválida, por favor selecione novamente a operação desejada. ")
Desafio 2
import textwrap
from abc import ABC, abstractclassmethod, abstractproperty
from datetime import datetime
class Cliente:
def init(self, endereco):
self.endereco = endereco
self.contas = []
def realizar_transacao(self, conta, transacao):
transacao.registrar(conta)
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
self._numero = numero
self._agencia = "0001"
self._cliente = cliente
self._historico = Historico()
@classmethod
def nova_conta(cls, cliente, numero):
return cls(numero, cliente)
@property
def saldo(self):
return self._saldo
@property
def numero(self):
return self._numero
@property
def agencia(self):
return self._agencia
@property
def cliente(self):
return self._cliente
@property
def historico(self):
return self._historico
def sacar(self, valor):
saldo = self.saldo
excedeu_saldo = valor > saldo
if excedeu_saldo:
print("\n@@@ Operação falhou! Saldo insuficiente. @@@")
elif valor > 0:
self._saldo -= valor
print("\n=== Saque realizado com sucesso! ===")
return True
else:
print("\n@@@ Operação falhou! O valor digitado é inválido. @@@")
return False
def depositar(self, valor):
if valor > 0:
self._saldo += valor
print("\n=== Depósito realizado com sucesso! ===")
else:
print("\n@@@ Operação falhou! O valor digitado é 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
if excedeu_limite:
print("\n@@@ Operação falhou! O valor do saque excedeu o limite. @@@")
elif excedeu_saques:
print("\n@@@ Operação falhou! Número máximo de saques excedido. @@@")
else:
return super().sacar(valor)
return False
def __str__(self):
return f"""\
Agência:\t{self.agencia}
C/C:\t\t{self.numero}
Titular:\t{self.cliente.nome}
"""
class Historico:
def init(self):
self._transacoes = []
@property
def transacoes(self):
return self._transacoes
def adicionar_transacao(self, transacao):
self._transacoes.append(
{
"tipo": transacao.__class__.__name__,
"valor": transacao.valor,
"data": datetime.now().strftime("%d-%m-%Y %H:%M:%s"),
}
)
class Transacao(ABC):
@Property
@abstractproperty
def valor(self):
pass
@abstractclassmethod
def registrar(self, conta):
pass
class Saque(Transacao):
def init(self, valor):
self._valor = valor
@property
def valor(self):
return self._valor
def registrar(self, conta):
sucesso_transacao = conta.sacar(self.valor)
if sucesso_transacao:
conta.historico.adicionar_transacao(self)
class Deposito(Transacao):
def init(self, valor):
self._valor = valor
@property
def valor(self):
return self._valor
def registrar(self, conta):
sucesso_transacao = conta.depositar(self.valor)
if sucesso_transacao:
conta.historico.adicionar_transacao(self)
def menu():
menu = """\n
================ MENU ================
[d]\tDepositar
[s]\tSacar
[e]\tExtrato
[nc]\tNova conta
[lc]\tListar contas
[nu]\tNovo usuário
[q]\tSair
=> """
return input(textwrap.dedent(menu))
def filtrar_cliente(cpf, clientes):
clientes_filtrados = [cliente for cliente in clientes if cliente.cpf == cpf]
return clientes_filtrados[0] if clientes_filtrados else None
def recuperar_conta_cliente(cliente):
if not cliente.contas:
print("\n@@@ Cliente não possui conta! @@@")
return
# FIXME: não permite cliente escolher a conta
return cliente.contas[0]
def depositar(clientes):
cpf = input("Informe o CPF do cliente: ")
cliente = filtrar_cliente(cpf, clientes)
if not cliente:
print("\n@@@ Cliente não encontrado! @@@")
return
valor = float(input("Informe o valor do depósito: "))
transacao = Deposito(valor)
conta = recuperar_conta_cliente(cliente)
if not conta:
return
cliente.realizar_transacao(conta, transacao)
def sacar(clientes):
cpf = input("Informe o CPF do cliente: ")
cliente = filtrar_cliente(cpf, clientes)
if not cliente:
print("\n@@@ Cliente não encontrado! @@@")
return
valor = float(input("Informe o valor do saque: "))
transacao = Saque(valor)
conta = recuperar_conta_cliente(cliente)
if not conta:
return
cliente.realizar_transacao(conta, transacao)
def exibir_extrato(clientes):
cpf = input("Informe o CPF do cliente: ")
cliente = filtrar_cliente(cpf, clientes)
if not cliente:
print("\n@@@ Cliente não encontrado! @@@")
return
conta = recuperar_conta_cliente(cliente)
if not conta:
return
print("\n================ EXTRATO ================")
transacoes = conta.historico.transacoes
extrato = ""
if not transacoes:
extrato = "Não foram realizadas movimentações."
else:
for transacao in transacoes:
extrato += f"\n{transacao['tipo']}:\n\tR$ {transacao['valor']:.2f}"
print(extrato)
print(f"\nSaldo:\n\tR$ {conta.saldo:.2f}")
print("==========================================")
def criar_cliente(clientes):
cpf = input("Informe o CPF (somente número): ")
cliente = filtrar_cliente(cpf, clientes)
if cliente:
print("\n@@@ Já existe cliente com esse CPF! @@@")
return
nome = input("Informe o nome completo: ")
data_nascimento = input("Informe a data de nascimento (dd-mm-aaaa): ")
endereco = input("Informe o endereço (logradouro, nro - bairro - cidade/sigla estado): ")
cliente = PessoaFisica(nome=nome, data_nascimento=data_nascimento, cpf=cpf, endereco=endereco)
clientes.append(cliente)
print("\n=== Cliente criado com sucesso! ===")
def criar_conta(numero_conta, clientes, contas):
cpf = input("Informe o CPF do cliente: ")
cliente = filtrar_cliente(cpf, clientes)
if not cliente:
print("\n@@@ Cliente não encontrado, cadastrar cliente! @@@")
return
conta = ContaCorrente.nova_conta(cliente=cliente, numero=numero_conta)
contas.append(conta)
cliente.contas.append(conta)
print("\n=== Conta criada com sucesso! ===")
def listar_contas(contas):
for conta in contas:
print("=" * 100)
print(textwrap.dedent(str(conta)))
def main():
clientes = []
contas = []
while True:
opcao = menu()
if opcao == "d":
depositar(clientes)
elif opcao == "s":
sacar(clientes)
elif opcao == "e":
exibir_extrato(clientes)
elif opcao == "nu":
criar_cliente(clientes)
elif opcao == "nc":
numero_conta = len(contas) + 1
criar_conta(numero_conta, clientes, contas)
elif opcao == "lc":
listar_contas(contas)
elif opcao == "q":
break
else:
print("\n@@@ Operação inválida, por gentileza, repetir a operação desejada. @@@")
main()
sistema bancario
menu = """
[d] depositar
[s] sacar
[e] extrato
[q] sair
=> """
saldo = 0
limite = 500
extrato = ""
numero_saque = 0
LIMITE_SAQUE = 3
while True:
opcao = input(menu)
if opcao == "d":
deposito = int(input("digite o valor a ser depositado"))
if deposito > 0:
saldo += deposito
extrato += f"Depósito: R$ {deposito:.2f}\n"
else:
print("Operação falhou! O valor informado é inválido.")
elif opcao == "s":
valor_saque = float(input("Informe o valor do saque:"))
excedeu_saldo = valor_saque > saldo
limite1 = valor_saque > limite
limite_saques = numero_saque >= LIMITE_SAQUE
if excedeu_saldo:
print("Operação falhou! Você não tem saldo suficiente.")
elif limite1:
print("Operação falhou! O valor do saque excede o limite.")
elif limite_saques:
print("Operação falhou! Número máximo de saques excedido.")
elif valor_saque > 0:
saldo -= valor_saque
extrato += f"Saque: R$ {valor_saque:.2f}\n"
numero_saque += 1
else:
print("Operação falhou! O valor informado é inválido.")
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("opcao invalida , por favor selecione novamente a operação correta")
Criando Sistema bancário com PYTHON - Bootcamp VIVO DIO
BOOTCAMP VIVO PYTHON - POSTANDO TRABALHO PARA FAZER A ENTREGA...
CRIANDO UM SISTEMA BANCÁRIO COM PYTHON
DEVE TER OPÇÃO DE DEPÓSITO (APENAS VALORES POSITIVOS). DEVEM SER ARMAZENADOS EM UMA VARIÁVEL E EXIBIDOS NA OPERAÇÃO EXTRATO.
OPÇÃO SAQUE. PERMITIDOS 3 SAQUES DIÁRIOS COM LIMITE DE R$500,00 POR SAQUE. CASO NÃO HAJA SALDO, O SISTEMA DEVE EXIBIR MENSAGEM INFORMANDO QUE NÃO É POSSÍVEL O SAQUE POR FALTA DE SALDO. SAQUES ARMAZENADOS EM VARIÁVEL E EXIBIDOS NO EXTRATO.
OPÇÃO EXTRATO DEVE LISTAR DEPÓSITOS E SAQUES REALIZADOS. NO FINAL DEVE SER EXIBIDO O SALDO ATUAL DA CONTA. VALORES DEVEM SER EXIBIDOS COM O FORMATO "R$ 0000.00 (R$ 1500.00)"
menu = """
[d] DEPOSITAR
[s] SACAR
[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: "))
if valor > 0:
saldo += valor
extrato += f"DEPÓSITO : R$ {valor:.2f}\n"
else:
print("OPERAÇÃO FALHOU! VALOR INFORMADO É INVÁLIDO.")
elif opcao == "s":
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 LIMTE.")
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.")
elif opcao == "e":
print("\n=============== EXTRATO ===================") # ( \n ) COLOCADO PARA PULAR A LINHA...
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.")
Introduzir valor para a chave data_extenso
Código em questão:
01 - Estrutura de dados/05 - Funções/03_args_kwargs.py
Solicito revisão da linha 9 do código "03_args_kwargs.py", dentro da sub-pasta "05 - Funções", na pasta "01 - Estrutura de dados", pois não consta o valor da chave data_extenso. Na aula gravada o Guilherme mudou o arquivo, mas aparentemente não ficou gravado.
Agradeço pela atenção!
Banco Teste
class ContaBancaria:
def init(self):
self.saldo = 0
self.saques_feitos = 0
self.saques_diarios = 0
self.extrato = []
def depositar(self, valor):
self.saldo += valor
self.extrato.append(f"Depósito de R${valor:.2f}")
def sacar(self, valor):
if self.saques_feitos < 3 and self.saques_diarios < 3 and valor <= 500 and valor <= self.saldo:
self.saldo -= valor
self.saques_feitos += 1
self.saques_diarios += 1
self.extrato.append(f"Saque de R${valor:.2f}")
print("Saque realizado com sucesso!")
else:
print("Saque não pode ser realizado.")
def gerar_extrato(self):
print("Extrato:")
for operacao in self.extrato:
print(operacao)
print(f"Saldo atual: R${self.saldo:.2f}")
def reiniciar_saques_diarios(self):
self.saques_diarios = 0
def main():
conta = ContaBancaria()
while True:
print("\n" * 2) # Adiciona 20 linhas em branco para centralizar o menu
print("\n" + "=" * 20 + " MENU " + "=" * 20 + "\n")
print(" " * 18 + "Menu:")
print(" " * 18 + "1. Depositar")
print(" " * 18 + "2. Sacar")
print(" " * 18 + "3. Extrato")
print(" " * 18 + "0. Sair")
print("\n" + "=" * 46 + "\n")
opcao = input("Escolha uma opção: ")
if opcao == "1":
valor = float(input("Digite o valor a ser depositado: "))
conta.depositar(valor)
print("Depósito realizado com sucesso!")
elif opcao == "2":
valor = float(input("Digite o valor a ser sacado: "))
conta.sacar(valor)
elif opcao == "3":
conta.gerar_extrato()
elif opcao == "0":
print("Obrigado por utilizar nosso Sistema...Banco Kauffmann Agradece!!!")
break
else:
print("Opção inválida. Tente novamente.")
# Reinicia o contador de saques diários no início de um novo dia
if opcao in ["1", "2"]:
conta.reiniciar_saques_diarios()
if name == "main":
main()
Recommend Projects
-
React
A declarative, efficient, and flexible JavaScript library for building user interfaces.
-
Vue.js
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
-
Typescript
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
-
TensorFlow
An Open Source Machine Learning Framework for Everyone
-
Django
The Web framework for perfectionists with deadlines.
-
Laravel
A PHP framework for web artisans
-
D3
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
-
Recommend Topics
-
javascript
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
-
web
Some thing interesting about web. New door for the world.
-
server
A server is a program made to process requests and deliver data to clients.
-
Machine learning
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
-
Visualization
Some thing interesting about visualization, use data art
-
Game
Some thing interesting about game, make everyone happy.
Recommend Org
-
Facebook
We are working to build community through open source technology. NB: members must have two-factor auth.
-
Microsoft
Open source projects and samples from Microsoft.
-
Google
Google ❤️ Open Source for everyone.
-
Alibaba
Alibaba Open Source for everyone
-
D3
Data-Driven Documents codes.
-
Tencent
China tencent open source team.