Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- import random
- import math
- class Animal():
- def __init__(self, colour, age, gender):
- self.colour = colour
- self.age = age
- self.gender = gender
- def get_colour(self):
- return self.colour
- def get_age(self):
- return self.age
- def get_gender(self):
- return self.gender
- def set_colour(self, colour):
- self.colour = colour
- def set_age(self, age):
- self.age = age
- def advance_age(self):
- self.age += 1
- def noise(self):
- print("Noise!")
- class Rabbit(Animal):
- def __init__(self, colour, age, ear_type, gender):
- super().__init__(colour, age, gender) #calls super constructor or it will be overriden
- self.ear_type = ear_type # encapsulation, only public methods are accessed
- def get_ear_type(self):
- return self.ear_type
- def get_details(self): # example of polymorphism with fox's get_details, same name different code
- attributes = "Rabbit is a {} year old {} {} with {} ears!".format(self.age, self.colour, self.gender, self.ear_type)
- return attributes
- def slaughter(self):
- self = None
- def noise(self):
- print("Meow!")
- class Fox(Animal): # inhertience
- def __init__(self, colour, age, hungriness, gender, size):
- super().__init__(colour, age, gender)
- self.hungriness = hungriness
- self.size = size
- def get_hungriness(self):
- return self.hungriness
- def get_size(self):
- return self.size
- def set_hungriness(self, hungriness):
- self.hungriness = hungriness
- def set_size(self, size):
- self.size = size
- def eat(self, rabbits):
- if self.hungriness > 0:
- self.hungriness -= math.ceil(rabbits/self.size)
- def advance_hungriness(self):
- self.hungriness += 1
- def get_details(self):
- if self.hungriness == 0:
- hungriness = "full"
- elif self.hungriness == 1:
- hungriness = "peckish"
- elif self.hungriness == 2:
- hungriness = "hungry"
- elif self.hungriness == 3:
- hungriness = "very hungry"
- elif self.hungriness == 4:
- hungriness = "starving"
- attributes = "Fox is a {} year old {} {} and is {}!".format(self.age, self.size, self.colour, hungriness)
- return attributes
- def noise(self):
- print("Oink!")
- class AnimalGroup():
- def __init__(self):
- self.container = []
- self.capacity = 100
- def add_animal(self, animal):
- if (self.is_full() == False):
- self.container.append(animal)
- return True
- else:
- return False
- def get_fullness(self):
- return len(self.container)
- def get_capacity(self):
- return self.capacity
- def is_full(self):
- if len(self.container) >= self.capacity:
- return True
- else:
- return False
- def exterminate(self):
- for i in self.container:
- i = None
- self.container = []
- def kill(self, index):
- self.container.pop(index)
- def display(self):
- if self.container != []:
- for i in self.container:
- print(i.get_details())
- else:
- print("It's empty!")
- class Warren(AnimalGroup):
- def __init__(self):
- super().__init__()
- class FoxGang(AnimalGroup):
- def __init__(self):
- super().__init__()
- self.capacity = 10
- class Island():
- def __init__(self):
- self.warrens = []
- self.fox_gangs = []
- def add_warren(self, warren):
- self.warrens.append(warren)
- def get_warrens(self):
- return self.warrens
- def add_fox_gang(self, gang):
- self.fox_gangs.append(gang)
- def get_fox_gangs(self):
- return self.fox_gangs
- def make_rabbits(num_rabbits, warren):
- rabbit_colours = ["red", "black", "pink", "blue", "orange", "rainbow", "white"]
- rabbit_ear_types = ["floppy", "straight", "no", "swirly"]
- rabbit_genders = ["male", "female", "cross fitting vaping 1976 apache attack helicopter"]
- for i in range(num_rabbits):
- age = random.randint(0,10)
- colour = rabbit_colours[random.randint(0,len(rabbit_colours)-1)]
- ear_type = rabbit_ear_types[random.randint(0,len(rabbit_ear_types)-1)]
- gend_rand = random.randint(0,1000)
- if gend_rand >= 0 and gend_rand <= 49:
- gend_rand = 0
- elif gend_rand >= 500 and gend_rand <= 999:
- gend_rand = 1
- else:
- gend_rand = 2
- gender = rabbit_genders[gend_rand]
- not_full = warren.add_animal(Rabbit(colour, age, ear_type, gender))
- if not_full == False:
- print("\nError - Warren is full, no more rabbits can be added to it!!!\n")
- break
- return warren
- def make_foxes(num_foxes, fox_gang):
- fox_colour = ["black", "orange", "ginger", "green"]
- fox_gender = ["male", "female"]
- fox_size = ["tiny", "small", "medium", "large", "hugh mungus"]
- for i in range(num_foxes):
- age = random.randint(0, 15)
- colour = fox_colour[random.randint(0,len(fox_colour)-1)]
- gender = fox_gender[random.randint(0,len(fox_gender)-1)]
- size = fox_size[random.randint(0,len(fox_size)-1)]
- hungriness = 0
- not_full = fox_gang.add_animal(Fox(colour, age, hungriness, gender, size))
- if not_full == False:
- print("\nError - Fox gang is full, no more foxes can be added to it!!!\n")
- break
- return fox_gang
- def simulation():
- island = Island()
- island.add_warren(Warren())
- island.add_fox_gang(FoxGang())
- make_rabbits(100, island.warrens[0])
- make_foxes(10, island.fox_gangs[0])
- island.warrens[0].display()
- print("")
- island.fox_gangs[0].display()
- print("")
- while True: #run simulation
- # for i in range(len(island.fox_gangs)):
- # for j in range(island.warrens[i].get_capacity()):
- # if random.randint(0,12) > 5:
- # rabbits_eaten = random.randint(0,10)
- # island.fox_gangs[i].container[j].eat(rabbits_eaten)
- #for k in range(island.warrens[i].get_capacity()): # deletes rabits that no longer exist due to pop
- # island.warrens[i].kill(k)
- for i in range(len(island.warrens)):
- for j in range(island.warrens[i].get_capacity()):
- island.warrens[i].container[j].advance_age()
- for i in range(len(island.fox_gangs)):
- for j in range(island.fox_gangs[i].get_capacity()):
- island.fox_gangs[i].container[j].advance_age()
- for i in range(len(island.warrens)):
- for j in range(island.warrens[i].get_capacity()):
- if random.randint(1,500) <= 1:
- island.warrens[i].container[j].noise()
- for i in range(len(island.fox_gangs)):
- for j in range(island.fox_gangs[i].get_capacity()):
- if random.randint(1,500) <= 1:
- island.fox_gangs[i].container[j].noise()
- for i in range(len(island.warrens)): # old age killer
- for j in range(island.warrens[i].get_fullness()): #problem deletes rabbit from list then tries to do stuff to a rabbit that don't exist no more
- if island.warrens[i].container[j].get_age() >= 5:
- if island.warrens[i].container[j].get_age()/random.randint(1,3) > 5:
- island.warrens[i].kill(j)
- #print("Dead")
- for i in range(len(island.fox_gangs)):
- for j in range(island.fox_gangs[i].get_fullness()): #problem same as above
- if island.fox_gangs[i].container[j].get_age() >= 5:
- if island.fox_gangs[i].container[j].get_age()/random.randint(1,3) > 6:
- island.fox_gangs[i].kill(j)
- j -= 1
- #print("Dead")
- if island.fox_gangs[i].container[j].get_hungriness() == 5:
- island.fox_gangs[i].kill(j)
- #island.warrens[0].display()
- #print("")
- #island.fox_gangs[0].display()
- def main():
- #dave1 = Rabbit("red", 1, "floppy", "male")
- #dave2 = Rabbit("blue", 2, "straight", "cross fitting vaping 1976 apache attack helicopter")
- #dave3 = Rabbit("pink", 45, "no", "female")
- #print(dave1)
- #print(dave1.colour) #VERY BAD DON'T DO IT, UNDERSCORES STOP US DOING IT
- #print(dave2.get_colour()) #VERY PROFFESINOAL DO IT ALL THE TIME
- #warren1.add_bunny(dave1)
- #warren1.add_bunny(dave2)
- #warren1.add_bunny(dave3)
- #warren1.display()
- #warren1.exterminate()
- #warren1.display()
- simulation()
- main()
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement