Mundo em Python

Duração Macaulay e Duração Modificada

def calcular_duracao(fluxos_de_caixa, taxa_juros):
valor_presente = sum(cf / (1 + taxa_juros) ** t for t, cf in enumerate(fluxos_de_caixa, start=1))
duracao_macaulay = sum(
(t * cf / (1 + taxa_juros) ** t for t, cf in enumerate(fluxos_de_caixa, start=1))) / valor_presente duracao_modificada = duracao_macaulay / (1 + taxa_juros) return duracao_macaulay, duracao_modificada def coletar_entradas():
while True:
try:
num_anos = int(input("Digite o número de anos para os pagamentos: "))
if num_anos <= 0:
raise ValueError("O número de anos deve ser maior que zero.")
break
except ValueError as e:
print(f"Entrada inválida: {e}. Tente novamente.") fluxos_de_caixa = []
for i in range(num_anos):
while True:
try:
fluxo = float(input(f"Digite o fluxo de caixa para o ano {i + 1}: "))
fluxos_de_caixa.append(fluxo)
break
except ValueError:
print("Entrada inválida. Por favor, insira um número válido.") while True:
try:
taxa_juros = float(
input("Digite a taxa de juros (em porcentagem, ex: 5 para 5%): ")) / 100 # Converte para decimal
break
except ValueError:
print("Entrada inválida. Por favor, insira um número válido.") return fluxos_de_caixa, taxa_juros
fluxos_de_caixa, taxa_juros = coletar_entradas()
duracao_macaulay, duracao_modificada = calcular_duracao(fluxos_de_caixa, taxa_juros)
print(f"Duração Macaulay: {duracao_macaulay:.2f} anos")
print(f"Duração Modificada: {duracao_modificada:.2f} anos")
0