当前位置: 代码迷 >> python >> 将正则表达式与递归进行比较 打破它
  详细解决方案

将正则表达式与递归进行比较 打破它

热度:32   发布时间:2023-06-16 14:16:55.0

所以我在这里试图递归地比较正则表达式与递归。 用户将创建一个具有两个参数的对象,每个参数都是一个长度为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__函数。 我还建议你检查给定的货物是否是构造函数中可能的值之一 - 或者甚至更好 - 每次设置值。

class DotNode(object):
    @property
    def _cargo(self):
         return self._vcargo

    @_cargo.setter
    def _cargo(self, val):
         if val not in ['0', '1', '2']:
             raise ValueError("{} is not a possible value for _cargo.".format(val))
         self._vcargo = val

    def __eq__(self, other):
        return isinstance(other, DotNode) and self._cargo == other._cargo and self._left == other._left and self._right == other._right

打破它

当然,您希望将构造函数保留在此处。 我刚刚写下了改变的部分。 您可能已经注意到这里甚至不需要RegExes,标准字符串比较工作正常。

_cargo财产

我在这里将_cargo从简单属性更改为属性。 这意味着什么? 您可以获得Java的getter和setter,以便更好地控制可能的值。 实际的数据存储在_vcargo ,当然有人可以直接写入该属性,但这绝对是愚蠢的,如果有人以某种方式使用你的代码,你肯定不负责任。 如果您尝试设置与可能值不同的值,则会引发ValueError

__eq__函数

正如您所看到的,这个功能实际上非常简单。 它所做的一切都是计算节点本身和另一个节点的货物是否相等。 现在,如果两个子树也相等,则整个树都相等。 如果两棵树都相等,它将在最深层次上比较NoneNone ,因为不再有子树。