雪落千寒丶 发表于 2018-1-26 10:18:07

python 循环出错

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

n=0
while True:
    if n<2:
      print(1,end=" ")
      n+=1
    elif n == 2:
      print(n,end=" ")
      n+=1
    elif n>2 and n<200:
      if n == (n-1)+(n-2):
            print(n,end=" ")
            n+=1
      else:
            n+=1
    else:
      break


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

冬雪雪冬 发表于 2018-1-26 10:25:19

最后是循环到n为200才终止的,但3以后没有符合in == (n-1)+(n-2)的,所以没有继续输出。

sky 发表于 2018-1-26 10:25:24

if n == (n-1)+(n-2):
这步的逻辑有问题啊
当n=5的时候并不能生成新的数

ba21 发表于 2018-1-26 10:28:33

循环是没有出错,你逻辑错误而已。

这么有水平的代码不知道是谁写的{:10_247:}

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

    elif n == 2:
      print(n,end=" ")

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

    else:
      break
    n+=1


错误主要在
elif n>2 and n<200:
      if n == (n-1)+(n-2):
            print(n,end=" ")
            n+=1
      else:
            n+=1

雪落千寒丶 发表于 2018-1-26 10:55:39

ba21 发表于 2018-1-26 10:28
循环是没有出错,你逻辑错误而已。

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


{:9_229:}

雪落千寒丶 发表于 2018-1-26 11:01:29

sky 发表于 2018-1-26 10:25
if n == (n-1)+(n-2):
这步的逻辑有问题啊
当n=5的时候并不能生成新的数

{:9_238:}在这卡了好久 现在捋捋 想明白了

雪落千寒丶 发表于 2018-1-26 11:07:16

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

嗯 现在想明白了

雪落千寒丶 发表于 2018-1-26 11:11:32

好像还是有问题这样得出并不是斐波那契数列 。条件判断还是有问题 {:10_266:}

綉氣 发表于 2018-1-26 11:28:02

http://www.jb51.net/article/102812.htm
你可以参考下这个文档 看完你就明白了

綉氣 发表于 2018-1-26 11:31:04

用递归代码更简洁
def recur_fibo(n):
    if n <= 1:
      return n
    else:
      return (recur_fibo(n-1)+recur_fibo(n-2))
   

print("斐波那契数列:")
for i in range(200):
    print(recur_fibo(i))

用迭代效率更高

ba21 发表于 2018-1-26 11:31:52

雪落千寒丶 发表于 2018-1-26 10:55


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

    elif n == 2:
      print(n,end=" ")
      i = 1
      j = 2
      
    else:
      n = i+j
      print(n,end=" ")
      i = j
      j = n
    n+=1

雪落千寒丶 发表于 2018-1-26 11:34:33

本帖最后由 雪落千寒丶 于 2018-1-26 11:35 编辑

綉氣 发表于 2018-1-26 11:31
用递归代码更简洁




这个方法能得出正确数列{:9_232:}不过range后面是不是不该写200   输出的 不是200这个数以内的所有值了

雪落千寒丶 发表于 2018-1-26 11:38:11

ba21 发表于 2018-1-26 11:31
这段高水准的代码,要实现斐波那契数列代码如下:

{:9_229:}大佬不要调侃我了 。 。

雪落千寒丶 发表于 2018-1-26 11:42:20

ba21 发表于 2018-1-26 11:31
这段高水准的代码,要实现斐波那契数列代码如下:

n = 0
while n < 200:
    if n < 2:
      print(1, end=" ")

    elif n == 2:
      print(n, end=" ")
      i = 1
      j = 2

    else:
      n = i + j
      if n<200:
            print(n, end=" ")
            i = j
            j = n
    n += 1

   加了个n<200的判断-这下输出的值就符合要求了{:9_240:}

ba21 发表于 2018-1-26 11:50:43

本帖最后由 ba21 于 2018-1-26 11:55 编辑

雪落千寒丶 发表于 2018-1-26 11:42
加了个n

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

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

    elif n == 2:
      print(n,end=" ")
      i = 1
      j = 2
      
    else:
      n = i+j
      
      if n>200:
            break
      
      print(n,end=" ")
      i = j
      j = n      
    n+=1

雪落千寒丶 发表于 2018-1-26 14:49:00

ba21 发表于 2018-1-26 11:50
while n < 200:
已经else:了
if n

{:9_229:}   现在想到个更简单的办法a=1
b=1
while a<200:
    print(a,end=" ")
    a,b=b,a+b

ba21 发表于 2018-1-26 17:38:13

雪落千寒丶 发表于 2018-1-26 14:49
现在想到个更简单的办法

抄来的吧。{:10_339:}可以结贴了。

雪落千寒丶 发表于 2018-1-26 17:53:32

ba21 发表于 2018-1-26 17:38
抄来的吧。可以结贴了。

还真不是抄来的 不好意思。和人一起讨论简化来的 {:10_312:}

ba21 发表于 2018-1-26 17:59:03

雪落千寒丶 发表于 2018-1-26 17:53
还真不是抄来的 不好意思。和人一起讨论简化来的

{:5_106:}

貌似课程里就是用的这个方法

雪落千寒丶 发表于 2018-1-26 19:23:44

ba21 发表于 2018-1-26 17:59
貌似课程里就是用的这个方法

{:10_285:}这是我们的课堂作业
页: [1]
查看完整版本: python 循环出错