0

わかりましたので、ここに私のクラスがあります:

class Vec:
"""
A vector has two fields:
D - the domain (a set)
f - a dictionary mapping (some) domain elements to field elements
    elements of D not appearing in f are implicitly mapped to zero
"""
def __init__(self, labels, function):
    self.D = labels
    self.f = function

2 つのベクトルを受け取る関数を作成するのに助けが必要です。

u = Vec({'a','b','c'}, {'a':0,'c':1,'b':4})
v = Vec({'A','B','C'},{'A':1})

関数は等しい:

equal(u,v)

返す必要があります:

false

これまでのところ、私はこれを試しました:

v = Vec({'x','y','z'},{'y':1,'x':2})
u = Vec({'x','y','z'},{'y':1,'x':0})

def equal(u,v): 
    "Returns true iff u is equal to v" 
    assert u.D == v.D
    for d in v.f:
        for i in u.f:
            if v.f[d] == u.f[i]:
                return True 
            else:
                return False
print (equal(u,v))

最後の値 'y':1 だけを見ているため、正しくありません。両方を確認するにはどうすればよいですか?

4

3 に答える 3

3

実装しようとしている方法は、既に実行されています。set equality およびディクショナリ等価演算子を使用できます。equal呼び出される関数を作成せず、代わりにon クラス インスタンス__eq__を使用できるものを使用するようお願いします。==

できることは次のとおりです。

def __eq__(self, anotherInst):
    return self.D == anotherInst.D and self.f == anotherInst.f

Python Docs__eq__でメソッドについて読む

変更を適用した後のテスト実行 -

>>> u = Vec({'a','b','c'}, {'a':0,'c':1,'b':4})
>>> v = Vec({'A','B','C'},{'A':1})
>>> u == v
False
于 2013-07-09T17:20:33.307 に答える
1

フィールドを比較できます。

def equal(self, u, v):
    return u.D == v.D and u.f == v.f
于 2013-07-09T17:17:54.700 に答える