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就终止了没明白问题出在哪求解 。。
最后是循环到n为200才终止的,但3以后没有符合in == (n-1)+(n-2)的,所以没有继续输出。 if n == (n-1)+(n-2):
这步的逻辑有问题啊
当n=5的时候并不能生成新的数 循环是没有出错,你逻辑错误而已。
这么有水平的代码不知道是谁写的{: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 ba21 发表于 2018-1-26 10:28
循环是没有出错,你逻辑错误而已。
这么有水平的代码不知道是谁写的
{:9_229:} sky 发表于 2018-1-26 10:25
if n == (n-1)+(n-2):
这步的逻辑有问题啊
当n=5的时候并不能生成新的数
{:9_238:}在这卡了好久 现在捋捋 想明白了 冬雪雪冬 发表于 2018-1-26 10:25
最后是循环到n为200才终止的,但3以后没有符合in == (n-1)+(n-2)的,所以没有继续输出。
嗯 现在想明白了 好像还是有问题这样得出并不是斐波那契数列 。条件判断还是有问题 {:10_266:} http://www.jb51.net/article/102812.htm
你可以参考下这个文档 看完你就明白了 用递归代码更简洁
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))
用迭代效率更高 雪落千寒丶 发表于 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:35 编辑
綉氣 发表于 2018-1-26 11:31
用递归代码更简洁
这个方法能得出正确数列{:9_232:}不过range后面是不是不该写200 输出的 不是200这个数以内的所有值了 ba21 发表于 2018-1-26 11:31
这段高水准的代码,要实现斐波那契数列代码如下:
{:9_229:}大佬不要调侃我了 。 。 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: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
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 雪落千寒丶 发表于 2018-1-26 14:49
现在想到个更简单的办法
抄来的吧。{:10_339:}可以结贴了。 ba21 发表于 2018-1-26 17:38
抄来的吧。可以结贴了。
还真不是抄来的 不好意思。和人一起讨论简化来的 {:10_312:} 雪落千寒丶 发表于 2018-1-26 17:53
还真不是抄来的 不好意思。和人一起讨论简化来的
{:5_106:}
貌似课程里就是用的这个方法 ba21 发表于 2018-1-26 17:59
貌似课程里就是用的这个方法
{:10_285:}这是我们的课堂作业
页:
[1]