Esta publicación hace referencia al ejercicio "Polygon Area Calculator" incluído en el curso Scientifice Computing with Python Projects al que puedes acceder a través del siguiente enlace:
Este ejercicio nos solicita crear una clase Rectangle
y una subclase Square
class Rectangle:
def __init__(self, width, height):
self.width = width
self.height = height
class Square(Rectangle):
def __init__(self, side):
self.side = side
super().__init__(side,side)
Definir las propiedades de Rectangle
def set_width(self, width):
self.width = width
def set_height(self, height):
self.height = height
Definir las propiedades de Square
Aquí hay que tener la precaución de actualizar también las propiedades de la clase padre.
def set_side(self,side):
self.side = side
super().set_width(side)
super().set_height(side)
Una vez tenemos ya los parámetros introducidos y los setters disponibles, programaremos los distintos métodos que nos solicitan:
get_area
def get_area(self):
return(self.height * self.width)
get_perimeter
def get_perimeter(self):
return(2 * self.width + 2 * self.height)
get_diagonal
def get_diagonal(self):
return((self.width**2 + self.height**2)** .5)
Lo siguiente que nos requiere el ejercicio es poder "pintar" el rectángulo/cuadrado por pantalla, suponiendo que cada unidad de medida es un asterisco.
De esta forma, un rectángulo de ancho 5 y alto 3 debería mostrarse como:
*****
*****
*****
El ejercicio indica, además, limitar la representación en pantalla a un lado máximo de 50.
get_picture
Este método he decidido abordarlo en dos partes. En la primera defino una variable line
que va a incluir tantos asteriscos como valga la variable width
. Una vez disponemos de ella, la introduciremos las veces definidas en height
en nuestro resultado intercalando saltos de línea cada vez.
def get_picture(self):
if(self.width > 50 or self.height > 50):
return "Too big for picture."
else:
line = ""
result = ""
line = line + "*"*self.width
for k in range(self.height):
result = result + line + "\n"
return result
Por último, tenemos que calcular cuántas veces cabe un polígono dado dentro de otro. El ejercicio supone que una vez cubierta un área por el polígono, esta no puede ser parcialmente reutilizada otra vez.
def_get_amount_inside
Para resolver este problema hago uso de la división entera //
que da como resultado el cociente entero de la división.
Esto es útil puesto que los decimales no son necesarios en este caso al tratarse de ocupación completa.
def get_amount_inside(self, polygon):
width_times = self.width // polygon.width
height_times = self.height // polygon.height
return (width_times * height_times)
Con esto concluye el ejercicio.
En este caso, a diferencia del primero de los ejercicios, sí que he utilizado test unitarios, lo cual, ciertamente, aumenta enormemente la eficiencia del desarrollo.