直接用了个死循环,可以计算(期末支付)年金现值、终值,复利现值、终值。把work注释掉,取消print_df的注释可以打印现值系数表。
import pandas as pd
import numpy as np
pd.set_option('display.max_columns', None)
pd.set_option('display.width', None)
def PVIFA(r, n):
p_a = 1/r - 1/(r*(1+r)**n)
return p_a
def PVIF(r, n):
p_f = 1/(1+r)**n
return p_f
def print_pa_df():
print('=======================================================年金现值系数表============================================================')
pa_array = np.zeros((15,15))
for n in range(pa_array.shape[0]):
for r in range(pa_array.shape[1]):
pa_array[n][r] = PVIFA((r+1)/100, n+1)
pa_array = np.around(pa_array, decimals=4)
columns = ['{}%'.format(r+1) for r in range(pa_array.shape[1])]
index = ['{}'.format(n+1) for n in range(pa_array.shape[0])]
pa_df = pd.DataFrame(pa_array, index=index, columns=columns)
print(pa_df)
def print_pf_df():
print('=======================================================复利现值系数表=======================================================')
pf_array = np.zeros((15,15))
for n in range(pf_array.shape[0]):
for r in range(pf_array.shape[1]):
pf_array[n][r] = PVIF((r+1)/100, n+1)
pf_array = np.around(pf_array, decimals=4)
columns = ['{}%'.format(r+1) for r in range(pf_array.shape[1])]
index = ['{}'.format(n+1) for n in range(pf_array.shape[0])]
pf_df = pd.DataFrame(pf_array, index=index, columns=columns)
print(pf_df)
def print_df():
print_pa_df()
print('\n\n\n\n\n')
print_pf_df()
def caculate():
x = input('按1计算年金系数,按2计算复利系数:')
if x == '1':
y = input('按1算现值,按2算年金:')
if y == '1':
a = float(input('输入年金:'))
r = float(input('输入利率:'))
n = int(input('输入期数:'))
print('年金为{}、利率为 {}、期数为 {} 的年金现值为 {:.4f}'.format(a, r, n, a*PVIFA(r, n)))
elif y=='2':
a = float(input('输入现值:'))
r = float(input('输入利率:'))
n = int(input('输入期数:'))
print('年金为{}、利率为 {}、期数为 {} 的现值年金为 {:.4f}'.format(a, r, n, a/PVIFA(r, n)))
else:
print('输入错误')
elif x == '2':
y = input('按1算现值,按2算终值:')
if y == '1':
a = float(input('输入终值:'))
r = float(input('输入利率:'))
n = int(input('输入期数:'))
print('终值为{}、利率为 {}、期数为 {} 的复利现值为 {:.4f}'.format(a, r, n, a*PVIF(r, n)))
elif y=='2':
a = float(input('输入现值:'))
r = float(input('输入利率:'))
n = int(input('输入期数:'))
print('现值为{}、利率为 {}、期数为 {} 的复利终值为 {:.4f}'.format(a, r, n, a/PVIF(r, n)))
else:
print('输入错误')
else:
print('输入错误')
def work():
while 1:
try:
caculate()
except:
print('出现错误!')
continue
# print_df()
work()



Comments | NOTHING