import math
import random

COLOURS = ['black', 'yellow', 'red', 'magenta', 'cyan', 'purple']

class Square(object):
    def __init__(self, side, colour="black"):
        self.side = side
        self.colour = colour
    
    @classmethod
    def generate_random(cls):
        side = random.random() * 100
        colour = COLOURS[random.randint(0, len(COLOURS) - 1)]
        return cls(side, colour)
    
    @property
    def area(self):
        return self.side ** 2
    
    @property
    def perimeter(self):
        return self.side * 4
    
    def __repr__(self):
        return "%s square with the side: %.2f, area: %.2f, perimeter: %.2f" % (
            self.colour.title(), self.side, self.area, self.perimeter)
            
class Circle(object):
    def __init__(self, radius, colour="black"):
        self.radius = radius
        self.colour = colour
    
    @classmethod
    def generate_random(cls):
        radius = random.random() * 100
        colour = COLOURS[random.randint(0, len(COLOURS) - 1)]
        return cls(radius, colour)
    
    @property
    def area(self):
        return self.radius ** 2 * math.pi
    
    @property
    def perimeter(self):
        return self.radius * 2 * math.pi
    
    def __repr__(self):
        return "%s circle with the radius: %.2f, area: %.2f, perimeter: %.2f" % (
            self.colour.title(), self.radius, self.area, self.perimeter)

classes = [Square, Circle]


figs = []
numfigs = 10
for i in range(numfigs):
    fig = classes[random.randint(0, len(classes) - 1)]
    figs.append(fig.generate_random())


for fig in figs:
    print(fig)