سؤال

عند النظر حول تطبيقات Python للمحاولات فقط حتى أتمكن من فهم ما هي وكيف يعملون ، صادفت Justin Peel's باتريشيا تري ووجدت أنها مفيدة للغاية: إنه أمر واضح ومباشر بما يكفي لأحدهم جديدًا كما سألعب معه والتعلم منه.

ومع ذلك ، هناك شيء أعتقد أنني لا أفهمه:

باستخدام فئة جاستن باتريشيا () هكذا:

>>> p = patricia()
>>> words = ['foo','bar','baz']
>>> for x in words:
...     p.addWord(x)

أحصل على تري كقاموس يبدو مثل هذا:

>>> p._d
{'b': ['a', {'r': ['', {}], 'z': ['', {}]}], 'f': ['oo', {}]}

AddWord () و ISWORD () العمل كما هو متوقع ، ولكن ISPREFIX () يوضح السلوك التالي الذي يعززني:

>>> p.isPrefix('b')
True
>>> p.isPrefix('f')
True
>>> p.isPrefix('e')
False

جيد ، كما هو متوقع ؛ وثم

>>> p.isPrefix('ba')
True

جيد أيضًا ، ولكن بعد ذلك:

>>> p.isPrefix('bal')
True

وعلاوة على ذلك:

>>> p.isPrefix('ballance')
True
>>> p.isPrefix('ballancing act')
True

شيء هنا لا أفهم؟

هل كانت مفيدة؟

المحلول

أعتقد أن الخطأ في المقتطف التالي من الكود الذي تبحث عنه:

       if w.startswith(node[0][:wlen-i],i):
            if wlen - i > len(node[0]):
                i += len(node[0])
                d = node[1]
            return True

يجب أن يكون في الواقع:

       if w.startswith(node[0][:wlen-i],i):
            if wlen - i > len(node[0]):
                i += len(node[0])
                d = node[1]
            else:
                return True
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top