मान लीजिए कि हम एक पुनरावर्तक वर्ग को परिभाषित करना चाहते हैं जो एक रन-लेंथ एन्कोडेड लोअरकेस स्ट्रिंग के साथ निर्माण करता है, जैसे कि s, इस इटरेटर के लिए दो कार्य हैं - वे हैं -
- अगला() यह इटरेटर में अगला तत्व ढूंढता है
- hasnext() यह जांचता है कि अगला तत्व मौजूद है या नहीं
इसलिए, यदि इनपुट s ="2b1a" जैसा है, तो s के साथ एक ऑब्जेक्ट बनाएं, फिर अगला (), hasnext (), अगला (), अगला (), hasnext () पर कॉल करें, तो आउटपुट "b" होगा , सच, "बी", "ए", गलत।
इसे हल करने के लिए, हम इन चरणों का पालन करेंगे -
- एक कंस्ट्रक्टर को परिभाषित करें। इसमें लगेगा
- आउटपुट:=एक नई सूची
- संख्या:=रिक्त स्ट्रिंग
- प्रत्येक i के लिए, करते हैं
- यदि मैं वर्णमाला है, तो
- आउटपुट के अंत में num डालें
- आउटपुट के अंत में i डालें
- संख्या:=रिक्त स्ट्रिंग
- अन्यथा,
- संख्या:=संख्या + मैं
- यदि मैं वर्णमाला है, तो
- अगले फ़ंक्शन को परिभाषित करें()।
- यदि hasnext() सत्य है, तो
- गिनती:=आउटपुट[0]
- पत्र:=आउटपुट[1]
- गिनती :=गिनती - 1
- अगर गिनती> 0, तो
- आउटपुट[0] :=आउटपुट[0] - 1
- अन्यथा,
- आउटपुट:=आउटपुट [इंडेक्स 2 से अंत तक]
- वापसी पत्र
- एक फंक्शन hasnext() परिभाषित करें।
- यदि आउटपुट का आकार 0 नहीं है, तो
- सही लौटें
- झूठी वापसी
उदाहरण
आइए बेहतर समझ पाने के लिए निम्नलिखित कार्यान्वयन देखें -
class RunLengthIterator: def __init__(self, s): self.output = [] num = "" for i in s: if i.isalpha(): self.output.append(int(num)) self.output.append(i) num = "" else: num += i def next(self): if self.hasnext(): count = self.output[0] letter = self.output[1] count -= 1 if count > 0: self.output[0] -= 1 else: self.output = self.output[2:] return letter def hasnext(self): if len(self.output) != 0: return True return False s = "2b1a" obj = RunLengthIterator(s) print(obj.next()) print(obj.hasnext()) print(obj.next()) print(obj.next()) print(obj.hasnext())
इनपुट
"2b1a" obj = RunLengthIterator(s) obj.next() obj.hasnext() obj.next() obj.next() obj.hasnext()
आउटपुट
b True b a False