Расчет л oop в python новые значения - PullRequest
0 голосов
/ 14 февраля 2020

Я хотел бы выполнить вычисление l oop, используя мою функцию.

b=list(data.iloc[1])

def balance(rate, payment, os):
    interest_amount=os*rate/100/12
    principal_amount=payment-interest_amount    
    next_balance=os+interest_amount-principal_amount
    return next_balance

c=balance(b[9], b[11], b[8])
d=balance(b[9], b[11], c)
e=balance(b[9], b[11], d)

Мне нужно было бы начать с b[8] в качестве суммы для расчета. После того, как я получил следующую сумму от функции balance, следующая сумма будет началом третьего вычисления и так далее, пока следующая сумма суммы не станет меньше 0. Это должно остановить l oop.

Мне нужно добавить вычисленные значения с b[8] до последнего (до получения 0 или менее).

Любое предложение по этому поводу, спасибо!

Редактировать: на основе Zaraki Kenpachi

b[8] - это сумма денег, указанная 17183 b[9] - это процентная ставка, указанная 3.39 b[11] - сумма платежа в месяц, полученная 5759

. Вывод, который я пытаюсь сделать:

[17183, 11,521, 5,826, 99]

Ответы [ 3 ]

1 голос
/ 14 февраля 2020

Здесь вы go:

def balance(rate, payment, os):
    interest_amount=os*rate/100/12
    principal_amount=payment-interest_amount
    next_balance=os+interest_amount-principal_amount
    return next_balance


next_balance = 17183 # = b[8]
results = []
results.append(next_balance)
while next_balance > 0:
    next_balance = balance(3.39, 5759, next_balance) # b[9], b[11]
    if next_balance > 0:
        results.append(next_balance)

Вывод:

[17183, 11521.08395, 5827.1780743175, 101.10163043739522]
1 голос
/ 14 февраля 2020

Возможно, что-то вроде этого

x = b[8]
output = []
output.append(x)
while x > 0:
    x = balance(b[9], b[11], X)
    output.append(x)
0 голосов
/ 14 февраля 2020

Python не имеет встроенного пути к раскрытию / итерации , но обычный способ развертывания указанного c развертывания - через генератор , который может сохранять вычислительное состояние и значения доходности:

def balances(balance, rate, payment):
    while True:
        interest_amount = balance*rate/100/12
        principal_amount = payment-interest_amount    
        balance = os+interest_amount-principal_amount
        # TO DO: end the computation when balance <= 0, maybe find a way to 
        # note extra in the last payment, or reject the last payment entirely
        # and handle that case separately outside the generator
        yield balance

, затем вы можете либо вызвать next() на своем итераторе сальдо, чтобы получить последовательные значения

bs = balances(b[8], b[9], b[11])
c = next(bs)
d = next(bs)
e = next(bs)

, либо выполнить итерацию все это

for balance in balances(b[8], b[9], b[11]):
    if balance < 0: 
        "do something when the last payment was excessive and stop the loop"
    ...
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...