首页 > 其他 > 详细

拓展,Fibonacci螺旋

时间:2014-03-03 15:49:38      阅读:446      评论:0      收藏:0      [点我收藏+]
bubuko.com,布布扣
#该程序由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 =   )
bubuko.com,布布扣

测试:

bubuko.com,布布扣
请输入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
bubuko.com,布布扣

拓展,Fibonacci螺旋,布布扣,bubuko.com

拓展,Fibonacci螺旋

原文:http://www.cnblogs.com/fishdm/p/3576933.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!