A sheep–goat hybrid is the hybrid offspring of a sheep and a goat. Although sheep and goats seem similar and can be mated, they belong to different genera in the subfamily Caprinae1 of the family Bovidae2. Sheep belong to the genus Ovis3 and have 54 chromosomes, while goats belong to the genus Capra4 and have 60 chromosomes.

Despite widespread shared pasturing of goats and sheep, hybrids are very rare, indicating the genetic distance between the two species. Supposedly, most sheep–goat hybrids die as embryos. Hybrid male mammals are often sterile, demonstrating a phenomenon known as Haldane's rule5. The Haldane phenomenon may apply even when the parent species have the same number of chromosomes, as in most cat-species hybrids. Hybrid female fertility tends to decrease with increasing divergence in chromosome similarity between parent species. Presumably, this is due to mismatch problems during meiosis and the resulting production of eggs with unbalanced genetic complements.

A lamb of a female sheep (ewe) and a male goat is called a geep. A lamb of a female goat (goatee) and a male sheep (ram) is called a shoat. Both hybrids were thought to be sterile, but on December 29, 2012 two lambs were born in the Netherlands from fertilization by a geep. Analogous, the crossing between a male lion (Panthera leo) and a female tiger (Panthera tigris) is called a liger. In this case, the liger has parents in the same genus but of different species.

pair of ligers
Female (left) and male (right) ligers at Everland Amusement Park in South Korea.

Assignment

Write two functions that can be used to invent names for the offspring that results from crossing two distinct species:

Below, in the editor where you can submit a solution for this assignment, we have already constructed a skeleton for the source code. Before you get started, we recommend to take a look at the video on test-driven development6 where you will learn to work with doctests. This will make you understand the two last statements in the skeleton and the role played by the docstrings that we have already defined in the skeleton for the requested functions.

Example

>>> split('sheep')
('sh', 'eep')
>>> split('goat')
('g', 'oat')

>>> hybridize('sheep', 'goat')
('shoat', 'geep')
>>> hybridize('jaguar', 'leopard')
('jeopard', 'laguar')
>>> hybridize('zebra', 'horse')
('zorse', 'hebra')

Resources