تنفيذ بيثون يحاول باتريشيا
-
30-09-2019 - |
سؤال
عند النظر حول تطبيقات 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
لا تنتمي إلى StackOverflow