Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/356.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在Python中定义函数时如何调用列表?_Python_List_Function_Parameters_Arguments - Fatal编程技术网

在Python中定义函数时如何调用列表?

在Python中定义函数时如何调用列表?,python,list,function,parameters,arguments,Python,List,Function,Parameters,Arguments,我事先道歉。我是一个编码初学者 我尝试使用Python编写一个函数,使用包含节点位置的两个列表计算多边形的面积,代码如下: def Area(xvalues, yvalues): area = 0 stepone = 0 for x in xvalues: for y in yvalues: stepone = stepone + (xvalues(x)-xvalues(0))*(yvalues(y+1)-yvalues(y-1))

我事先道歉。我是一个编码初学者

我尝试使用Python编写一个函数,使用包含节点位置的两个列表计算多边形的面积,代码如下:

def Area(xvalues, yvalues):
    area = 0
    stepone = 0
    for x in xvalues:
        for y in yvalues:
            stepone = stepone + (xvalues(x)-xvalues(0))*(yvalues(y+1)-yvalues(y-1))
            area = abs(stepone)/2
    print area

xvalues = [2000, 2126, 2716, 2524, 2518, 2000]
yvalues = [1000, 1256, 1102, 408, 611, 1000]

Area(xvalues, yvalues)
然而,我得到一个错误,声明“TypeError:“list”对象不可调用”

我只想让这个等式在列表中循环并返回最终的结果。我不确定哪里出了问题,但我认为这可能与我的函数参数有关


任何帮助都将不胜感激。

您将收到错误,因为您试图将列表作为函数(“调用它”)运行。从列表中访问元素的语法如下所示:

>>myList = [1,2,3,4]
>>print mylist[1]
2
因此,在公式中应该使用方括号而不是大括号。再看一下你的代码,我意识到你是用绝对值来计算你在循环中的面积。固定代码的形式如下。但是,由于时间紧迫,我无法检查您用于计算stepone的逻辑,因此我仅在此处留下评论:

def Area(xvalues, yvalues):
    area = 0
    stepone = 0
    for x in xvalues:
        for y in yvalues:
            # logic to calculate stepone
    area = abs(stepone)/2
    return area

xvalues = [2000, 2126, 2716, 2524, 2518, 2000]
yvalues = [1000, 1256, 1102, 408, 611, 1000]

print Area(xvalues, yvalues)

请注意,我还更改了函数以返回区域的值,而不是打印它。(这只是一个很好的做法。

您试图在这里调用
xvalues(x)
。如果
x
是一个索引,那么您需要
xvalues[x]
使用方括号而不是括号,但是
x
已经是元素本身了!但是,看起来您试图访问的元素与从迭代器中获取的元素不同。您可以在范围(len(xvalues))中循环
x
,如下所示:

def Area(xvalues, yvalues):
    area = 0
    stepone = 0
    for x in range(len(xvalues)):
        for y in range(len(yvalues)):
            stepone = stepone + (xvalues[x]-x[0])*(yvalues[y+1]-yvalues[y-1])
            area = abs(stepone)/2
    print area
但是它有两个问题。首先,
y值[y-1]
没有给你你所期望的
y
0
。我不知道你希望从中得到什么。我能猜到的最好结果是:

def Area(xvalues, yvalues):
    area = 0
    stepone = 0
    firstx = xvalues[0]
    for x in xvalues:
        for y1, y2 in zip(yvalues[1:], yvalues[:-1]):
            stepone = stepone + (x-firstx)*(y1-y2)
            area = abs(stepone)/2
    print area
zip
创建一个新列表,对其进行迭代,并将y1和y2分配给以下元素:
[(12561000),(11021256),(4081102),(611408),(1000611)]

“类型错误:'list'对象不可调用”是因为您试图像函数一样使用列表而引发的

xvalues
yvalues
是列表,因此当您访问它们时,您需要使用数组表示法。圆括号通常用于函数,但列表不是函数,不能像圆括号中的函数那样调用。因此,正如错误所说,“不可调用”

相反,使用方括号进行索引

也就是说,xvalues中的第一个值可以通过调用
xvalues[0]
找到,第三个值可以通过
xvalues[2]
找到,最后一个值可以通过
xvalues[-1]

要了解列表操作的更多信息,请阅读本页!:)

当您在xvalues中为x编写行
时,我注意到您在编写x[0]时试图将x用作列表。但是
x
xvalues
列表的一个元素。。这意味着x是一个整数,而不是一个列表

你可以想象一个循环-

对于x中的x值:
…

-实际上与:

范围内ii的
(0,len(xvalue)):
x=x值[ii]
…


希望这有帮助

要解决您的问题,您只需

x_values = [2000, 2126, 2716, 2524, 2518, 2000]
y_values = [1000, 1256, 1102, 408, 611, 1000]

area = 0
for x1, y1, x2, y2 in zip(x_values, y_values, x_values[1:], y_values[1:]):
    area += x1 * y2 - x2 * y1
area = abs(area) * 0.5

对于这些坐标,这将产生
272472.0

您认为
stepone=stepone+…
行具体可以做什么?这就是问题所在,括号中应该有括号,但是
x(0)
非常混乱。假设这一行是:stepone=stepone+(xvalues(x)-xalues(0))*(yvalues(y+1)-yvalues(y-1))xvalues/yvalues后面的子值应该与列表中的位置相对应。将来:请仔细查看回溯,它将准确地告诉您哪一行有问题,以及原因。这通常会让你更接近。是的,我没有认真研究数学表达式。不过,我打算回避几何问题。:)你的评论帮助我取得了很大的进步。我想我很接近了。我试图告诉代码,如果索引位置小于0或大于5,则无需执行任何操作。我添加了if语句(如果y<0或y>6:),但我设置它的方式是查看列表中该索引位置的值(例如:1000、1256、1102、408、611、1000),而不是实际的索引位置本身(例如0、1、2、3、4或5)。有没有直接查看索引位置的方法?我的第一个示例是迭代索引位置<代码>适用于范围内的x(len(xvalues))
是!!对于范围内的x(len(xvalues)-1),解决了该问题。谢谢你的帮助!