后续可以扩展比如兔子有公母啦、天敌杀掉的兔子数啦、食物不足饿死啦、食物充足可以一窝生俩啦之类的。
当然这份代码还有一点不好的地方,生殖应该由兔子类搞定而不是 Main 类,0 点了- - 懒得改了- - 就酱吧- -
随机死亡如果开始几个月做种的那俩挂了就 GG 惹- -
- """
- 题目:古典问题:有一对兔子,从出生后第3个月起每个月都生一对兔子,小兔子长到第三个月后每个月又生一对兔子,兔子最多可以活 22 个月(年龄越大死亡率越高),问每个月的兔子总数为多少?
- """
- import random
- # 兔子类
- class Rabbit():
- # 兔子的年龄(月)
- age = 0
- # 兔子是否死亡
- die = False
- # 兔子的最大年龄
- MAX_AGE = 22
- # 判断兔子是否可以生小兔子
- def canMultiply(self):
- return self.age > 3
- # 判断兔子是否死亡
- def hasDie(self):
- return self.die
- # doTick
- def doMonth(self):
- self.age += 1
- # 兔子死亡
- if random.randint(self.age, self.MAX_AGE) == self.MAX_AGE:
- self.die = True
- # 主类
- class Main():
- # 兔子列表
- rabbits = []
- lastMonthDie = 0
- lastMonthMultiply = 0
- # 初始化主类
- # rabbit_count 初始兔子数量
- def __init__(self, rabbit_count):
- for i in range(rabbit_count):
- self.addRabbit()
- # 添加一只新的小兔子
- def addRabbit(self):
- self.rabbits.append(Rabbit())
- # doTick
- def doMonth(self):
- self.lastMonthDie = 0
- self.lastMonthMultiply = 0
-
- multiply = 0
- i = 0
- while i < self.getRabbitCount():
- self.rabbits[i].doMonth()
- # 如果兔子死亡了则删掉
- if self.rabbits[i].hasDie():
- del self.rabbits[i]
- i -= 1
- self.lastMonthDie += 1
- else:
- # 如果兔子可以生殖
- if self.rabbits[i].canMultiply():
- multiply += 1
- # 凑够俩可以生的兔子则生小兔子
- if multiply == 2:
- multiply = 0
- self.addRabbit()
- self.lastMonthMultiply += 1
- i += 1
- # 获取当前有多少只兔子
- def getRabbitCount(self):
- return len(self.rabbits)
- # 获取上个月新增了多少只小兔子
- def getLastMonthMultiply(self):
- return self.lastMonthMultiply
- # 获取上个月死亡了多少只兔子
- def getLastMonthDie(self):
- return self.lastMonthDie
- # 测试代码
- if __name__ == "__main__":
- main = Main(2);
- for i in range(1, 31):
- main.doMonth()
- print("现在是第 %d 个月, 剩余兔子: %d, 上个月新增小兔子: %d, 上个月死亡兔子: %s" % (i, main.getRabbitCount(), main.getLastMonthMultiply(), main.getLastMonthDie()))
复制代码
- 现在是第 1 个月, 剩余兔子: 2, 上个月新增小兔子: 0, 上个月死亡兔子: 0
- 现在是第 2 个月, 剩余兔子: 2, 上个月新增小兔子: 0, 上个月死亡兔子: 0
- 现在是第 3 个月, 剩余兔子: 2, 上个月新增小兔子: 0, 上个月死亡兔子: 0
- 现在是第 4 个月, 剩余兔子: 3, 上个月新增小兔子: 1, 上个月死亡兔子: 0
- 现在是第 5 个月, 剩余兔子: 4, 上个月新增小兔子: 1, 上个月死亡兔子: 0
- 现在是第 6 个月, 剩余兔子: 5, 上个月新增小兔子: 1, 上个月死亡兔子: 0
- 现在是第 7 个月, 剩余兔子: 5, 上个月新增小兔子: 1, 上个月死亡兔子: 1
- 现在是第 8 个月, 剩余兔子: 7, 上个月新增小兔子: 2, 上个月死亡兔子: 0
- 现在是第 9 个月, 剩余兔子: 8, 上个月新增小兔子: 2, 上个月死亡兔子: 1
- 现在是第 10 个月, 剩余兔子: 9, 上个月新增小兔子: 3, 上个月死亡兔子: 2
- 现在是第 11 个月, 剩余兔子: 12, 上个月新增小兔子: 3, 上个月死亡兔子: 0
- 现在是第 12 个月, 剩余兔子: 13, 上个月新增小兔子: 3, 上个月死亡兔子: 2
- 现在是第 13 个月, 剩余兔子: 16, 上个月新增小兔子: 4, 上个月死亡兔子: 1
- 现在是第 14 个月, 剩余兔子: 19, 上个月新增小兔子: 5, 上个月死亡兔子: 2
- 现在是第 15 个月, 剩余兔子: 24, 上个月新增小兔子: 5, 上个月死亡兔子: 0
- 现在是第 16 个月, 剩余兔子: 29, 上个月新增小兔子: 7, 上个月死亡兔子: 2
- 现在是第 17 个月, 剩余兔子: 33, 上个月新增小兔子: 8, 上个月死亡兔子: 4
- 现在是第 18 个月, 剩余兔子: 40, 上个月新增小兔子: 9, 上个月死亡兔子: 2
- 现在是第 19 个月, 剩余兔子: 48, 上个月新增小兔子: 12, 上个月死亡兔子: 4
- 现在是第 20 个月, 剩余兔子: 58, 上个月新增小兔子: 13, 上个月死亡兔子: 3
- 现在是第 21 个月, 剩余兔子: 72, 上个月新增小兔子: 17, 上个月死亡兔子: 3
- 现在是第 22 个月, 剩余兔子: 90, 上个月新增小兔子: 22, 上个月死亡兔子: 4
- 现在是第 23 个月, 剩余兔子: 109, 上个月新增小兔子: 27, 上个月死亡兔子: 8
- 现在是第 24 个月, 剩余兔子: 131, 上个月新增小兔子: 30, 上个月死亡兔子: 8
- 现在是第 25 个月, 剩余兔子: 166, 上个月新增小兔子: 39, 上个月死亡兔子: 4
- 现在是第 26 个月, 剩余兔子: 211, 上个月新增小兔子: 51, 上个月死亡兔子: 6
- 现在是第 27 个月, 剩余兔子: 253, 上个月新增小兔子: 62, 上个月死亡兔子: 20
- 现在是第 28 个月, 剩余兔子: 307, 上个月新增小兔子: 73, 上个月死亡兔子: 19
- 现在是第 29 个月, 剩余兔子: 378, 上个月新增小兔子: 90, 上个月死亡兔子: 19
- 现在是第 30 个月, 剩余兔子: 456, 上个月新增小兔子: 111, 上个月死亡兔子: 33
复制代码- 现在是第 1 个月, 剩余兔子: 2, 上个月新增小兔子: 0, 上个月死亡兔子: 0
- 现在是第 2 个月, 剩余兔子: 2, 上个月新增小兔子: 0, 上个月死亡兔子: 0
- 现在是第 3 个月, 剩余兔子: 2, 上个月新增小兔子: 0, 上个月死亡兔子: 0
- 现在是第 4 个月, 剩余兔子: 3, 上个月新增小兔子: 1, 上个月死亡兔子: 0
- 现在是第 5 个月, 剩余兔子: 4, 上个月新增小兔子: 1, 上个月死亡兔子: 0
- 现在是第 6 个月, 剩余兔子: 5, 上个月新增小兔子: 1, 上个月死亡兔子: 0
- 现在是第 7 个月, 剩余兔子: 5, 上个月新增小兔子: 1, 上个月死亡兔子: 1
- 现在是第 8 个月, 剩余兔子: 7, 上个月新增小兔子: 2, 上个月死亡兔子: 0
- 现在是第 9 个月, 剩余兔子: 7, 上个月新增小兔子: 1, 上个月死亡兔子: 1
- 现在是第 10 个月, 剩余兔子: 8, 上个月新增小兔子: 2, 上个月死亡兔子: 1
- 现在是第 11 个月, 剩余兔子: 10, 上个月新增小兔子: 2, 上个月死亡兔子: 0
- 现在是第 12 个月, 剩余兔子: 11, 上个月新增小兔子: 2, 上个月死亡兔子: 1
- 现在是第 13 个月, 剩余兔子: 13, 上个月新增小兔子: 3, 上个月死亡兔子: 1
- 现在是第 14 个月, 剩余兔子: 17, 上个月新增小兔子: 4, 上个月死亡兔子: 0
- 现在是第 15 个月, 剩余兔子: 19, 上个月新增小兔子: 4, 上个月死亡兔子: 2
- 现在是第 16 个月, 剩余兔子: 21, 上个月新增小兔子: 5, 上个月死亡兔子: 3
- 现在是第 17 个月, 剩余兔子: 28, 上个月新增小兔子: 7, 上个月死亡兔子: 0
- 现在是第 18 个月, 剩余兔子: 36, 上个月新增小兔子: 9, 上个月死亡兔子: 1
- 现在是第 19 个月, 剩余兔子: 44, 上个月新增小兔子: 10, 上个月死亡兔子: 2
- 现在是第 20 个月, 剩余兔子: 53, 上个月新增小兔子: 12, 上个月死亡兔子: 3
- 现在是第 21 个月, 剩余兔子: 60, 上个月新增小兔子: 14, 上个月死亡兔子: 7
- 现在是第 22 个月, 剩余兔子: 71, 上个月新增小兔子: 17, 上个月死亡兔子: 6
- 现在是第 23 个月, 剩余兔子: 90, 上个月新增小兔子: 22, 上个月死亡兔子: 3
- 现在是第 24 个月, 剩余兔子: 111, 上个月新增小兔子: 24, 上个月死亡兔子: 3
- 现在是第 25 个月, 剩余兔子: 132, 上个月新增小兔子: 29, 上个月死亡兔子: 8
- 现在是第 26 个月, 剩余兔子: 155, 上个月新增小兔子: 35, 上个月死亡兔子: 12
- 现在是第 27 个月, 剩余兔子: 189, 上个月新增小兔子: 44, 上个月死亡兔子: 10
- 现在是第 28 个月, 剩余兔子: 219, 上个月新增小兔子: 49, 上个月死亡兔子: 19
- 现在是第 29 个月, 剩余兔子: 257, 上个月新增小兔子: 61, 上个月死亡兔子: 23
- 现在是第 30 个月, 剩余兔子: 312, 上个月新增小兔子: 74, 上个月死亡兔子: 19
复制代码 |