原题链接:http://www.runoob.com/python/python-exercise-example11.html
题目:古典问题:有一对兔子,从出生后第3个月起每个月都生一对兔子,小兔子长到第三个月后每个月又生一对兔子,假如兔子都不死,问每个月的兔子总数为多少?
分析:看起来挺复杂的,但是把每个月兔子数列出来:1,1,2,3,5,8,13... 就是斐波拉契序列。 所以编程核心是要实现后一个月等于前两个月的加和。使用了最近学的生成器写。
我的代码:
def rabbit(): a=b=1 while True: yield a a,b=b,a+b month =1 if __name__ =='__main__': for i in rabbit(): #这是个无限循环,因为题目也没有说多少个月。。。要用ctrl终止 print("month:%d rabbits:%d" %(month,i)) month +=1 #可以对month设置if条件语句,然后break循环
思考:
1.生成器的使用可以用for或者next
但是循环next(rabbit())是不行的,每次循环都是重新开始,所以输出的都是1
应该x=rabbit() 然后循环next(x)。
2.yield产生的数据,用next()也不能打出来,要再用个print()才会打出来。