它在哪里被视为int?

2024-10-03 23:22:48 发布

您现在位置:Python中文网/ 问答频道 /正文

我见过类似问题的答案,但在代码中找不到把x当作int的地方

import matplotlib.pyplot as plt
import numpy as np

def aitken(x,y,value,n):
    if n == 1:
        return y[0]
    first_array = x.pop(n-1)
    second_array = x.pop(n-2)
    first_y = y.pop(n-1)
    second_y = y.pop(n-2)
    n1 = n-1
    return (aitken(first_array,first_y,value,n1)*(value - x[n-1]) - aitken(second_array, second_y,value,n1)*(value - x[n-2]))/(x[n-1] - x[n-2])

x = [1, 4, 7, 11, 15, 20, 30, 50, 77, 92, 100]
y = [5, 20, 52, 121, 228, 403, 903, 2504, 5929, 8464, 10005]
n = len(x)
x_fit = np.arange(0,104,1)
y_fit = aitken(x,y,x_fit,n)

以下是错误消息:

  File "exl.py", line 17, in <module>
    y_fit = aitken(x,y,x_fit,n)
  File "exl.py", line 13, in aitken
    return (aitken(first_array,first_y,value,n1)*(value - x[n-1]) - aitken(second_array, second_y,value,n1)*(value - x[n
-2]))/(x[n-1] - x[n-2])
  File "exl.py", line 8, in aitken
    first_array = x.pop(n-1)
AttributeError: 'int' object has no attribute 'pop'

对不起,这个问题太简单了。我对Python还不熟悉。你知道吗


Tags: inpyreturnvaluelinearraypopfit
3条回答

您遇到的问题是,当您递归调用数组时,不再将数组传递给函数。你知道吗

    first_array = x.pop(n-1)
    second_array = x.pop(n-2)

这不是给你一个数组,而是给你一个位置(n-1)的值。例如:

x = [1, 4, 7, 11, 15, 20, 30, 50, 77, 92, 100]
first_array = x.pop(n-1)
# first_array = 100
# x = [1, 4, 7, 11, 15, 20, 30, 50, 77, 92]

因此,当您传入第一个数组并尝试弹出x时,它不再是一个数组,并且会抛出一个错误。相反,您需要修改您的返回值,因此您传递的不是一个标量,而是一个数组。我希望这有帮助,祝你好运。你知道吗

一旦函数达到返回值,您就将第一个数组传递给它,您认为它是一个列表。你知道吗

第一个数组是整数,因为pop函数返回:

列表中的最后一个值或给定的索引值。你知道吗

变量first_数组是一个int,因为它是列表x(都是int)的一个元素。如果不使用与主脚本中变量相同的函数参数名称,则调试会更容易。你知道吗

相关问题 更多 >