import random
ANIMALS = [
'aardvark',
'albatross',
'alligator',
'alpaca',
'ant',
'anteater',
'antelope',
'ape',
'armadillo',
'donkey',
'baboon',
'badger',
'barracuda',
'bat',
'bear',
'beaver',
'bee',
'beetle',
'bison',
'boar',
'buffalo',
'butterfly',
'camel',
'canary',
'capybara',
'caribou',
'cassowary',
'cat',
'caterpillar',
'cattle',
'chamois',
'cheetah',
'chicken',
'chimpanzee',
'chinchilla',
'chough',
'clam',
'cobra',
'cockroach',
'cod',
'cormorant',
'coyote',
'crab',
'crane',
'crocodile',
'crow',
'curlew',
'deer',
'dinosaur',
'dog',
'dogfish',
'dolphin',
'dotterel',
'dove',
'dragonfly',
'duck',
'dugong',
'dunlin',
'eagle',
'echidna',
'eel',
'eland',
'elephant',
'elk',
'emu',
'falcon',
'ferret',
'finch',
'fish',
'flamingo',
'fly',
'fox',
'frog',
'gaur',
'gazelle',
'gerbil',
'giraffe',
'gnat',
'gnu',
'goat',
'goldfinch',
'goldfish',
'goose',
'gorilla',
'goshawk',
'grasshopper',
'grouse',
'guanaco',
'gull',
'hamster',
'hare',
'hawk',
'hedgehog',
'heron',
'herring',
'hippopotamus',
'hornet',
'horse',
'hummingbird',
'hyena',
'ibex',
'ibis',
'jackal',
'jaguar',
'jay',
'jellyfish',
'kangaroo',
'kingfisher',
'koala',
'kookabura',
'kouprey',
'kudu',
'lapwing',
'lark',
'lemur',
'leopard',
'lion',
'llama',
'lobster',
'locust',
'loris',
'louse',
'lyrebird',
'magpie',
'mallard',
'manatee',
'mandrill',
'mantis',
'marten',
'meerkat',
'mink',
'mole',
'mongoose',
'monkey',
'moose',
'mosquito',
'mouse',
'mule',
'narwhal',
'newt',
'nightingale',
'octopus',
'okapi',
'opossum',
'oryx',
'ostrich',
'otter',
'owl',
'oyster',
'panther',
'parrot',
'partridge',
'peafowl',
'pelican',
'penguin',
'pheasant',
'pig',
'pigeon',
'pony',
'porcupine',
'porpoise',
'quail',
'quelea',
'quetzal',
'rabbit',
'raccoon',
'rail',
'ram',
'rat',
'raven',
'reindeer',
'rhinoceros',
'rook',
'salamander',
'salmon',
'sandpiper',
'sardine',
'scorpion',
'seahorse',
'seal',
'shark',
'sheep',
'shrew',
'skunk',
'snail',
'snake',
'sparrow',
'spider',
'spoonbill',
'squid',
'squirrel',
'starling',
'stingray',
'stinkbug',
'stork',
'swallow',
'swan',
'tapir',
'tarsier',
'termite',
'tiger',
'toad',
'trout',
'turkey',
'turtle',
'viper',
'vulture',
'wallaby',
'walrus',
'wasp',
'weasel',
'whale',
'wolf',
'wolverine',
'wombat',
'woodcock',
'woodpecker',
'worm',
'wren',
'yak',
'zebra',
'zorilla',
'axolotl',
'bandicoot',
'basilisk',
'beluga',
'binturong',
'blackbird',
'bluebird',
'bobcat',
'budgerigar',
'bullfrog',
'bumblebee',
'bunting',
'buzzard',
'caiman',
'cardinal',
'catfish',
'centipede',
'chameleon',
'chimpanzee',
'chipmunk',
'cicada',
'cockatoo',
'condor',
'copperhead',
'coral',
'cougar',
'cowbird',
'crayfish',
'cricket',
'cuttlefish',
'dachshund',
'dingo',
'dormouse',
'duckbill',
'egret',
'ermine',
'falcon',
'fennec',
'firefly',
'flounder',
'flycatcher',
'gazelle',
'gecko',
'gibbon',
'gopher',
'grackle',
'greyhound',
'grizzly',
'groundhog',
'guppy',
'harrier',
'hedgehog',
'heron',
'herring',
'hornet',
'hummingbird',
'hyena',
'iguana',
'impala',
'indri',
'jacana',
'jackrabbit',
'jaguar',
'javelin',
'jellyfish',
'junco',
'kestrel',
'kingfisher',
'kiwi',
'koala',
'kookaburra',
'krill',
'ladybug',
'lamprey',
'lemming',
'leopard',
'lionfish',
'lizard',
'llama',
'lobster',
'locust',
'lorikeet',
'lynx',
'macaque',
'macaw',
'magpie',
'mallard',
'mammoth',
'manatee',
'mandrill',
'marlin',
'marmot',
'mastodon',
'meadowlark',
'meerkat',
'millipede',
'mockingbird',
'mongoose',
'monitor',
'moray',
'moth',
'mouse',
'mudpuppy',
'muskrat',
'nautilus',
'needlefish',
'nematode',
'newt',
'nighthawk',
'numbat',
'nuthatch',
'ocelot',
'octopus',
'opossum',
'orangutan',
'oriole',
'osprey',
'ostrich',
'otter',
'ovenbird',
'owl',
'oyster',
'paddlefish',
'panda',
'pangolin',
'panther',
'parakeet',
'parrot',
'peacock',
'peafowl',
'pelican',
'penguin',
'pheasant',
'pigeon',
'pika',
'pike',
'piranha',
'platypus',
'plover',
'polecat',
'porcupine',
'porpoise',
'possum',
'prawn',
'puffin',
'puma',
'python',
'quagga',
'quail',
'quetzal',
'quokka',
'quoll',
'rabbit',
'raccoon',
'rattlesnake',
'raven',
'reindeer',
'rhea',
'rhinoceros',
'roadrunner',
'robin',
'rooster',
'sailfish',
'salamander',
'salmon',
'sandpiper',
'scallop',
'scorpion',
'seagull',
'seahorse',
'seal',
'serval',
'shearwater',
'shrimp',
'silkworm',
'silverfish',
'skink',
'skunk',
'sloth',
'slug',
'snail',
'snake',
'snipe',
'sparrow',
'sphinx',
'spider',
'spoonbill',
'squid',
'squirrel',
'starfish',
'starling',
'stegosaurus',
'stingray',
'stork',
'sturgeon',
'sunfish',
'swallow',
'swan',
'swift',
'swordfish',
'tadpole',
'takin',
'tanager',
'tapir',
'tarantula',
'tarsier',
'termite',
'tern',
'thrush',
'thylacine',
'tiger',
'titmouse',
'toad',
'tortoise',
'toucan',
'triceratops',
'trout',
'tuna',
'turkey',
'turtle',
'umbrellabird',
'unicorn',
'urial',
'vicuna',
'viper',
'vole',
'vulture',
'wallaby',
'walrus',
'warbler',
'warthog',
'wasp',
'waterbuck',
'weasel',
'weevil',
'whale',
'wildebeest',
'wolf',
'wolverine',
'wombat',
'woodchuck',
'woodpecker',
'worm',
'wren',
'xerus',
'yak',
'yellowjacket',
'zebra',
'zebu',
'zonkey',
'zorse',
]
COLOURS = [
'amber',
'amethyst',
'apricot',
'aqua',
'aquamarine',
'auburn',
'azure',
'beige',
'bisque',
'black',
'blue',
'blueviolet',
'brass',
'bronze',
'brown',
'burgundy',
'cardinal',
'carmine',
'celadon',
'cerulean',
'champagne',
'charcoal',
'chartreuse',
'chocolate',
'cinnamon',
'cobalt',
'copper',
'coral',
'cornflower',
'crimson',
'cyan',
'denim',
'ecru',
'emerald',
'fuchsia',
'gold',
'goldenrod',
'gray',
'green',
'greenyellow',
'grey',
'hotpink',
'indigo',
'ivory',
'jade',
'khaki',
'lavender',
'lemon',
'lilac',
'lime',
'linen',
'magenta',
'mahogany',
'maroon',
'mauve',
'midnightblue',
'mint',
'mulberry',
'mustard',
'navy',
'ochre',
'olive',
'olivedrab',
'orange',
'orangered',
'orchid',
'peach',
'periwinkle',
'pink',
'plum',
'puce',
'purple',
'raspberry',
'red',
'rose',
'rosybrown',
'royalblue',
'ruby',
'rust',
'saffron',
'salmon',
'sand',
'sandybrown',
'sapphire',
'scarlet',
'seagreen',
'seashell',
'sienna',
'silver',
'skyblue',
'slateblue',
'slategray',
'snow',
'steelblue',
'tan',
'tangerine',
'taupe',
'teal',
'thistle',
'tomato',
'turquoise',
'umber',
'violet',
'viridian',
'wheat',
'white',
'wisteria',
'yellow',
'yellowgreen',
'alabaster',
'almond',
'amaranth',
'ambergris',
'aquamarine',
'ash',
'avocado',
'azure',
'banana',
'beet',
'bistre',
'bittersweet',
'blackberry',
'blond',
'blood',
'blueberry',
'blush',
'bone',
'brick',
'bronze',
'butterscotch',
'cadet',
'caramel',
'carrot',
'cayenne',
'cerise',
'chestnut',
'cider',
'cinnabar',
'claret',
'clover',
'coffee',
'cognac',
'coral',
'cranberry',
'cream',
'daffodil',
'dandelion',
'eggplant',
'eggshell',
'flax',
'flaxen',
'forest',
'ginger',
'grapefruit',
'grass',
'hazel',
'heather',
'heliotrope',
'honey',
'honeydew',
'huckleberry',
'hunter',
'imperial',
'iris',
'jasmine',
'lapis',
'latte',
'laurel',
'lava',
'lavender',
'lemon',
'licorice',
'lilac',
'lime',
'linen',
'liver',
'malachite',
'mango',
'melon',
'midnight',
'mint',
'mocha',
'moss',
'mulberry',
'mushroom',
'mustard',
'myrtle',
'nutmeg',
'oatmeal',
'obsidian',
'onyx',
'papaya',
'paprika',
'peach',
'pear',
'pearl',
'peony',
'pepper',
'persimmon',
'pewter',
'pine',
'pistachio',
'platinum',
'plum',
'poppy',
'porcelain',
'pumpkin',
'quartz',
'raisin',
'raspberry',
'raven',
'rosewood',
'russet',
'rust',
'sable',
'saffron',
'sage',
'salmon',
'sand',
'sangria',
'sapphire',
'scarlet',
'sepia',
'shamrock',
'slate',
'smoke',
'snow',
'spearmint',
'straw',
'strawberry',
'tangerine',
'terracotta',
'thistle',
'titanium',
'topaz',
'truffle',
'tulip',
'tumbleweed',
'vanilla',
'vermilion',
'violet',
'walnut',
'watermelon',
'wenge',
'wheat',
'wine',
'wisteria',
'xanadu',
'zaffre',
'zinnwaldite',
]
ADJECTIVES = [
'abrupt',
'acidic',
'adorable',
'adventurous',
'aggressive',
'agitated',
'alert',
'aloof',
'amiable',
'amused',
'annoyed',
'antsy',
'anxious',
'appalling',
'appetizing',
'apprehensive',
'arrogant',
'ashamed',
'astonishing',
'attractive',
'average',
'batty',
'beefy',
'bewildered',
'biting',
'bitter',
'bizarre',
'bland',
'blobby',
'bloated',
'blotchy',
'blurry',
'blushing',
'bogus',
'boisterous',
'bony',
'boorish',
'bored',
'bouncy',
'brainy',
'brash',
'brave',
'brawny',
'bumpy',
'burly',
'bustling',
'buttery',
'buzzing',
'cagey',
'calculating',
'callous',
'cantankerous',
'capricious',
'careful',
'careless',
'caring',
'cautious',
'charming',
'cheerful',
'cheeky',
'cheesy',
'chewy',
'chilly',
'chubby',
'circular',
'clammy',
'classy',
'clean',
'clear',
'clever',
'clumsy',
'cocky',
'coherent',
'cold',
'colorful',
'colossal',
'combative',
'comfortable',
'condemned',
'condescending',
'confused',
'contemplative',
'convincing',
'convoluted',
'cooperative',
'corny',
'costly',
'courageous',
'crabby',
'creamy',
'creepy',
'crispy',
'critical',
'crooked',
'crunchy',
'curious',
'curly',
'curved',
'cynical',
'daffy',
'damaged',
'damp',
'dangerous',
'dapper',
'daring',
'dark',
'dashing',
'dazzling',
'debonair',
'decisive',
'decorous',
'defensive',
'defiant',
'delicious',
'delightful',
'demanding',
'demonic',
'dense',
'deranged',
'determined',
'devoted',
'didactic',
'different',
'difficult',
'diligent',
'direful',
'dirty',
'disagreeable',
'discreet',
'disgusted',
'disgusting',
'disillusioned',
'dispensable',
'distinct',
'distorted',
'dizzy',
'domineering',
'dopey',
'doting',
'doubtful',
'drab',
'drained',
'dull',
'dusty',
'dynamic',
'dysfunctional',
'eager',
'earsplitting',
'eccentric',
'ecstatic',
'edible',
'educated',
'elastic',
'elated',
'elderly',
'electric',
'elegant',
'elfin',
'elite',
'embarrassed',
'embellished',
'eminent',
'emotional',
'enchanted',
'enchanting',
'encouraging',
'energetic',
'enormous',
'enthusiastic',
'envious',
'equable',
'erratic',
'ethereal',
'evanescent',
'evasive',
'excited',
'exciting',
'exotic',
'expensive',
'exuberant',
'exultant',
'fabulous',
'faded',
'fainthearted',
'faithful',
'fallacious',
'false',
'familiar',
'famous',
'fanatical',
'fancy',
'fantastic',
'fascinated',
'fastidious',
'fat',
'fearful',
'fearless',
'feeble',
'feigned',
'festive',
'fetid',
'fierce',
'filthy',
'finicky',
'flagrant',
'flaky',
'flashy',
'flat',
'flawless',
'flimsy',
'flippant',
'flowery',
'fluffy',
'fluttering',
'foamy',
'foolish',
'forgetful',
'fortunate',
'frail',
'frantic',
'freezing',
'fresh',
'fretful',
'friendly',
'frightened',
'frightening',
'frothy',
'frustrating',
'fuzzy',
'gabby',
'gainful',
'gamy',
'gaping',
'garish',
'garrulous',
'gaudy',
'gelatinous',
'gelid',
'ghastly',
'ghostly',
'giddy',
'gigantic',
'giggly',
'glamorous',
'gleaming',
'glib',
'glistening',
'glittering',
'gloomy',
'glorious',
'glossy',
'glum',
'godly',
'goofy',
'gorgeous',
'graceful',
'grandiose',
'grateful',
'gratis',
'gray',
'greasy',
'great',
'greedy',
'green',
'grieving',
'groovy',
'grotesque',
'grouchy',
'grubby',
'gruesome',
'grumpy',
'guarded',
'guiltless',
'gullible',
'gusty',
'guttural',
'habitual',
'hairy',
'half',
'hallowed',
'halting',
'handsome',
'handsomely',
'handy',
'hanging',
'hapless',
'happy',
'harassed',
'hard',
'harmonious',
'harsh',
'hateful',
'heady',
'healthy',
'heartbreaking',
'heavenly',
'heavy',
'hellish',
'helpful',
'helpless',
'hesitant',
'hideous',
'highfalutin',
'hilarious',
'hissing',
'hoarse',
'holistic',
'hollow',
'homeless',
'homely',
'honorable',
'horrible',
'horrific',
'hospitable',
'hot',
'hulking',
'humorous',
'hungry',
'hurried',
'hurt',
'hushed',
'husky',
'hypnotic',
'hysterical',
'icky',
'icy',
'idiotic',
'ignorant',
'ill',
'illegal',
'illustrious',
'imaginary',
'immense',
'imminent',
'impartial',
'imperfect',
'impolite',
'important',
'imported',
'impossible',
'incandescent',
'incompetent',
'inconclusive',
'incredible',
'inquisitive',
'insidious',
'instinctive',
'intelligent',
'interesting',
'internal',
'invincible',
'irate',
'irritating',
'itchy',
'jaded',
'jagged',
'jazzy',
'jealous',
'jittery',
'jobless',
'jolly',
'joyous',
'judicious',
'juicy',
'jumbled',
'jumpy',
'juvenile',
'kaput',
'keen',
'knotty',
'knowing',
'knowledgeable',
'known',
'labored',
'lackadaisical',
'lacking',
'lame',
'lamentable',
'languid',
'large',
'laughable',
'lazy',
'lean',
'learned',
'left',
'legal',
'lethal',
'level',
'lewd',
'light',
'likeable',
'limping',
'literate',
'little',
'lively',
'livid',
'living',
'lonely',
'longing',
'loose',
'lopsided',
'loud',
'loutish',
'lovely',
'loving',
'low',
'lowly',
'lucky',
'ludicrous',
'lumpy',
'lush',
'luxuriant',
'lying',
'lyrical',
'macabre',
'macho',
'maddening',
'madly',
'magenta',
'magical',
'magnificent',
'majestic',
'makeshift',
'malicious',
'mammoth',
'maniacal',
'many',
'marked',
'massive',
'materialistic',
'mature',
'mean',
'measly',
'meaty',
'medical',
'meek',
'mellow',
'melodic',
'melted',
'merciful',
'mere',
'messy',
'mighty',
'military',
'milky',
'mindless',
'miniature',
'minor',
'miscreant',
'misty',
'mixed',
'moaning',
'modern',
'moldy',
'momentous',
'motionless',
'mountainous',
'muddled',
'mundane',
'murky',
'mushy',
'mute',
'mysterious',
'naive',
'nappy',
'narrow',
'nasty',
'naughty',
'nauseating',
'nebulous',
'needless',
'needy',
'neighborly',
'nervous',
'new',
'nice',
'nifty',
'nimble',
'nippy',
'noiseless',
'noisy',
'nonchalant',
'nondescript',
'nonstop',
'nostalgic',
'nosy',
'noxious',
'null',
'numberless',
'numerous',
'nutritious',
'nutty',
'oafish',
'obedient',
'obeisant',
'obese',
'obnoxious',
'obscene',
'obsequious',
'observant',
'obsolete',
'obtainable',
'oceanic',
'odd',
'offbeat',
'old',
'omniscient',
'onerous',
'open',
'opposite',
'optimal',
'orange',
'ordinary',
'organic',
'ossified',
'outgoing',
'outrageous',
'outstanding',
'oval',
'overconfident',
'overjoyed',
'overrated',
'overt',
'overwrought',
'painful',
'painstaking',
'pale',
'paltry',
'panicky',
'panoramic',
'parallel',
'parched',
'parsimonious',
'past',
'pastoral',
'pathetic',
'peaceful',
'penitent',
'perfect',
'periodic',
'permissible',
'perpetual',
'petite',
'phobic',
'physical',
'picayune',
'piquant',
'placid',
'plain',
'plant',
'plastic',
'plausible',
'pleasant',
'plucky',
'pointless',
'poised',
'polite',
'political',
'poor',
'possessive',
'possible',
'powerful',
'precious',
'premium',
'present',
'pretty',
'previous',
'pricey',
'prickly',
'private',
'probable',
'productive',
'profuse',
'protective',
'proud',
'psychedelic',
'psychotic',
'public',
'puffy',
'pumped',
'puny',
'purple',
'purring',
'pushy',
'puzzled',
'puzzling',
'quack',
'quaint',
'quarrelsome',
'questionable',
'quick',
'quickest',
'quiet',
'quirky',
'quixotic',
'quizzical',
'rabid',
'racial',
'ragged',
'rainy',
'rambunctious',
'rampant',
'rapid',
'rare',
'raspy',
'ratty',
'ready',
'real',
'rebel',
'receptive',
'recondite',
'redundant',
'reflective',
'regular',
'relieved',
'remarkable',
'reminiscent',
'repulsive',
'resolute',
'resonant',
'responsible',
'rhetorical',
'rich',
'righteous',
'rightful',
'rigid',
'ripe',
'ritzy',
'roasted',
'robust',
'romantic',
'roomy',
'rotten',
'rough',
'round',
'royal',
'ruddy',
'rude',
'rural',
'rustic',
'ruthless',
'sable',
'sad',
'safe',
'salty',
'same',
'sassy',
'satisfying',
'savory',
'scandalous',
'scarce',
'scared',
'scary',
'scattered',
'scientific',
'scintillating',
'scrawny',
'screeching',
'second',
'secret',
'secretive',
'sedate',
'seemly',
'selective',
'selfish',
'separate',
'serious',
'shaggy',
'shaky',
'shallow',
'sharp',
'shiny',
'shivering',
'shocking',
'short',
'shrill',
'shut',
'shy',
'sick',
'silent',
'silky',
'silly',
'simple',
'simplistic',
'sincere',
'sinful',
'skillful',
'skinny',
'sleepy',
'slim',
'slimy',
'slippery',
'sloppy',
'slow',
'small',
'smelly',
'smiling',
'smoggy',
'smooth',
'sneaky',
'snobbish',
'snotty',
'soft',
'soggy',
'solid',
'somber',
'sophisticated',
'sordid',
'sore',
'sour',
'sparkling',
'special',
'spectacular',
'spicy',
'spiffy',
'spiky',
'spiritual',
'spiteful',
'splendid',
'spooky',
'spotless',
'spotted',
'spotty',
'spurious',
'squalid',
'square',
'squealing',
'squeamish',
'staking',
'stale',
'standing',
'statuesque',
'steadfast',
'steady',
'steep',
'stereotyped',
'sticky',
'stiff',
'stimulating',
'stingy',
'stormy',
]
[docs]
def sillyname():
"""
Generate a human readable name by combining a random adjective, a random colour, and a random animal.
There are 87_623_250 possible combinations
:return: str: A silly name.
"""
name = f'{random.choice(ADJECTIVES)}-{random.choice(COLOURS)}-{random.choice(ANIMALS)}'
return name
[docs]
def name_from_int(number: int):
"""
Generate a human readable name by converting a hash value into an integer, then mapping it to a random index in the list of names.
There are 87_623_250 possible combinations
:param number: int: integer - will be capped to the maximum value.
:return: str: A 3 words name.
"""
int_value = number % (len(ADJECTIVES) * len(COLOURS) * len(ANIMALS))
ia = int_value // (len(COLOURS) * len(ANIMALS))
ib = (int_value % (len(COLOURS) * len(ANIMALS))) // len(ANIMALS)
ic = int_value % len(ANIMALS)
return f'{ADJECTIVES[ia]}-{COLOURS[ib]}-{ANIMALS[ic]}'
[docs]
def name_from_hash(hash):
return name_from_int(int(hash.hexdigest(), 16))