使用类计算任意多边形周长的代码(python)

使用类计算任意多边形周长的代码(python),python,python-3.x,class,Python,Python 3.x,Class,所以我这里有我的主程序(我绝对不能做任何更改,因为这是我们的讲师希望它运行的方式): 基本上,我有两个单独的文件,包含类多边形和类点的定义 这是我的类点代码,它具有计算两个给定点之间距离的功能: class Point: def __init__(self, x, y): self.x = x self.y = y def distance(self, second): x_d = self.x - second.x

所以我这里有我的主程序(我绝对不能做任何更改,因为这是我们的讲师希望它运行的方式):

基本上,我有两个单独的文件,包含类多边形和类点的定义

这是我的类点代码,它具有计算两个给定点之间距离的功能:

class Point:
    def __init__(self, x, y):
        self.x = x
        self.y = y
    def distance(self, second):
        x_d = self.x - second.x
        y_d = self.y - second.y
        return (x_d**2 + y_d**2) **0.5
这是我的多边形类代码,它将使用定义的点和距离函数来计算多边形的周长:

class Polygon():
    def __init__(self, points):
        self.points = points

    def __len__(self):
        len_points = len(self.points)
        return len_points

    def get_perimeter(self,points,len_points):
        perimeter = 0
        for i in range(0, len_points):
            pt1 = self.points[i]
            pt2 = self.points[i+1]
            perimeter += pt1.distance(pt2)
            if i + 1 == len_points:
                perimeter += points[-1].distance(points[0])
            else:
                continue
        return perimeter
但每当我尝试运行代码时,都会出现错误:

  File "C:/Users/Dust/Desktop/polygon_trial.py", line 8, in <module>
    print(polygon1.get_perimeter())

TypeError: get_perimeter() missing 2 required positional arguments: 'points' and 'len_points'
文件“C:/Users/Dust/Desktop/polygon_-trial.py”,第8行,在
打印(polygon1.get_Permiture())
TypeError:get_Permission()缺少2个必需的位置参数:“points”和“len_points”
这应该行得通

class Polygon():
    def __init__(self, points):
        self.points = points

    def __len__(self):
        return len(self.points)

    def get_perimeter(self):
        perimeter = 0
        for i in range(0, len(self.points)):
            pt1 = self.points[i]
            pt2 = self.points[i+1]
            perimeter += pt1.distance(pt2)
            if i + 1 == len(self.points):
                perimeter += self.points[-1].distance(self.points[0])
            else:
                continue
        return perimeter

为什么您定义了
get_periment
方法,将
len_点
作为参数?这不是必需的-您甚至没有在方法中使用这些。这就是错误所在。哦,不是吗?我认为它与访问函数的工作原理类似。所以我尝试删除它,现在它显示错误“len_points and points as undefined”,您没有将
len_points
存储在任何位置,即使您在
中计算它。你应该用
self.points
@rdas-Hmm访问
,我不明白。len()不是存储在len_points变量中吗?不是。除非执行类似于
self的操作。len_points=len_points
的操作,否则对象中不会存储任何内容。您需要修复用于计算周长的任何算法。显然,如果
i
len(self.points)
hmmm,那么
i+1
将不起作用。你能进一步解释一下吗?@Gatts你试图实现的计算周长的算法是什么?我修正了它!pt1应该是[i-1],pt2应该是[i],但我调整了范围,从1开始。非常感谢你的帮助!
class Polygon():
    def __init__(self, points):
        self.points = points

    def __len__(self):
        return len(self.points)

    def get_perimeter(self):
        perimeter = 0
        for i in range(0, len(self.points)):
            pt1 = self.points[i]
            pt2 = self.points[i+1]
            perimeter += pt1.distance(pt2)
            if i + 1 == len(self.points):
                perimeter += self.points[-1].distance(self.points[0])
            else:
                continue
        return perimeter