好的,这是我的班级:
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
我需要帮助创建一个带有两个向量的函数,比如说:
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,我该如何检查它们?
答案 0 :(得分:3)
您尝试实施的方法已经为您完成。您可以使用set equality和字典相等运算符。我请你不要创建一个名为equal
的函数,而是使用__eq__
,它允许在类实例上使用==
。
这是你可以做的事情
def __eq__(self, anotherInst):
return self.D == anotherInst.D and self.f == anotherInst.f
中的__eq__
方法
应用更改后测试运行 -
>>> u = Vec({'a','b','c'}, {'a':0,'c':1,'b':4})
>>> v = Vec({'A','B','C'},{'A':1})
>>> u == v
False
答案 1 :(得分:1)
您可以比较字段:
def equal(self, u, v):
return u.D == v.D and u.f == v.f
答案 2 :(得分:1)
我认为只实现equal
这样的功能不是最好的选择。您可以实施__eq__
,以便使用==
来识别相似性。
def __eq__(self, v):
return self.D == v.D and self.f == v.f