In: Computer Science
I have defined the class. Rectangle in Python. How do I define a class Canvas with the following description:
Class Canvas represents a collection of Rectangles. It has 8
methods. In addition, to the constructor
(i.e. __init__ method) and two methods that override python's
object methods (and make your class
user friendly as suggested by the test cases), your class should
contain 5 more methods:
add_one_rectangle, count_same_color, total_perimeter,
min_enclosing_rectangle, and common_point.
In case of any query do comment. Please rate answer as well. Thanks
Code:
#let's say your class rectangle
class Rectangle():
def __init__(self,length,width,color):
self.length = length
self.width = width
self.color = color
def perimeter(self):
return 2*(self.length + self.width)
def __str__(self):
return "Rectangle with length: {}, width: {}, color: {} and perimeter: {}".format(self.length,self.width,self.color,self.perimeter())
#now define class canvas as asked in the question
class Canvas:
#method 1 as init
def __init__(self,rectangles):
self.rectangles = rectangles
#method 2 as __str__
def __str__(self):
data =""
for rectangle in self.rectangles:
data += str(rectangle) + "\n"
return data
#method 3 as repr
def __repr__(self):
data ="[\n"
for rectangle in self.rectangles:
data += "[" + str(rectangle) + "],\n"
return data + "]"
#given method as add_one_rectangle
def add_one_rectangle(self,rectangle):
self.rectangles.append(rectangle)
#given method as count_same_color
def count_same_color(self,color):
return sum(p.color == color for p in self.rectangles)
#given method as total_perimeter
def total_perimeter(self):
perimeter =0
for rect in self.rectangles:
perimeter += rect.perimeter()
return perimeter
#there was no functionality mentioned for these method , hence pass is used
def min_enclosing_rectangle(self):
pass
def common_point(self):
pass
#main driver method
#create a list of rectangles
rectangles=[]
rect1 = Rectangle(5,10,"Red")
rect2 = Rectangle(15,20,"Green")
rect3 = Rectangle(25,30, "Yellow")
rectangles.append(rect1)
rectangles.append(rect2)
rectangles.append(rect3)
#create an object of Canvas class
canvas = Canvas(rectangles)
#print all the methods one by one of canvas class
print(canvas)
print(repr(canvas))
print("Now add one more rectangle")
rect4 = Rectangle(15,40,"Red")
canvas.add_one_rectangle(rect4)
print(canvas)
print("Find matching with Red color: ".format(canvas.count_same_color("Red")))
print("Total Perimeter of all rectangles in Canvas: {}".format(canvas.total_perimeter()))
==========screen shot of the code indentation=======
Output: