Jump to content
Sandson Costa

Como imprimir o saldo em ordem crescente e calcular juros

Recommended Posts

Pessoal eu tenho um trabalho na qual eu devo reproduzir a seguinte tabela: inserir a descrição da imagem aquiEu não tenho muito conhecimento em python e estou dando o meu melhor para tentar reproduzir ela. Mas estou conseguindo retornar somente desta maneira. inserir a descrição da imagem aquiMinhas dúvidas são as seguintes:

  1. O mês eu não sei como colocar na ordem crescente e nem retirar o 0 no final.
  2. Do saldo inicial ao saldo final eu consigo imprimir, o problema é que ele imprime até 0.
  3. Não sei a lógica da prestação.
  4. Não sei a lógica dos Juros (quadro verde).
  5. Não sei a lógica dos juros mensais (quadro vermelho).
  6. Não sei como imprimir o saldo final (que nesse caso é o inverso do saldo inicial).

Segue abaixo o meu código:

# enconding: utf-8
########################################
# VERSÃO UTILIZADA: Python 3.6.5       #
# DISCIPLINA: Introdução à Programação #
########################################

#########################################
# Informações de entrada dada pelo user #
#########################################

import os

valor_financiamento = float ( input ("1. Informe o valor a ser financiado: "))
os.system("cls")
prazo = int ( input ("2. Informe o prazo de quitação do financiamento (em meses): "))
os.system("cls")
taxa_juros_anual = float (input ("3. Informe a taxa de juros anual (em %): "))
os.system("cls")


# Início da programação e cálculo
# USO DO SISTEMA SAC       


# O cálculo da amortização é realizado pelo valor do financiamento divido pela quantidade de meses
amortizacao = valor_financiamento / prazo

saldo_devedor = valor_financiamento - amortizacao

taxa_mensal = taxa_juros_anual / prazo

juros_mes = (taxa_juros_anual - 1 + 1 ) * amortizacao * taxa_mensal

prestacao = amortizacao + juros_mes
#valor_financiamento = str (valor_financiamento).replace('.',',')


#print ("AMORTIZAÇÃO: R$ %.2f" % amortizacao)
#print ("VALOR DO FINANCIAMENTO: R$ %.2f\n\n" % valor_financiamento)
print ("\t FINANCIAMENTO = R$ %.2f \t MESES: %i meses \t TAXA: %i%% ano (%.f%)" % (valor_financiamento, prazo, taxa_juros_anual, juros_mes))
print ("\t","-"*80,"\n")
print ("\t MÊS\tSALDO INICIAL\tPRESTAÇÃO\tAMORTIZAÇÃO\tJUROS\tSALDO FINAL")
print ("\t ---\t-------------\t---------\t-----------\t-----\t-----------")

print ("\t%4.i \t %12.2f \t\t\t %10.2f" % (prazo, valor_financiamento, amortizacao))
for p in range(prazo):
    while (valor_financiamento > 1):
        valor_financiamento = valor_financiamento - amortizacao # Saldo devedor
        prazo = prazo - 1 # Referência do mês
        saldo_devedor = valor_financiamento - amortizacao
        saldo_final = saldo_devedor - amortizacao
        print ("\t%4.i \t %12.2f \t\t\t %10.2f" % (prazo, valor_financiamento, amortizacao)) #% valor_financiamento)
        #print (prazo)

Essa questão é uma questão de financiamento imobiliário segundo o sistema SAC:

Questão

Construa um programa que gere uma tabela com os valores das prestações mensais de um financiamento, discriminando os valores referentes à amortização e aos juros a serem pagos até a amortização total do financiamento. Este programa deve apresentar um menu de opções e pedir as seguintes informações ao usuário: Valor financiado, Prazo (em meses) para quitação do financiamento, Taxa de juros anual (em percentual) e o Sistemática de pagamento mensal das prestações (Sistema de Amortização Constante – SAC ou Sistema PRICE - ver nota explicativas em anexo). Funcionalidades adicionais serão bem vindas!

O valor de um financiamento deve ser restituído (amortizado) ao financiador em certo período de tempo, acrescido dos juros. Amortizar significa reduzir o valor da dívida, ou seja, pagar uma parte da dívida periodicamente para que ela reduza de tamanho até a sua eliminação. Como a dívida implica em cobrança de juros, para amortiza-la é necessário que a prestação seja maior que os juros cobrados em cada período, ou seja, AMORTIZAÇÃO = PAGAMENTO – JUROS (o valor amortizado é o que sobra depois de descontados os juros). Os juros só incidem sobre o saldo devedor, onde SALDO DEVEDOR = DÍVIDA INICIAL – VALOR AMORTIZADO. As formas de amortizar financiamentos são denominados de “Sistemas de Amortização”.

Sistema de Amortização Constante (SAC): Neste sistema, o saldo devedor é reembolsado periodicamente em valores de amortização iguais. Desta forma, o valor das prestações é decrescente, já que os juros diminuem a cada prestação. O valor da amortização é calculado dividindo-se o valor do principal (valor do financiamento) pelo número de períodos de pagamento, ou seja, de parcelas. Assim,

 Valor da amortização: AMORTIZAÇÃO = PRINCIPAL / N

 Valor dos juros no mês T: JUROST = (N - T + 1) * AMORTIZAÇÃO * TAXA

 Valor da parcela em T: PRESTAÇÃOT = AMORTIZAÇÃO + JUROST

onde: PRINCIPAL é o valor do financiamento, N é o número de meses do financiamento, T denota o mês em questão e TAXA é a taxa de juros mensal (que deve ser obtida a partir da taxa anual).

Se alguém puder me ajudar pelo menos com a lógica. Já é um grande começo.

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now

  • Similar Content

    • By r1que
      como camuflar a url dentro do arquivo e colocar em formato .pyo alguem sabe ?
    • By Augustomesquita
      Bom dia pessoal!
      Vocês também estão programando em primeira pessoa? Recentemente escrevi este artigo e gostaria de compartilhar a ideia com vocês.
      Pare de programar em primeira pessoa!
    • By Rengavitp
      Boa noite Pessoal,
       
      Estou tentando implementar um projeto em python, mas comecei a aprender python agora e estou tendo dificuldade em fazer comandos sql com ele. No código abaixo sempre recebo a mensagem de erro: 
      cursor.execute(sql,valor) File "/usr/lib/python2.7/dist-packages/MySQLdb/cursors.py", line 210, in execute query = query % args TypeError: not all arguments converted during string formatting  
      o código é este abaixo, se eu passar um valor fixo funciona normal, mas colocando valor dinamico nao vai...
      con = MySQLdb.connect(host="192.168.0.10, port=3306 user="@@@@", passwd="@@@@@@@@", db="acessos") cursor = con.cursor() valor = ('teste') sql = "insert into registros_acesso values (%s)" cursor.execute(sql,valor) con.commit() con.close() Alguém pode me dar uma ajuda?
    • By SSO990
      Escrever um programa que leia um número não determinado de valores e calcule a média aritmética dos valores lidos, a quantidade de valores positivos, a quantidade de valores negativos e o percentual de valores negativos e positivos. A leitura deve parar quando o número informado for 9999. Mostre os resultados. 
    • By Coghi000
      Boa tarde, preciso de ajuda para terminar este exercicio, o que acontece nele, é que quando ele roda a função ministra da classe Professor, ele ve se a soma da carga horário é maior que 200, o correto era ele não adicionar mais la lista disciplinas assim que passa-se de 200, mas ao invés disso e ele está adicionando mesmo passando da carga horaria, não  estou conseguindo resolver =/, alguem pode dar uma força.
       
      class Disciplina():
          '''
          Abstração de uma disciplinai, possui os atributos Nome e carga Horária
          '''
          def __init__(self, nome: str, carga_horaria: int) -> None:
              self._nome = nome
              self._carga_horaria = carga_horaria
          def get_nome(self) -> str:
              '''
              Acessor do atributo nome
              '''
              return self._nome
          def get_carga_horaria(self) -> int:
              '''
              Acessor do atributo cargar horaria
              '''
              return self._carga_horaria

      class Pessoa():
          '''
          Abstração de uma pessoa no Modelo, classe base para Aluno e Professor
          que contém dados pertencentes a ambos.
          '''
          def __init__(self, nome: str, telefone: int, email: float) -> None:
              self._nome = nome
              self._telefone = telefone
              self._email = email
          def get_nome(self) -> str:
              '''
              Acessor do atributo Nome
              '''
              return self._nome
          def get_telefone(self) -> int:
              '''
              Acessor do atributo telefone
              '''
              return self._telefone
          def set_telefone(self, novo_telefone: int) -> None:
              '''
              Mutador do atributo telefone deve checar se é um número inteiro e,
              caso contrário devolver um TypeError
              '''
              if type(novo_telefone) not in [int]:
                  raise TypeError('Numero invalido')
              self._telefone = novo_telefone
          def get_email(self) -> str:
              '''
              Acessor do atributo email
              '''
              return self._email
          def set_email(self, novo_email) -> None:
              '''
              Mutador do atributo eail, deve checar se éum email válido
              (se possuir o caractere '@') e caso contrário devolver
              um ValueError
              '''
              if novo_email.count('@') == 0 or novo_email.count('@') > 1:
                  raise ValueError('E-mail invalido')
              self._email = novo_email

      class Aluno(Pessoa):
          def __init__(self, nome: str, telefone: int,
                       email: str, n_matricula: int) -> None:
              super().__init__(nome, telefone, email)
              self._n_matricula = n_matricula
              self._disciplinas = []
          def get_matricula(self) -> int:
              '''
              Acessor do atributo matricula
              '''
              return self._n_matricula
          def matricular(self, disciplina: Disciplina) -> None:
              '''
              Realiza matrícula do Aluno na disciplina
              '''
              self._disciplinas.append(disciplina)
              return None
          def lista_disciplinas(self) -> list:
              '''
              Devolve a lista de disciplinas em que o aluno esta matriculado
              '''
              return self._disciplinas

      class Professor(Pessoa):
          '''
          Entidade professor do Modelo
          '''
          def __init__(self, nome, telefone, email):
              self._nome = nome
              self._telefone = telefone
              self._email = email
              self._disciplinas = []
          def ministra(self, disciplina: Disciplina) -> None:
              '''
              Atribui o professor como ministrante da disiciplina
              Um professor não pode dar mais de 200 horas de aula,
              Caso um professor tente atribuir mais de 200h devolve
              ValueError
              '''
              horas = []
              horas.append(disciplina._carga_horaria)
              soma = 0
              for item in horas:
                  print(item)
                  soma = item + item
                  if soma > 200:
                      return ValueError
                  else:
                      self._disciplinas.append(disciplina)
                      return None
          def lista_disciplinas(self) -> list:
              '''
              lista as disciplinas ministradas pelo professor
              '''
              pass
×

Important Information

Ao usar o fórum, você concorda com nossos Terms of Use.