digitalinnovationone / trilha-python-dio

3.02k stars 4.42k forks source link

Criando um Sistema Bancário com Python #138

Open abrunos94 opened 3 months ago

abrunos94 commented 3 months ago

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.")
abrunos94 commented 3 months ago

[Criando um Sistema Bancário .fixd#138

abrunos94 commented 3 months ago

def exibir_menu(): print(""" [d] Depositar [s] Sacar [e] Extrato [u] Cadastro usuario [c] Cadastro conta bancária [l] Listar contas [q] Sair """)

def depositar (saldo, valor, extrato, /):

if valor > 0:
   saldo += valor
   extrato += f"deposito R$ {valor:.2f}\n"
   print("Depósito realizado com sucesso!")
else:
   print("Operação Falhou! Digite um valor válido.")
return saldo, extrato

def sacar (*, saldo, valor, extrato, limite, numero_saques, limite_saques):

if valor > saldo:
   print("Operação falhou! Sem saldo suficiente.")

elif numero_saques >= limite:
   print("Limite de valor de saque por operação excedido. Tente novamente")

elif valor > limite:
   print("Operação falhou! Limite de saque excedido.")

elif numero_saques >= limite_saques:
   print("Limite de saque diário excedido. Tente novamente amanhã!")

elif valor > 0:
    saldo -= valor
    extrato += f"Saque R$ {valor:.2f}\n"
    numero_saques += 1
    print("Saque relizado com sucesso!")

else:
    print("Saque não realizado. Saldo indisponível")
return saldo, extrato, numero_saques

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

def cadastrar_usuario(usuarios): cpf = input("Informe o CPF (somente números): ") if cpf in usuarios: print("Usuário já cadastrado!") return usuarios

nome = input("Informe o seu nome: ")
data_nascimento = input("Informe a data de nascimento (dd/mm/aaaa): ")
endereco = input("Informe o endereço (formato: logradouro, numero, bairro, cidade/sigla Estado): ")

usuarios[cpf] = {
    "nome": nome,
    "data_nascimento": data_nascimento,
    "endereco": endereco
}
print("Usuário cadastrado com sucesso")
return usuarios

def cadastrar_conta(agencia, contas, usuarios, proximo_numero_conta): cpf = input("Informe o CPF do usuário: ") if cpf not in usuarios: print("Usuário não encontrado! Cadastre o usuário primeiro.") return agencia, contas, proximo_numero_conta

numero_conta = proximo_numero_conta
contas.append({
    "agencia": agencia,
    "numero_conta": numero_conta,
    "usuario": usuarios[cpf]
})
print("Conta cadastrada com sucesso!")
return agencia, contas, proximo_numero_conta + 1

def listar_contas(usuarios, contas): cpf = input("Informe o seu CPF (somente número): ") if cpf in usuarios: for conta in contas: if conta['usuario'] == usuarios[cpf]: print(f"Nome: {conta['usuario']['nome']},\nAgência: {conta['agencia']},\nConta: {conta['numero_conta']}")

else:
    print("Sem cadastro neste CPF.")
return(usuarios, contas)

saldo = 0 limite = 500 extrato = "" numero_saques = 0 LIMITE_SAQUES = 3 usuarios = {} contas = [] proximo_numero_conta = 1 agencia = "0001"

while True: exibir_menu() opcao = input("Escolha uma opção: ")

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":
    mostrar_extrato(saldo, extrato=extrato)

elif opcao == "u":
    usuarios = cadastrar_usuario(usuarios)

elif opcao == "c":
    agencia, contas, proximo_numero_conta = cadastrar_conta(agencia, contas, usuarios, proximo_numero_conta)

elif opcao == "l":
    usuario, contas = listar_contas(usuarios, contas)

elif opcao == "q":
    break

else:
    print("Opção inválida, por favor selecione novamente.")