# -*- coding: cp1252 -*-

from random import choice, randrange

##########################################################################
##############################  klassen Husdjur  #########################
##########################################################################

class Husdjur(object):
    """ Ett virtuellt husdjur """

    def __init__(self, namn1="", namn2=""):
        """Ger husdjurets attribut slumpade värden"""
        self.namnet = choice("BCFKR" )+choice("iouy")+\
                    choice("nst")*2+choice("aey")
        if namn1:
            self.namnet = namn1 + "-" + namn2 + "-" + self.namnet
        self.__glad = randrange(10)
        self.__hunger = randrange(3)
        self.__kon = choice(("hona","hane"))
        self.__preferens = choice(("samma","annat"))

    def  namn(self):
        """Åtkomstmetod för namnet"""
        return self.namnet

    def  bytNamn(self, nyttNamn):
        """Ändringsmetod för namnet"""
        self.namnet = nyttNamn
    
    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.namnet + " ä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.namnet, "!")
        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.namnet, "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()

##########################################################################
##############################  funktionen 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()
