4

我正在尝试在 python 中创建一个名为“Point”的类。我正在尝试在坐标平面 x 和 y 上创建一个点并跟踪它们。以及找到点之间的距离。我必须使用函数和方法。我已经开始了,这是我的代码。当我去执行程序时,我不确定如何使用它。任何帮助将不胜感激。

编辑:更新代码

import math


class Point(object):
    '''Creates a point on a coordinate plane with values x and y.'''

    COUNT = 0

    def __init__(self, x, y):
        '''Defines x and y variables'''
        self.X = x
        self.Y = y

    def move(self, dx, dy):
        '''Determines where x and y move'''
        self.X = self.X + dx
        self.Y = self.Y + dy

    def __str__(self):
        return "Point(%s,%s)"%(self.X, self.Y) 


    def getX(self):
        return self.X

    def getY(self):
        return self.Y

    def distance(self, other):
        dx = self.X - other.X
        dy = self.Y - other.Y
        return math.sqrt(dx**2 + dy**2)

    def testPoint(x=0,y=0):
        '''Returns a point and distance'''
        p1 = Point(3, 4)
        print p1
        p2 = Point(3,0)
        print p2
        return math.hypot(dx, dy)

    print "distance = %s"%(testPoint()) 

我仍然需要帮助来理解如何实际使用代码。这就是我创建该testPoint功能的原因。当我实际去执行 IDLE 中的代码时,我如何证明一切正常?谢谢一群人!!

我还需要在构造函数中添加代码,以便在COUNT每次创建 Point 对象时递增 1。我还需要添加适当的代码,以便可以使用比较运算符比较点,同时根据与原点的距离比较“点”。

4

4 回答 4

7

不要忘记math.hypot

def distance(self, p):
    dx = self.X - p.X
    dy = self.Y - p.Y
    return hypot(dx, dy)
于 2012-09-18T00:49:39.523 回答
4
  • 你声明distance接受一个论点p;在您将其称为other. 在声明中更改pother,以便它们匹配。

  • sqrt()不是内置的;您需要做import math并将其称为math.sqrt().

  • 你没有对testPoint()你声明的函数做任何事情;您可以通过在末尾添加一行来调用它,例如:

print "distance = %s"%(testPoint())

此时,您的代码可以工作并计算您的点之间的距离为 4.0。

现在,一些风格问题:

  • 在 Python 中,您通常不会将成员变量私有化,也不会费心编写琐碎的 getter 和 setter,因此您可以删除getX()andgetY()方法,只需引用p.Xp.Y直接给定一个Point p.

  • math模块具有方便的斜边功能,因此distance()您可以将返回线更改为return math.hypot(dx,dy).

  • 默认情况下,用户定义的对象有一个没有吸引力的字符串表示:

    <__main__.Point object at 0x1004e4550>

您应该在您的类中定义一个字符串转换方法,如下所示:

    def __str__(self):
        return "Point(%s,%s)"%(self.X,self.Y)

这将在打印对象时使用,或者需要转换为字符串。

于 2012-09-18T00:40:34.487 回答
1

哼,为什么不使用复数而不是点类呢?它具有您正在搜索的所有属性以及更多属性(例如旋转)。

这是一个使用迂腐符号“OOP”复合体的示例:

https://gist.github.com/jul/9286835

于 2014-03-02T18:23:27.237 回答
1

在您的 Point.distance 方法中,您引用 other.X 和 other.Y;其他不存在。

您应该将距离签名更改为距离(自我,其他)或更改代码以使用 p。

您还需要导入 math.sqrt:

from math import sqrt
于 2012-09-18T00:41:24.463 回答