1

我是 Python 的初学者,正如我可能在之前的问题中所说的那样,我遇到的一些主题没有得到深入的解释,我需要理解这些材料,所以我有一个问题。提出的问题是“将方法 distance() 添加到类 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

然后我不确定是否需要以何种方式定义距离。谢谢你。

我有一个明确的基线,我很确定我会如何开始这个,但是当谈到定义距离时,我非常卡住。

4

2 回答 2

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

关于模块数学中内置函数hypot的帮助:

假设(...)
    假设(x,y)

    返回欧几里得距离,sqrt(x*x + y*y)。
于 2013-05-29T03:02:19.593 回答
0

这是一个没有设置和获取的示例。 __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
于 2013-05-29T03:15:10.637 回答