我是Python的初学者,因为我在之前的问题中可能已经说过了,我所提到的一些主题没有给出深入的解释,我需要提供材料,所以我有一个问题。问题是问题是“将方法距离()添加到Point类。它将另一个Point对象作为输入并返回到该点的距离(从调用该方法的点开始)。
当它全部输入到模块中时,它正在寻找的是以下结果
>>> c = Point()
>>> c.setx(0)
>>> c.sety(1)
>>> d = Point()
>>> d.setx(1)
>>> d.sety(0)
>>> c.distance(d)
1.4142135623730951
这就是我所拥有的:
class Point:
def setx(self, xcoord):
self.x = xcoord
def sety(self, ycoord):
self.y = ycoord
def get(self):
return(self.x, self.y)
def move(self, dx, dy):
self.x += dx
self.y += dy
然后我不确定我是否需要以什么方式定义距离。谢谢。
我有一个明确的基线,我很确定我会开始这个,但是当谈到定义距离时,我非常困难。
答案 0 :(得分:3)
你需要一个像这样的方法
def distance(self, other):
dist = math.hypot(self.x - other.x, self.y - other.y)
return dist
您还需要在计划开始时import math
除此之外:使用setx
和sety
方法完全不是pythonic。您应该直接分配属性。例如c.x = 0
Help on built-in function hypot in module math: hypot(...) hypot(x, y) Return the Euclidean distance, sqrt(x*x + y*y).
答案 1 :(得分:0)
这是一个没有set和get的例子。 __init__
是可选的。我添加了__call__
而不是get
。
class Point:
def __init__(self, *terms):
self.x = 0
self.y = 0
def __call__(self):
return(self.x, self.y)
def move(self, dx, dy):
self.x += dx
self.y += dy
def distance(self, other):
dist = math.hypot(self.x - other.x, self.y - other.y)
return dist
>>> c = Point()
>>> c.x = 0
>>> c.y = 1
>>> d = Point()
>>> d.x = 1
>>> d.y = 0
>>> c()
(1, 0)
>>> c.distance(d)
1.4142135623730951