This repository was archived by the owner on Jan 5, 2019. It is now read-only.
-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathQ1.py
More file actions
110 lines (92 loc) · 3.06 KB
/
Q1.py
File metadata and controls
110 lines (92 loc) · 3.06 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
import math
class Debt:
def __init__(self, *, debt, interest, repayment, baserepayment):
self.__debt = debt
self.__interest = interest
self.__baseRepayment = baserepayment
self.__repayment = repayment
self.__repaid = 0
self.__repayments = 0
def __fixtwo(self, float):
return math.ceil(float*100)/100
def __calcRepayment(self):
thisRepayment = self.__fixtwo(self.__debt * self.__repayment)
thisRepayment = thisRepayment if thisRepayment>self.__baseRepayment else self.__baseRepayment
thisRepayment = thisRepayment if thisRepayment<= self.__debt else self.__debt
return thisRepayment
def __doRepayment(self):
repayment = self.__calcRepayment()
self.__debt -= repayment
self.__repayments += 1
self.__repaid += repayment
return (self.__debt>0)
def __doInterest(self):
self.__debt += self.__fixtwo(self.__debt * self.__interest)
return True
def __doCycle(self):
self.__doInterest()
return self.__doRepayment()
def simulate(self):
done = False
while not done:
done = not self.__doCycle()
return True
@property
def paid(self):
return "£{:,.2f}".format(self.__repaid)
@property
def repayments(self):
return "{:,}".format(self.__repayments)
@property
def interest(self):
return "{:,.1f}%".format(self.__interest*100)
@property
def repayment(self):
return "{:,.1f}%".format(self.__repayment*100)
def __str__(self):
return "{} paid in {} cycle{} at {} interest and {} repayments.".format(
self.paid,
self.repayments,
"s" if self.repayments!=1 else "",
self.interest,
self.repayment
)
def partatest():
print("\n-- 1(a) --")
interest = float(input("Interest percentage: "))
interest = interest/100
repayment = float(input("Repayment percentage: "))
repayment = repayment/100
thisdebt = 100
baserepayment = 50
thisdebt = Debt(debt=thisdebt, interest=interest, repayment=repayment, baserepayment=baserepayment)
thisdebt.simulate()
print("\n" + str(thisdebt))
def partbtest():
print("\n-- 1(b) --")
interest = 0.43
repayment = 0.46
thisdebt = 100
baserepayment = 50
thisdebt = Debt(debt=thisdebt, interest=interest, repayment=repayment, baserepayment=baserepayment)
thisdebt.simulate()
print(str(thisdebt))
def partctest():
print("\n-- 1(c) --")
interest = 1
repayment = 0.51
thisdebt = 100
baserepayment = 50
thisdebt = Debt(debt=thisdebt, interest=interest, repayment=repayment, baserepayment=baserepayment)
thisdebt.simulate()
print(str(thisdebt))
# 1(a)
# Demonstrates the program in operation with user inputs.
partatest()
# 1(b)
# Simulates debt at 43% interest and 46% repayment
partbtest()
# 1(c)
# Simulates debt at 100% interest and 51% repayment
# This is the largest possible interest with the lowest possible repayment rate.
partctest()