-
Notifications
You must be signed in to change notification settings - Fork 1
/
Copy path9-rectangle.py
executable file
·130 lines (91 loc) · 3.45 KB
/
9-rectangle.py
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
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
#!/usr/bin/python3
"""9. A square is a rectangle"""
class Rectangle:
"""Class Rectangle that defines a rectangle"""
number_of_instances = 0
print_symbol = "#"
def __init__(self, width=0, height=0):
"""Function that initializes instances for width & height"""
self.width = width
self.height = height
Rectangle.number_of_instances += 1
@property
def width(self):
"""Function that retrieves width instance attribute"""
return self.__width
@width.setter
def width(self, value):
"""
Function that sets width instance attribute
Raise TypeError & ValueError if not integer or natural number resp.
"""
if not isinstance(value, int):
raise TypeError("width must be an integer")
if value < 0:
raise ValueError("width must be >= 0")
self.__width = value
@property
def height(self):
"""Function that retrieves height instance attribute"""
return self.__height
@height.setter
def height(self, value):
"""
function that sets height instance attribute
Raise TypeError and ValueError if not integer or natural number resp.
"""
if not isinstance(value, int):
raise TypeError("height must be an integer")
if value < 0:
raise ValueError("height must be >= 0")
self.__height = value
def area(self):
"""Function that computes area of a rectangle"""
return (self.__width * self.__height)
def perimeter(self):
"""Function that computes perimeter of a rectangle"""
if self.__width == 0 or self.__height == 0:
return (0)
return ((self.__width * 2) + (self.__height * 2))
def __str__(self) -> str:
"""
Function that defines instance method to print rectangle with #
Raise exception to print rectangle with given characters
"""
if self.__width == 0 or self.__height == 0:
return ("")
rectangle = ""
for column in range(self.__height):
for row in range(self.__width):
try:
rectangle += str(self.print_symbol)
except Exception:
rectangle += type(self).print_symbol
if column < self.__height - 1:
rectangle += "\n"
return (rectangle)
def __repr__(self):
"""Function that defines instance method to return rectangle with #"""
return "Rectangle({:d}, {:d})".format(self.__width, self.__height)
def __del__(self):
"""Function that defines instance method to delete rectangle"""
print("Bye rectangle...")
Rectangle.number_of_instances -= 1
@staticmethod
def bigger_or_equal(rect_1, rect_2):
"""
Function that defines comparison of area instance attribute
Raise TypeError if rectangle area value is not integer
"""
if not isinstance(rect_1, Rectangle):
raise TypeError("rect_1 must be an instance of Rectangle")
if not isinstance(rect_2, Rectangle):
raise TypeError("rect_2 must be an instance of Rectangle")
if rect_1.area() >= rect_2.area():
return rect_1
else:
return rect_2
@classmethod
def square(cls, size=0):
"""Function class method that returns new rectangle instance"""
return Rectangle(size, size)