所以我被困在这里试图递归地比较正则表达式和递归。用户将创建一个具有两个参数的对象,每个参数都是一个长度为1的字符串。这些字符串只能是"0"
、"1"
或"2"
。但是我想递归地检查这些字符串是否也指向另一个字符串。比如:
*
/ \
1 2
/ \
2 1
我不知道如何递归地指向一个新对象: 到目前为止,我的情况是:
class DotNode(object):
def __init__(self, _cargo, _left=None, _right=None):
self._cargo = _cargo
self._left = _left
self._right = _right
def __eq__(self, _other):
base = ['0','1','2']
if self._left in base and self._right in base:
return self._left == _other._left and self._right == _other._right
else:
while self._left not in base or self._right not in base:
new = self._left
new2 = self._right
new3 = _other._left
new4 = _other._right
return new._left == new3._left and new2._right == new4._right
您似乎已经知道如何做到这一点:递归。您想在这里递归调用
__eq__
函数。我还建议您在每次设置值时检查给定的货物是否是构造函数中可能的值之一,甚至更好。你知道吗分解它
你当然想把构造器留在这里。我只是把换过的部分写下来。正如您可能已经注意到的,这里甚至不需要正则表达式,标准字符串比较工作得很好。你知道吗
_cargo
属性我在这里将
_cargo
从一个简单属性更改为一个属性。那是什么意思?Java中的getter和setter允许更好地控制可能的值。实际数据存储在_vcargo
中,当然有人可以直接写入该属性,但这将是彻头彻尾的愚蠢,如果有人以非预期的方式使用您的代码,您当然没有责任。如果您试图设置一个不同于可能值的值,将引发ValueError
。你知道吗__eq__
函数正如你所看到的,这个函数实际上非常简单。它所做的一切就是计算节点本身和另一个节点的货物是否相等。现在,如果两个子树也相等,那么整个树就是相等的。在最深层,如果两棵树相等,它会比较
None
和None
,因为没有更多的子树。你知道吗相关问题 更多 >
编程相关推荐