4

「ポイント」というタイトルのPythonでクラスを作成しようとしています。座標平面 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ます。それらが一致するように宣言でに変更pします。other

  • sqrt()組み込みではありません。import mathあなたはそれをし、それをとして参照する必要がありますmath.sqrt()

  • testPoint()宣言した関数では何もしていません。次のように最後に行を追加することで呼び出すことができます。

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

その時点で、コードは機能し、ポイント間の距離4.0を計算します。

さて、いくつかのスタイルの問題:

  • Pythonでは、通常、メンバー変数を非公開化することはなく、簡単なゲッターやセッターを作成する必要もありません。そのため、メソッドとメソッドを削除してgetX()、を直接getY()参照して指定することができます。p.Xp.YPoint 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

Point.distanceメソッドでは、other.Xとother.Yを参照します。その他は存在しません。

距離シグニチャをdistance(self、other)に変更するか、pを使用するようにコードを変更する必要があります。

また、math.sqrtをインポートする必要があります。

from math import sqrt
于 2012-09-18T00:41:24.463 に答える