且停停停停 发表于 2021-1-5 21:20:03

球球dalao帮忙看看报错原因?

本帖最后由 且停停停停 于 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=
    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")这里报错
感觉我这个思路不太好但素不知道怎么改{:10_245:}

jackz007 发表于 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 !')

且停停停停 发表于 2021-1-6 13:15:32

jackz007 发表于 2021-1-5 22:46


这个代码没有每行输出五个欸{:10_245:}

且停停停停 发表于 2021-1-6 13:18:11

且停停停停 发表于 2021-1-6 13:15
这个代码没有每行输出五个欸

主要头疼的就是每行输出五个
还有我的代码倒数第二行报错原因{:10_269:}

jackz007 发表于 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>

且停停停停 发表于 2021-1-6 14:12:59

jackz007 发表于 2021-1-6 14:00
运行实况

有点没看懂{:10_245:}你这里是怎么实现换行的a
if (i - 1) % 5 == 0:
                print()

jackz007 发表于 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 ...... 的时候就换行了。而这些数字,正好是新行的开始

且停停停停 发表于 2021-1-6 15:08:40

jackz007 发表于 2021-1-6 14:29
如果 i - 1 的值能被 5 整除,那就换行,就是说,i = 6、11、16、21、26、31 ...... 的时候就 ...

为什么不用“\n"就可以实现a?{:10_329:}

jackz007 发表于 2021-1-6 15:20:55

且停停停停 发表于 2021-1-6 15:08
为什么不用“\n"就可以实现a?

      print() 缺省动作就带换行,再写一个的话就会换 2 行了

且停停停停 发表于 2021-1-6 15:40:02

jackz007 发表于 2021-1-6 15:20
print() 缺省动作就带换行,再写一个的话就会换 2 行了

明白了谢谢!!!
页: [1]
查看完整版本: 球球dalao帮忙看看报错原因?