鱼C论坛

 找回密码
 立即注册
查看: 2371|回复: 9

[已解决]球球dalao帮忙看看报错原因?

[复制链接]
发表于 2021-1-5 21:20:03 | 显示全部楼层 |阅读模式

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

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

x
本帖最后由 且停停停停 于 2021-1-5 21:21 编辑

7-1 输出前 n 个Fibonacci数 (10分)
本题要求编写程序,输出菲波那契(Fibonacci)数列的前N项,每行输出5个,题目保证输出结果在长整型范围内。Fibonacci数列就是满足任一项数字是前两项的和(最开始两项均定义为1)的数列,例如:1,1,2,3,5,8,13,...。

输入格式:
输入在一行中给出一个整数N(1≤N≤46)。

输出格式:
输出前N个Fibonacci数,每个数占11位,每行输出5个。如果最后一行输出的个数不到5个,也需要换行。

如果N小于1,则输出"Invalid."

输入样例1:
7
输出样例1:
          1          1          2          3          5
          8         13
输入样例2:
0
输出样例2:
Invalid.
  1. N=int(input())
  2. if N < 1:
  3.     print("Invalid.")
  4. elif N==1:
  5.     print("%+11d"%1)
  6. elif N==2:
  7.     print("          1          1")
  8. else:
  9.     count=0
  10.     a,b=1
  11.     lst=[1,1]
  12.     while count < N :
  13.         c=a+b
  14.         lst.append(c)
  15.         a=b
  16.         b=c
  17.         count+=1
  18.         if len(lst)==5:
  19.             print("%+11d"%i for i in lst,end="\n")
  20.             lst=[]
复制代码

print("%+11d"%i for i in lst,end="\n")这里报错
感觉我这个思路不太好但素不知道怎么改
最佳答案
2021-1-6 14:00:17
且停停停停 发表于 2021-1-6 13:15
这个代码没有每行输出五个欸
  1. def fib(n):
  2.     if n > 2 : return fib(n - 1) + fib(n - 2)
  3.     else : return 1

  4. n = int(input())
  5. if n > 1 :
  6.     for i in range(1 , n + 1):
  7.         if i > 1:
  8.             if (i - 1) % 5 == 0:
  9.                 print()
  10.             else :
  11.                 print(' ' , end = '')
  12.         print('%11d' % fib(i) , end = '')
  13.     print()
  14. else:
  15.     print('invalid !')
复制代码

        运行实况
  1. D:\0002.Exercise\Python>python x.py
  2. 38
  3.           1           1           2           3           5
  4.           8          13          21          34          55
  5.          89         144         233         377         610
  6.         987        1597        2584        4181        6765
  7.       10946       17711       28657       46368       75025
  8.      121393      196418      317811      514229      832040
  9.     1346269     2178309     3524578     5702887     9227465
  10.    14930352    24157817    39088169

  11. D:\0002.Exercise\Python>
复制代码
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2021-1-5 22:46:48 | 显示全部楼层
本帖最后由 jackz007 于 2021-1-5 22:48 编辑
  1. def fib(n):
  2.     if n > 2 : return fib(n - 1) + fib(n - 2)
  3.     else : return 1

  4. n = int(input())
  5. if n > 1 :
  6.     for i in range(n + 1):
  7.         if i > 1 :
  8.             print('\t' , end = '')
  9.         print('%11d' % fib(i) , end = '')
  10.     print()
  11. else:
  12.     print('invalid !')
复制代码
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2021-1-6 13:15:32 | 显示全部楼层

这个代码没有每行输出五个欸
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2021-1-6 13:18:11 | 显示全部楼层
且停停停停 发表于 2021-1-6 13:15
这个代码没有每行输出五个欸

主要头疼的就是每行输出五个
还有我的代码倒数第二行报错原因
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2021-1-6 14:00:17 | 显示全部楼层    本楼为最佳答案   
且停停停停 发表于 2021-1-6 13:15
这个代码没有每行输出五个欸
  1. def fib(n):
  2.     if n > 2 : return fib(n - 1) + fib(n - 2)
  3.     else : return 1

  4. n = int(input())
  5. if n > 1 :
  6.     for i in range(1 , n + 1):
  7.         if i > 1:
  8.             if (i - 1) % 5 == 0:
  9.                 print()
  10.             else :
  11.                 print(' ' , end = '')
  12.         print('%11d' % fib(i) , end = '')
  13.     print()
  14. else:
  15.     print('invalid !')
复制代码

        运行实况
  1. D:\0002.Exercise\Python>python x.py
  2. 38
  3.           1           1           2           3           5
  4.           8          13          21          34          55
  5.          89         144         233         377         610
  6.         987        1597        2584        4181        6765
  7.       10946       17711       28657       46368       75025
  8.      121393      196418      317811      514229      832040
  9.     1346269     2178309     3524578     5702887     9227465
  10.    14930352    24157817    39088169

  11. D:\0002.Exercise\Python>
复制代码
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2021-1-6 14:12:59 | 显示全部楼层

有点没看懂你这里是怎么实现换行的a
  1. if (i - 1) % 5 == 0:
  2.                 print()
复制代码
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2021-1-6 14:29:01 | 显示全部楼层
本帖最后由 jackz007 于 2021-1-6 14:30 编辑
且停停停停 发表于 2021-1-6 14:12
有点没看懂你这里是怎么实现换行的a


        如果 i - 1 的值能被 5 整除,那就换行,就是说,i = 6、11、16、21、26、31 ...... 的时候就换行了。而这些数字,正好是新行的开始
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2021-1-6 15:08:40 | 显示全部楼层
jackz007 发表于 2021-1-6 14:29
如果 i - 1 的值能被 5 整除,那就换行,就是说,i = 6、11、16、21、26、31 ...... 的时候就 ...

为什么不用“\n"就可以实现a?
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2021-1-6 15:20:55 | 显示全部楼层
且停停停停 发表于 2021-1-6 15:08
为什么不用“\n"就可以实现a?

        print() 缺省动作就带换行,再写一个的话就会换 2 行了
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2021-1-6 15:40:02 | 显示全部楼层
jackz007 发表于 2021-1-6 15:20
print() 缺省动作就带换行,再写一个的话就会换 2 行了

明白了谢谢!!!
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-7-3 17:49

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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