from random import choice, randrange
 
##########################################################################
##############################  klassen Husdjur  #########################
##########################################################################
 
def slumpnamn():
    return choice("BCFKR" ) + \
    choice("iouy") + \
    2*choice("nst") + \
    choice("aey")
 
class Husdjur(object):
    """ Ett virtuellt husdjur """
 
    def __init__(self, namn1="", namn2=""):
        """Ger husdjurets attribut slumpade värden.
           Barn får föräldrarnas namn (namn1 och namn2) som efternamn."""
        self.namn = slumpnamn()
        if namn1 != "" and namn2 != "":
            self.namn = self.namn + "-" + namn1 + "-" + namn2 
        self.glad = randrange(10)
        self.hunger = randrange(3)
        self.kon = choice(["hona","hane"])
        self.preferens = choice(["samma","annat"])
 
     
    def  kontakt(self, kompis):
        """Testar om kontakt uppstår mellan detta husdjur och dess kompis"""
        if (self.kon == kompis.kon):
            if (self.preferens == "samma") and (kompis.preferens == "samma"):
                print("Puss!")
                return True
        elif (self.kon != kompis.kon):
            if (self.preferens == "annat") and (kompis.preferens == "annat"):
                print("Puss!")
                return True
        else:
            return False
 
    def __str__(self):
        """Returnerar en sträng som beskriver husdjuret""" 
        beskrivning = self.namn + " är "
        if self.glad > 5:
            beskrivning += "glad: (^_^)"
        else:
            beskrivning += "ledsen: (T_T)"
        if self.hunger > 3:
            beskrivning += " och hungrig!"
        else:
            beskrivning += " och mätt."
        return beskrivning
 
 
    def banna(self):
        """ Ger husdjuret bannor. Glad minskar."""
        print("- Fy på dig", self.namn, "!")
        self.glad -= 3
 
    def mata(self, mat):
        """Ger husdjuret mat. Hunger minskar."""
        for i in range(mat):
            print("GLUFS", end = " ")
        print
        self.hunger -= mat
 
    def leka(self):
        """Leker med husdjuret. glad och hunger ökar"""
        self.glad += 1
        print("\n~~~~~~~~~~~ WHEEEEEEE! ~~~~~~~~~~~")
        self.hunger  += 3
         
    def avsked(self):
        """Tar avsked."""
        print("Hejdå,", self.namn, "kommer att sakna dig!")
 
 
##########################################################################
##############################  klassen Bur ###########################
##########################################################################
 
class Bur(object):
# Flera virtuella husdjur i en bur
 
    def __init__(self, n):
        """Skapar en lista med n stycken Husdjur"""
        self.lista = []
        for i in range(n):
            self.lista.append(Husdjur())
 
    def banna(self):
        """Skäller på alla djur"""
        for djur in self.lista:
            djur.banna()
             
    def mata(self, bullar):
        """Ger varje djur bullar"""
        for djur in self.lista:
            djur.mata(bullar)
 
    def leka(self):
        """Leker med varje djur"""
        for djur in self.lista:
            djur.leka()
             
    def mingel(self):
        """Låter husdjuren träffas och ev föröka sig"""
        print("Nu är det mingel i Buren!")
        n = len(self.lista)
        for i in range(n):
            djur1 = self.lista[i]
            for j in range(i+1,n):
                djur2 = self.lista[j]
                if djur1 != djur2 and djur1.kontakt(djur2):
                    self.lista.append(Husdjur(djur1.namn,djur2.namn))
 
    def visa(self):
        """Visar alla husdjur i Buren"""
        n  = len(self.lista)
        print("\n*** Det finns", n, "husdjur i Buren: ***")
        for djur in self.lista:
            print(djur)
        print("******************************************\n")
         
    def avsked(self):
        for djur in self.lista:
            djur.avsked()
 
##########################################################################
##############################  main() ###################################
##########################################################################
def main():
 
    n = int(input("Hur många husdjur vill du ha? "))
 
    buren = Bur(n)
    buren.visa()
    svar = input(" Vill du att dina husdjur ska \n  bannas \n  få mat \n  leka \n  mingla? " )
    while svar:
        if svar[0]=="f":
            bullar = int(input("Hur många bullar var? "))
            buren.mata(bullar)    
        elif svar[0]=="b":
            buren.banna()
        elif svar[0]=="l":
            buren.leka()
        elif svar[0]=="m":
            buren.mingel()
        else:
            print("Hursa? ")
        buren.visa()
        svar = input(" Vill du att dina husdjur ska \n  bannas \n  få mat \n  leka \n  mingla? " )
    buren.avsked()
 
main()
