鱼C论坛

 找回密码
 立即注册
查看: 3037|回复: 19

[已解决]python 循环出错

[复制链接]
发表于 2018-1-26 10:18:07 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
python中 要求打印出200内的斐波那契数列

  1. n=0
  2. while True:
  3.     if n<2:
  4.         print(1,end=" ")
  5.         n+=1
  6.     elif n == 2:
  7.         print(n,end=" ")
  8.         n+=1
  9.     elif n>2 and n<200:
  10.         if n == (n-1)+(n-2):
  11.             print(n,end=" ")
  12.             n+=1
  13.         else:
  14.             n+=1
  15.     else:
  16.         break
复制代码


实际打印到数字3就终止了  没明白问题出在哪  求解 。。

最佳答案
2018-1-26 11:50:43
本帖最后由 ba21 于 2018-1-26 11:55 编辑


while n < 200:
已经else:了
if n<200:多此一举

哦。是200以内是吧。哪么:
  1. n=0
  2. while True:
  3.     if n<2:
  4.         print(1,end=" ")

  5.     elif n == 2:
  6.         print(n,end=" ")
  7.         i = 1
  8.         j = 2
  9.         
  10.     else:
  11.         n = i+j
  12.         
  13.         if n>200:
  14.             break
  15.         
  16.         print(n,end=" ")
  17.         i = j
  18.         j = n        
  19.     n+=1

复制代码
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2018-1-26 10:25:19 | 显示全部楼层
最后是循环到n为200才终止的,但3以后没有符合in == (n-1)+(n-2)的,所以没有继续输出。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-1-26 10:25:24 | 显示全部楼层
if n == (n-1)+(n-2):
这步的逻辑有问题啊
当n=5的时候并不能生成新的数
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-1-26 10:28:33 | 显示全部楼层
循环是没有出错,你逻辑错误而已。

这么有水平的代码不知道是谁写的

下面代码做参考。
  1. n=0
  2. while True:
  3.     if n<2:
  4.         print(1,end=" ")

  5.     elif n == 2:
  6.         print(n,end=" ")

  7.     elif n>2 and n<200:
  8.         n = (n-1)+(n-2)
  9.         print(n,end=" ")

  10.     else:
  11.         break
  12.     n+=1
复制代码


错误主要在
elif n>2 and n<200:
        if n == (n-1)+(n-2):
            print(n,end=" ")
            n+=1
        else:
            n+=1
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2018-1-26 10:55:39 | 显示全部楼层
ba21 发表于 2018-1-26 10:28
循环是没有出错,你逻辑错误而已。

这么有水平的代码不知道是谁写的

  
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2018-1-26 11:01:29 | 显示全部楼层
sky 发表于 2018-1-26 10:25
if n == (n-1)+(n-2):
这步的逻辑有问题啊
当n=5的时候并不能生成新的数

在这卡了好久 现在捋捋 想明白了
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2018-1-26 11:07:16 | 显示全部楼层
冬雪雪冬 发表于 2018-1-26 10:25
最后是循环到n为200才终止的,但3以后没有符合in == (n-1)+(n-2)的,所以没有继续输出。

嗯 现在想明白了  
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2018-1-26 11:11:32 | 显示全部楼层
好像还是有问题  这样得出并不是斐波那契数列 。条件判断还是有问题   
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-1-26 11:28:02 | 显示全部楼层
http://www.jb51.net/article/102812.htm
你可以参考下这个文档 看完你就明白了
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-1-26 11:31:04 | 显示全部楼层
用递归代码更简洁
  1. def recur_fibo(n):
  2.     if n <= 1:
  3.         return n
  4.     else:
  5.         return (recur_fibo(n-1)+recur_fibo(n-2))
  6.    

  7. print("斐波那契数列:")
  8. for i in range(200):
  9.     print(recur_fibo(i))
复制代码


用迭代效率更高
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-1-26 11:31:52 | 显示全部楼层

这段高水准的代码,要实现斐波那契数列代码如下:
  1. n=0
  2. while n<200:
  3.     if n<2:
  4.         print(1,end=" ")

  5.     elif n == 2:
  6.         print(n,end=" ")
  7.         i = 1
  8.         j = 2
  9.         
  10.     else:
  11.         n = i+j
  12.         print(n,end=" ")
  13.         i = j
  14.         j = n
  15.     n+=1
复制代码
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2018-1-26 11:34:33 | 显示全部楼层
本帖最后由 雪落千寒丶 于 2018-1-26 11:35 编辑
綉氣 发表于 2018-1-26 11:31
用递归代码更简洁


这个方法能得出正确数列    不过range后面是不是不该写200   输出的 不是200这个数以内的所有值了
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2018-1-26 11:38:11 | 显示全部楼层
ba21 发表于 2018-1-26 11:31
这段高水准的代码,要实现斐波那契数列代码如下:

  大佬不要调侃我了 。 。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2018-1-26 11:42:20 | 显示全部楼层
ba21 发表于 2018-1-26 11:31
这段高水准的代码,要实现斐波那契数列代码如下:
  1. n = 0
  2. while n < 200:
  3.     if n < 2:
  4.         print(1, end=" ")

  5.     elif n == 2:
  6.         print(n, end=" ")
  7.         i = 1
  8.         j = 2

  9.     else:
  10.         n = i + j
  11.         if n<200:
  12.             print(n, end=" ")
  13.             i = j
  14.             j = n
  15.     n += 1
复制代码


   加了个n<200的判断-  这下输出的值就符合要求了  
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-1-26 11:50:43 | 显示全部楼层    本楼为最佳答案   
本帖最后由 ba21 于 2018-1-26 11:55 编辑


while n < 200:
已经else:了
if n<200:多此一举

哦。是200以内是吧。哪么:
  1. n=0
  2. while True:
  3.     if n<2:
  4.         print(1,end=" ")

  5.     elif n == 2:
  6.         print(n,end=" ")
  7.         i = 1
  8.         j = 2
  9.         
  10.     else:
  11.         n = i+j
  12.         
  13.         if n>200:
  14.             break
  15.         
  16.         print(n,end=" ")
  17.         i = j
  18.         j = n        
  19.     n+=1

复制代码
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 1 反对 0

使用道具 举报

 楼主| 发表于 2018-1-26 14:49:00 | 显示全部楼层
ba21 发表于 2018-1-26 11:50
while n < 200:
已经else:了
if n

   现在想到个更简单的办法
  1. a=1
  2. b=1
  3. while a<200:
  4.     print(a,end=" ")
  5.     a,b=b,a+b
复制代码
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-1-26 17:38:13 | 显示全部楼层
雪落千寒丶 发表于 2018-1-26 14:49
现在想到个更简单的办法

抄来的吧。可以结贴了。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2018-1-26 17:53:32 | 显示全部楼层
ba21 发表于 2018-1-26 17:38
抄来的吧。可以结贴了。

还真不是抄来的 不好意思。  和人一起讨论简化来的
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-1-26 17:59:03 | 显示全部楼层
雪落千寒丶 发表于 2018-1-26 17:53
还真不是抄来的 不好意思。  和人一起讨论简化来的



貌似课程里就是用的这个方法
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2018-1-26 19:23:44 | 显示全部楼层
ba21 发表于 2018-1-26 17:59
貌似课程里就是用的这个方法

  这是我们的课堂作业
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-5-5 02:10

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表