class Color: def __init__(self, red, green, blue): if not (Color.check_color_value(red) or Color.check_color_value(green) or Color.check_color_value(blue)): print(f"Color is out of range") return self.red = red self.green = green self.blue = blue @classmethod def from_hex(cls, hexstring): "Initialize Color from hexstring (e.g. #ffffff)" if isinstance(hexstring, str): if hexstring[0] == '#': hexstring = hexstring[1:] if len(hexstring) == 6: color = tuple(int(hexstring[i:i+2], 16) for i in (0, 2, 4)) return cls(color[0], color[1], color[2]) @classmethod def from_name(cls, color_name): "Initialize Color from name (e.g. 'white')" color_name = str.lower(color_name) if color_name == 'white': return cls(255,255,255) elif color_name == 'black': return cls(0, 0, 0) elif color_name == 'red': return cls(255, 0, 0) elif color_name == 'green': return cls(0, 255, 0) elif color_name == 'blue': return cls(0, 0, 255) else: raise ValueError(f'Colorname {color_name} was not recognised') @staticmethod def check_color_value(value): if not isinstance(value, int): print(f"Colorvalue '{value}' is not a number") return False if value < 0 or value > 255: print(f"Color value '{value}' is out of bounds (0-255)") return False return True