Как заставить программу повторить вычисления и проверить условие после создания добавления новой строки в файл? - PullRequest
0 голосов
/ 29 октября 2018

Меня попросили создать программу, которая будет запрашивать информацию о пользователях в следующих категориях - Сумма кредита, Процентная ставка и Ежемесячный платеж

для этой части я написал следующий код -

import csv

name = input('Enter a file name:')
file = name + '.csv'

fieldnames = ['Month', 'Loan Amount', 'Interest', 'Monthly Payment']
fileinfo = [0, float(input('Enter the loan amount:')), float(input('Enter annual interest rate:')), float(input('Enter the monthly payment'))]

with open(file, 'w') as csvfile:
    writer = csv.writer(csvfile)
    writer.writerows([fieldnames, fileinfo])

Эта часть кода работает нормально.

Вторая часть задания состояла в том, чтобы взять введенное пользователем значение для кредита, вычесть ежемесячный платеж, затем умножить это новое значение кредита на 1/12 процентной ставки и, наконец, добавить его к рассчитанной сумме кредита, чтобы получить сумму кредита, которая еще должна быть выплачена. Для этих расчетов у меня есть это:

newval = []
month = 0

e = (fileinfo[1] - fileinfo[3])
compare = e + (e * (fileinfo[2]/12))

if compare > fileinfo[1]:
    with open(file, 'r+') as f:
        rows = csv.DictReader(f)
        write = csv.writer(f)

        for row in range(30):
            month += 1
            loan = float(row['Loan Amount']) - float(row['Monthly Payment'])
            interest = float(row['Interest'])
            monthpay = float(row['Monthly Payment'])
            loan = loan + (loan * (interest/12))
            fileinfo1 = [month, loan, interest, monthpay]
            write.writerow(fileinfo1)
else:
    with open(file, 'a+') as f:
        rows = csv.DictReader(f)
        write = csv.writer(f)
        for row in rows:
            month += 1
            loan = float(row['Loan Amount']) - float(row['Monthly Payment'])
            interest = float(row['Interest'])
            monthpay = float(row['Monthly Payment'])
            loan = loan + (loan * (interest/12))
            fileinfo1 = [month, loan, interest, monthpay]
            write.writerow(fileinfo1)

Оператор if-else должен проверять, увеличивается ли ссуда после оплаты за месяц и, если она увеличивается, расчеты следует выполнять только 30 раз. Если оно не увеличивается, расчеты следует выполнять только до тех пор, пока ссуда не станет 0.

Мне нужна помощь в том, чтобы повторять расчеты необходимое количество раз и проверять, увеличивается ли кредит или нет, и выполнять соответствующие действия в соответствии с этой информацией.

Мой код выполняет вычисления только один раз и добавляет его в конец файла. Я не могу заставить его взять только что рассчитанную сумму кредита и выполнить расчеты снова.

Если что-то неясно, пожалуйста, дайте мне знать, и я постараюсь прояснить это и заранее спасибо за любую помощь.

Это мой полный код вместе взятый

    import csv

name = input('Enter a file name:')
file = name + '.csv'

fieldnames = ['Month', 'Loan Amount', 'Interest', 'Monthly Payment']
fileinfo = [0, float(input('Enter the loan amount:')), float(input('Enter annual interest rate:')), float(input('Enter the monthly payment'))]

with open(file, 'w') as csvfile:
    writer = csv.writer(csvfile)
    writer.writerows([fieldnames, fileinfo])

newval = []
month = 0

e = (fileinfo[1] - fileinfo[3])
compare = e + (e * (fileinfo[2]/12))

if compare > fileinfo[1]:
    with open(file, 'r+') as f:
        rows = csv.DictReader(f)
        write = csv.writer(f)

        for row in range(30):
            month += 1
            loan = float(row['Loan Amount']) - float(row['Monthly Payment'])
            interest = float(row['Interest'])
            monthpay = float(row['Monthly Payment'])
            loan = loan + (loan * (interest/12))
            fileinfo1 = [month, loan, interest, monthpay]
            write.writerow(fileinfo1)
else:
    with open(file, 'a+') as f:
        rows = csv.DictReader(f)
        write = csv.writer(f)
        for row in rows:
            month += 1
            loan = float(row['Loan Amount']) - float(row['Monthly Payment'])
            interest = float(row['Interest'])
            monthpay = float(row['Monthly Payment'])
            loan = loan + (loan * (interest/12))
            fileinfo1 = [month, loan, interest, monthpay]
            write.writerow(fileinfo1)

EDIT

Мне как-то удалось выяснить это самому, поэтому, если у кого-то есть проблемы в будущем, вот мой окончательный код:

import csv

name = input('Enter a file name:')
file = name + '.csv'

fieldnames = ['Month', 'Loan Amount', 'Interest', 'Monthly Payment']
fileinfo = [0, float(input('Enter the loan amount:')), float(input('Enter annual interest rate:')), float(input('Enter the monthly payment:'))]

with open(file, 'w') as csvfile:
    writer = csv.writer(csvfile)
    writer.writerows([fieldnames, fileinfo])


newval = []
month = 0

e = (fileinfo[1] - fileinfo[3])
compare = e + (e * (fileinfo[2]/12))

x = 0

f = open(file, 'a')

write = csv.writer(f)

lp = fileinfo[1]

x = 0

if compare > lp:
    while not(x == 30):
        loanpre = (lp - fileinfo[3])
        loan = loanpre + (loanpre * (fileinfo[2] / 12))
        lp = loan
        month += 1
        x += 1
        newval = [month, lp, fileinfo[2], fileinfo[3]]
        write.writerow(newval)
else:
    while not(lp == 0):
        loanpre = (lp - fileinfo[3])
        loan = loanpre + (loanpre * (fileinfo[2]/12))
        month += 1
        lp = loan
        if lp <= 0:
            lp = 0
        newval = [month, lp, fileinfo[2], fileinfo[3]]
        write.writerow(newval)

f.close()
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...