我正在尝试在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中的代码时,如何证明一切正常?谢谢一群人!!
我还需要在构造函数中添加代码,以便在每次创建Point对象时将COUNT
递增1。我还需要添加适当的代码,以便可以使用比较运算符比较点,而“点”则根据它们与原点的距离进行比较。
答案 0 :(得分:5)
别忘了math.hypot
def distance(self, p):
dx = self.X - p.X
dy = self.Y - p.Y
return hypot(dx, dy)
答案 1 :(得分:4)
您宣布distance
为参数p
;在方法中,您将其称为other
。在声明中将p
更改为other
,以便它们匹配。
sqrt()
不是内置的;您需要import math
并将其称为math.sqrt()
。
您没有使用您声明的testPoint()
功能做任何事情;您可以通过在末尾添加一行来调用它,如:
print "distance = %s"%(testPoint())
此时,您的代码可以正常运行并计算点数之间的距离为4.0。
现在,一些风格问题:
在Python中,您通常不会对成员变量进行私有化,并且您不必费心去编写琐碎的getter和setter,因此您可以删除getX()
和getY()
方法,只需直接提及p.X
即可p.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)
这将在打印对象时使用,或者需要转换为字符串。
答案 2 :(得分:1)
在你的Point.distance方法中,你引用other.X和other.Y;其他不存在。
您应该将距离签名更改为距离(自己,其他)或更改代码以使用p。
您还需要导入math.sqrt:
from math import sqrt
答案 3 :(得分:1)
这是一个带有迂腐符号的“OOP”的例子:
答案 4 :(得分:0)
由于您询问有关执行程序的问题,如果您想从命令行运行它,您应该做的第一件事就是添加:
if __name__ == '__main__':
testPoint()
对于它的作用有很好的解释(参见:What does if __name__ == "__main__": do?)。但是在最高级别,当您在命令提示符下输入python yourfilename.py
时,这将调用您的测试函数。您可以通过查看抛出的错误以及在其他答案中进行更改时会发生什么来开始调试。
每当您为要添加的__init__
创建一个点时,可以输入COUNT:
Point.COUNT += 1
。 COUNT是Point类的类变量。关于样式的快速说明,PEP 8表示“常量通常在模块级别定义,并用所有大写字母书写,下划线分隔单词。”因此,您需要将其称为count
,因为它是一个可变类变量。最后,在testPoint函数的底部添加一行print Point.count
,以便查看您创建的点数。