拓展,Fibonacci螺旋
#该程序由023递归这课中的fibonacci数列递归写法修改而成 #在写的过程中发现,如果要正确引导用户的每一次输入,写的代码比主程序还要多 #当然,为了使程序在用户交互过程中显得更加友好,提供错误提示也是一个好习惯 # #由fibonacci螺旋递归写法引申出的字串符格式化和内置方法的探索 level = input('请输入Fibonacci螺旋层数:') #判断输入字符是否为大于0的整数,.isdigit()方法是判断字串符是否为整数 #当然非数字或者是小数点都不在整数范围 #在shell测试了一下发现负整数也不能用.isdigit()方法 while not level.isdigit() or int(level) == 0: level = input('输入错误,请重新输入大于0的正整数):') #注意,我在这里用了float使输入的数字变为浮点数 #以我现在的知识,如果这里不用float转化, #那么接下来的函数里 fab(level-1) + fab(level-2)会变为字串符的拼接。原因目前未明。 print('注意:两个数字不能同时为0!') FirstNum = float(input('第一个数字')) SecondNum = float(input('第二个数字')) #判断两个数字是否同时为0,注意,用and这个操作符 while FirstNum == 0 and SecondNum == 0: print('注意:两个数字不能同时为0!') FirstNum = float(input('第一个数字')) SecondNum = float(input('第二个数字')) #循环打印输出,如果不加for语句,那么只输出最后那个结果 #如果for level in里的level换成其他,那么 for level in range(1,int(level)+1): #以下是递归主程序 def fab(level): #初始最开始两个数字的值 if level == 1: global FirstNum return FirstNum elif level == 2: global SecondNum return SecondNum #如果没有上面那两个if判断,那么程序将进入死循环,原因是不是因为递归没给初始值呢? else: return (fab(level-1) + fab(level-2)) result = fab(level) #%.2f把浮点数格式化为带两个小数点输出 print('%.2f' % result, end = ' ')
测试:
请输入Fibonacci螺旋层数:abc 输入错误,请重新输入大于0的正整数):-5 输入错误,请重新输入大于0的正整数):0 输入错误,请重新输入大于0的正整数):8 注意:两个数字不能同时为0! 第一个数字-2.9 第二个数字3.15 -2.90 3.15 0.25 3.40 3.65 7.05 10.70 17.75