Question
I can't figure out why nothing is printing when I run my Python code. Can somebody point out what I'm doing incorrectly? Thank you!! #
I can't figure out why nothing is printing when I run my Python code. Can somebody point out what I'm doing incorrectly? Thank you!!
# Assumes: loan and r are floats, and m is an int # Returns the monthly payment for a mortgage of size # loan at a monthly rate of r for m months def findPayment(loan, r, m): return loan*((r*(1 + r)**m)/((1 + r)**m - 1))
# Abstract class for building different kinds of mortgages class Mortgage(object): # Assumes: loan and annRate are floats, and months is an int # Creates a new mortgage of size loan, duration months, # and annualrate annRate def __init__(self, loan, annRate, months): self.loan = loan self.rate = annRate/12 self.months = months self.paid = [0.0] self.outstanding = [loan] self.payment = findPayment(loan, self.rate, months) self.legend = None # description of mortgage def makePayment(self): # Make a payment self.paid.append(self.payment) reduction = self.payment - (self.outstanding[-1] * self.rate) self.outstanding.append(self.outstanding[-1] - reduction) def getTotalPaid(self): #return the total amount paid so far return sum(self.paid) def __str__(self): return self.legend
class Fixed(Mortgage): def __init__(self, loan, r, months): Mortgage.__init__(self, loan, r, months) self.legend = 'Fixed, ' + str(round(r*100, 2)) + '%' class FixedWithPts(Mortgage): def __init__(self, loan, r, months, pts): self.pts = pts self.paid = [loan*(pts/100)] self.legend = 'Fixed, ' + str(round(r*100, 2)) + '%, ' + str(pts)\ + ' points' class TwoRate(Mortgage): def __init__(self, loan, r, months, teaserRate, teaserMonths): Mortgage.__init__(self, loan, teaserRate, months) self.teaserMonths = teaserMonths self.teaserRate = teaserRate self.nextRate = r/12 self.legend = str(teaserRate*100)\ + '% for ' + str(self.teaserMonths)\ + ' months, then ' + str(round(r*100, 2)) + '%' def makePayment(self): if len(self.paid) == self.teaserMonths + 1: self.rate = self.nextRate self.payment = findPayment(self.outstanding[-9], self.rate, self.months - self.teaserMonths) Mortgage.makePayment(self) def compareMortgages(amt=200000, years=30, fixedRate=0.07, pts=3.25, ptsRate=0.05, varRate1=0.045, varRate2=0.095, varMonths=48): totMonths = years*12 fixed1 = Fixed(amt, fixedRate, totMonths) fixed2 = FixedWithPts(amt, ptsRate, totMonths, pts) twoRate = TwoRate(amt, varRate2, totMonths, varRate1, varMonths) morts = [fixed1, fixed2, twoRate] for m in range(totMonths): for mort in morts: mort.makePayment() for m in morts: print(m) print(' Total Payments = $' + str(int(m.getTotalPaid())))
Step by Step Solution
There are 3 Steps involved in it
Step: 1
Get Instant Access to Expert-Tailored Solutions
See step-by-step solutions with expert insights and AI powered tools for academic success
Step: 2
Step: 3
Ace Your Homework with AI
Get the answers you need in no time with our AI-driven, step-by-step assistance
Get Started