python--Fibonacii序列

来源:互联网 发布:java工程师发展前景 编辑:程序博客网 时间:2024/04/30 01:09

背景

Python看了一段时间了,对yield还是了解不透彻。

原来自定的函数里,含有yield的话,就变成了generator了,直接调用函数的话,是没有反应的。最后看一个视频的时候看到演示里面使用type()查看的到了是generator。才知道是怎么回事了。


对象是使用Fibonacii数列。

代码如下:

# -*- encoding = utf-8 -*-import stringimport sys# continue ?def isContinueDone():propt = input("Continue?[Y/y, N/n]: ").strip()if propt.isalpha:if propt in ("Y", "y", "N", "n"):if propt.lower() == "y":fibonacii()else:print("Quit soon.")sys.exit(0)else:print("Out of choice. try again.")isContinueDone()else:print("Invalid choice, try again.")isContinueDone()# definied fibonacii methoddef fibonaciiAlgorithm(max):n, a, b = 0, 0, 1while n<max:yield ba,b = b, a+bn = n+1print("{}-th fibonacii number is {}".format(max, a))# definied main() methoddef fibonacii():while True:propt = input("Enter number[>=1]: ").strip()if propt.isdigit():num = int(propt)if num < 1:print("Specified number is out of range. try again.")fibonacii()else:number = fibonaciiAlgorithm(num)for tmp_num in number:passisContinueDone()else:print("Invalid number...try again.")fibonacii()if __name__ == '__main__':fibonacii()


测试结果如下:

Enter number[>=1]: 1010-th fibonacii number is 55Continue?[Y/y, N/n]: y Enter number[>=1]: 1212-th fibonacii number is 144Continue?[Y/y, N/n]: 10Out of choice. try again.Continue?[Y/y, N/n]: y Enter number[>=1]: 11-th fibonacii number is 1Continue?[Y/y, N/n]: y Enter number[>=1]: 22-th fibonacii number is 1Continue?[Y/y, N/n]: y Enter number[>=1]: 33-th fibonacii number is 2Continue?[Y/y, N/n]: y Enter number[>=1]: 44-th fibonacii number is 3Continue?[Y/y, N/n]: yEnter number[>=1]: 55-th fibonacii number is 5Continue?[Y/y, N/n]: yEnter number[>=1]: 66-th fibonacii number is 8Continue?[Y/y, N/n]: yEnter number[>=1]: 77-th fibonacii number is 13Continue?[Y/y, N/n]: yEnter number[>=1]: 88-th fibonacii number is 21Continue?[Y/y, N/n]: yEnter number[>=1]: 99-th fibonacii number is 34Continue?[Y/y, N/n]: yEnter number[>=1]: 1010-th fibonacii number is 55Continue?[Y/y, N/n]: yEnter number[>=1]: 1111-th fibonacii number is 89Continue?[Y/y, N/n]: yEnter number[>=1]: 1212-th fibonacii number is 144Continue?[Y/y, N/n]: n Quit soon.

0 0