鱼C论坛

 找回密码
 立即注册
查看: 2064|回复: 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.
N=int(input())
if N < 1:
    print("Invalid.")
elif N==1:
    print("%+11d"%1)
elif N==2:
    print("          1          1")
else:
    count=0
    a,b=1
    lst=[1,1]
    while count < N :
        c=a+b
        lst.append(c)
        a=b
        b=c
        count+=1
        if len(lst)==5:
            print("%+11d"%i for i in lst,end="\n")
            lst=[]
print("%+11d"%i for i in lst,end="\n")这里报错
感觉我这个思路不太好但素不知道怎么改
最佳答案
2021-1-6 14:00:17
且停停停停 发表于 2021-1-6 13:15
这个代码没有每行输出五个欸
def fib(n):
    if n > 2 : return fib(n - 1) + fib(n - 2)
    else : return 1

n = int(input())
if n > 1 : 
    for i in range(1 , n + 1):
        if i > 1:
            if (i - 1) % 5 == 0:
                print()
            else :
                print(' ' , end = '')
        print('%11d' % fib(i) , end = '')
    print()
else:
    print('invalid !')
        运行实况
D:\0002.Exercise\Python>python x.py
38
          1           1           2           3           5
          8          13          21          34          55
         89         144         233         377         610
        987        1597        2584        4181        6765
      10946       17711       28657       46368       75025
     121393      196418      317811      514229      832040
    1346269     2178309     3524578     5702887     9227465
   14930352    24157817    39088169

D:\0002.Exercise\Python>
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

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

n = int(input())
if n > 1 : 
    for i in range(n + 1):
        if i > 1 :
            print('\t' , end = '')
        print('%11d' % fib(i) , end = '')
    print()
else:
    print('invalid !')
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

这个代码没有每行输出五个欸
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

主要头疼的就是每行输出五个
还有我的代码倒数第二行报错原因
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

n = int(input())
if n > 1 : 
    for i in range(1 , n + 1):
        if i > 1:
            if (i - 1) % 5 == 0:
                print()
            else :
                print(' ' , end = '')
        print('%11d' % fib(i) , end = '')
    print()
else:
    print('invalid !')
        运行实况
D:\0002.Exercise\Python>python x.py
38
          1           1           2           3           5
          8          13          21          34          55
         89         144         233         377         610
        987        1597        2584        4181        6765
      10946       17711       28657       46368       75025
     121393      196418      317811      514229      832040
    1346269     2178309     3524578     5702887     9227465
   14930352    24157817    39088169

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

使用道具 举报

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

有点没看懂你这里是怎么实现换行的a
if (i - 1) % 5 == 0:
                print()
想知道小甲鱼最近在做啥?请访问 -> 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 ...... 的时候就换行了。而这些数字,正好是新行的开始
想知道小甲鱼最近在做啥?请访问 -> 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?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

        print() 缺省动作就带换行,再写一个的话就会换 2 行了
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

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

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-1-10 11:45

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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