【问题标题】:Index error when trying to write to text file尝试写入文本文件时出现索引错误
【发布时间】:2018-09-25 04:56:42
【问题描述】:

我正在编写一个程序来列出最多n=21 的斐波那契数,并将它们以以下格式写入 txt 文件:

n  Fn  
0  0  
1  1  
2  1  etc

我已设法打印出所有数字,但我无法将它们写入文件。

我的代码是:

import numpy as np

def fib(n):
    if n <= 1:
       return n
    else:                      
       return fib(n-1) + fib(n-2)

n = 22

for i in range(n):   
    print(i, fib(i))

np.savetxt('fibonacci.txt',fib(i), header =" n Fn")

我也知道这段代码只会写入 Fn 的值,但我不知道如何以我正在寻找的格式写入文件

目前这段代码给了我错误:

IndexError: 元组索引超出范围

【问题讨论】:

  • 您不能使用np.savetxt 将数字保存到文件中。
  • 运行此代码时我没有收到您的错误,而是收到了ValueError: Expected 1D or 2D array, got 0D array instead,考虑到np.savetxt 将1D 或2D 数组作为输入,这是有道理的。跨度>

标签: python numpy


【解决方案1】:

在使用 np.savetext 函数时,您需要将数组数据保存到文件中。 试试这个:

import numpy as np

def fib(n):
    if n <= 1:
       return n
    else:                      
       return fib(n-1) + fib(n-2)

n = 22

data = []
for i in range(n):
    row = []
    row.append(i)
    row.append(fib(i))
    data.append(row)

print(data)

np.savetxt('fibonacci.txt',data, header =" n Fn")

【讨论】:

    【解决方案2】:

    我会假装这不是家庭作业。

    在 python 中,typical way to write text to a file 越多,类似于:

    with open('myfile.txt', 'w') as F:
        F.write('n\tFn\n')
        for i in range(n):
            F.write('{}\t{}\n'.format(i, fib(i)))
    

    另外,你的fib 函数应该使用memoization,或者如果你想完全避开作业并且什么都不学,使用closed form。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2011-02-25
      • 2021-11-25
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多