आप एक संगीत स्ट्रीमिंग कंपनी के लिए काम करते हैं।
आपको अपने संगीत प्लेयर एप्लिकेशन के लिए एक प्लेलिस्ट फीचर बनाने का काम सौंपा गया है।
म्यूज़िक प्लेयर एप्लिकेशन का एक प्रोटोटाइप लिखिए।
प्रोटोटाइप के लिए, हर गाने को बस एक संख्या से दर्शाया जाएगा। संख्याओं की एक रेंज (यानी गानों की आईडी) दी गई हो, तो एक सिंगली लिंक्ड लिस्ट बनाइए।
एक सिंगली लिंक्ड लिस्ट दी गई हो, तो आपको उस लिस्ट को उलटकर गाने उल्टे क्रम में चला पाना चाहिए।
लिंक्ड लिस्ट कंप्यूटर विज्ञान में एक बुनियादी डेटा स्ट्रक्चर है, जिसका उपयोग अक्सर दूसरे डेटा स्ट्रक्चर बनाने में किया जाता है।
सबसे सरल तरह की लिंक्ड लिस्ट सिंगली लिंक्ड लिस्ट होती है। इसका मतलब है कि हर एलिमेंट (या "नोड") में डेटा होता है, और साथ में वह चीज़ भी होती है जो लिस्ट के अगले नोड की ओर इशारा करती है।
अगर आप लिंक्ड लिस्ट के बारे में और गहराई में जाना चाहते हैं, तो यह लेख देखिए, जिसमें अच्छे चित्रों की मदद से इसे समझाया गया है।
stacks और queues को lists, collections.deque, queue.LifoQueue और multiprocessing.Queue की मदद से बनाया जा सकता है, लेकिन इस अभ्यास में एक "लास्ट इन, फर्स्ट आउट" (LIFO) स्टैक चाहिए, जो खुद बनाई गई सिंगली लिंक्ड लिस्ट पर आधारित हो:
इसे उस LIFO स्टैक जो डायनामिक ऐरे या लिस्ट पर बनाया जाता है से नहीं मिलाना चाहिए; ऐसे स्टैक के अंदर list, queue या array इस्तेमाल हो सकते हैं।
डायनामिक ऐरे पर आधारित stacks में head की जगह अलग होती है, और समय जटिलता (Big-O) तथा मेमोरी की खपत भी अलग होती है।
कुछ बातों पर ध्यान देने के लिए Stack Overflow के ये दो सवाल देखिए: ऐरे पर आधारित बनाम लिस्ट पर आधारित स्टैक और क्यू और ऐरे स्टैक, लिंक्ड स्टैक और स्टैक में क्या अंतर है।
लिंक्ड लिस्ट, LIFO स्टैक और Python में दूसरे एब्सट्रैक्ट डेटा टाइप (ADT) के बारे में अधिक जानकारी के लिए:
ADT शामिल हैं)Python में लिंक्ड लिस्ट बनाने का "मानक" तरीका आमतौर पर एक या अधिक classes चाहता है।
classes की अच्छी शुरुआत के लिए classes और उसके साथ वाला अभ्यास ellens-alien-game देखिए, या ऑफिशियल Python ट्यूटोरियल का क्लास वाला हिस्सा देखिए।
इस अभ्यास के टेस्ट आपकी LinkedList पर len() कॉल करेंगे।
len() के काम करने के लिए आपको एक __len__ स्पेशल मेथड बनाना होगा।
Python में स्पेशल या "डंडर" मेथड लागू करने का ब्यौरा Python डॉक्स: बेसिक ऑब्जेक्ट कस्टमाइज़ेशन और Python डॉक्स: object.len(self) में देखिए।
अपनी LinkedList पर लूप चलाने या उसे उलटने के लिए आपको __iter__ स्पेशल मेथड लागू करना होगा।
इसे लागू करने का तरीका किसी क्लास के लिए इटरेटर लागू करना में देखिए।
कभी-कभी अपने कोड में एक्सेप्शन को कस्टमाइज़ करना और उन्हें raise करना, दोनों ज़रूरी हो जाते हैं।
ऐसा करते समय आपको हमेशा एक अर्थपूर्ण एरर मैसेज देना चाहिए, जिससे पता चले कि एरर की जड़ कहाँ है।
इससे आपका कोड पढ़ने में आसान हो जाता है और डीबग करने में काफी मदद मिलती है।
कस्टम एक्सेप्शन नई एक्सेप्शन क्लास बनाकर बनाए जा सकते हैं (अधिक जानकारी के लिए classes देखिए), जो आमतौर पर Exception की सबक्लास होती हैं।
जहाँ आपको पता हो कि एरर की जड़ किसी खास एक्सेप्शन टाइप से निकली है, वहाँ आप Exception क्लास के अंदर दिए गए built in error types में से किसी एक को इनहेरिट कर सकते हैं।
एरर उठाते समय भी आपको अर्थपूर्ण मैसेज देना चाहिए।
इस अभ्यास में आपको एक कस्टम एक्सेप्शन बनाना है, जिसे आपकी लिंक्ड लिस्ट के खाली होने पर उठाना यानी "थ्रो" करना है।
टेस्ट तभी पास होंगे जब आप उचित एक्सेप्शन कस्टमाइज़ करेंगे, उन्हें raise करेंगे और उचित एरर मैसेज देंगे।
किसी सामान्य एक्सेप्शन को कस्टमाइज़ करने के लिए ऐसी class बनाइए जो Exception से इनहेरिट करे।
कस्टम एक्सेप्शन को किसी मैसेज के साथ उठाते समय मैसेज को exception टाइप का आर्गुमेंट बनाकर लिखिए:
# subclassing Exception to create EmptyListException
class EmptyListException(Exception):
"""Exception raised when the linked list is empty.
message: explanation of the error.
"""
def __init__(self, message):
self.message = message
# raising an EmptyListException
raise EmptyListException("The list is empty.")
Exercism पर साइन अप कीजिए और Python को 17 कॉन्सेप्ट146 अभ्यास तथा असली इंसानों से मिलने वाली मेंटरिंग के साथ सीखिए और उसमें महारत हासिल कीजिए, वह भी बिल्कुल मुफ्त।