आप LinkLine से जुड़ चुके हैं। यह एक अग्रणी संचार कंपनी है, जो हर किसी के लिए भरोसेमंद कनेक्शन सुनिश्चित करने पर काम कर रही है। टीम के सामने एक बड़ी चुनौती है। उपयोगकर्ता फोन नंबर तरह-तरह के फॉर्मैट में भेजते हैं: डैश, स्पेस, बिंदु, कोष्ठक, और कभी-कभी प्रीफिक्स भी। कुछ नंबर मान्य होते हैं, जबकि कुछ का उपयोग करना संभव ही नहीं होता।
आपको इस अव्यवस्था को व्यवस्था में बदलना है। आप मान्य नंबरों को साफ-सुथरा करेंगे और सिस्टम में उपयोग के लिए उन्हें ठीक फॉर्मैट में ढालेंगे। साथ ही, आप हर अमान्य एंट्री को पहचानकर छाँट देंगे।
LinkLine के काम की सफलता इस बात पर निर्भर करती है कि आप काम की चीज़ों को बेकार चीज़ों से अलग कर सकें। क्या आप यह चुनौती स्वीकार करने और कनेक्शन सुचारू रूप से चलते रखने के लिए तैयार हैं?
फोन नंबरों को साफ कीजिए ताकि उन पर SMS संदेश भेजे जा सकें।
North American Numbering Plan (NANP) एक फोन नंबरिंग सिस्टम है, जिसे उत्तरी अमेरिका के कई देश इस्तेमाल करते हैं, जैसे संयुक्त राज्य अमेरिका, कनाडा या बरमूडा।
सभी NANP देशों का अंतरराष्ट्रीय कंट्री कोड एक ही होता है: 1.
NANP नंबर दस अंकों वाले नंबर होते हैं। इनमें तीन अंकों का नंबरिंग प्लान एरिया कोड होता है, जिसे आमतौर पर एरिया कोड कहा जाता है, और उसके बाद सात अंकों का लोकल नंबर आता है। लोकल नंबर के पहले तीन अंक एक्सचेंज कोड होते हैं, और उसके बाद चार अंकों का वह नंबर होता है जो सब्सक्राइबर नंबर है।
इसका प्रारूप आमतौर पर ऐसा लिखा जाता है:
NXX NXX-XXXX
जहाँ N 2 से 9 तक का कोई भी अंक है और X 0 से 9 तक का कोई भी अंक है।
कभी-कभी इनके आगे कंट्री कोड (1 या +1) भी लगा होता है।
आपको अलग-अलग तरह से लिखे गए फोन नंबरों को साफ करना है। इसके लिए उनमें से विराम चिह्न हटाइए, और अगर कंट्री कोड लिखा हो तो वह भी हटाइए।
उदाहरण के लिए, ये इनपुट लीजिए:
+1 (613)-995-0253613-995-02531 613 995 0253613.995.0253इन सबका आउटपुट यही होना चाहिए:
6139950253
ध्यान दें: चूँकि यह अभ्यास सिर्फ NANP देशों में इस्तेमाल होने वाले फोन नंबरों से जुड़ा है, इसलिए सिर्फ 1 को ही मान्य कंट्री कोड माना जाता है।
कभी-कभी एक्सेप्शन उत्पन्न करना ज़रूरी होता है। ऐसा करते समय आपको हमेशा एक अर्थपूर्ण एरर संदेश शामिल करना चाहिए, जिससे पता चले कि एरर का स्रोत क्या है। इससे आपका कोड पढ़ने में आसान हो जाता है और डिबगिंग में काफी मदद मिलती है। ऐसी स्थितियों में, जहाँ आप जानते हैं कि एरर का स्रोत किसी एक खास टाइप का होगा, आप बिल्ट-इन एरर टाइप में से कोई एक उत्पन्न करना चुन सकते हैं, लेकिन तब भी एक अर्थपूर्ण संदेश शामिल करना चाहिए।
इस अभ्यास में raise स्टेटमेंट का उपयोग करना ज़रूरी है। अगर PhoneNumber() क्लास के कंस्ट्रक्टर को ऐसी संख्या दी जाती है जो मान्य फोन नंबर नहीं है, तो आपको कई ValueError "फेंकने" होंगे। इसमें वे एरर भी शामिल हैं जो तब मिलती हैं जब एरिया कोड या एक्सचेंज कोड अमान्य हों, जब संख्या में बहुत ज़्यादा (या बहुत कम) अंक हों, और जब इनपुट में विराम चिह्न या अक्षर दिए गए हों। टेस्ट तभी पास होंगे जब आप exception को raise भी करें और उसके साथ कोई संदेश भी शामिल करें।
किसी संदेश के साथ ValueErrors उत्पन्न करने के लिए, संदेश को exception टाइप के आर्गुमेंट के रूप में लिखिए:
# if a phone number has less than 10 digits.
raise ValueError("must not be fewer than 10 digits")
# if a phone number has more than 11 digits.
raise ValueError("must not be greater than 11 digits")
# if a phone number has 11 digits, but starts with a number other than 1.
raise ValueError("11 digits must start with 1")
# if a phone number has an exchange code that starts with 0.
raise ValueError("exchange code cannot start with zero")
# if a phone number has an exchange code that starts with 1.
raise ValueError("exchange code cannot start with one")
# if a phone number has an area code that starts with 0.
raise ValueError("area code cannot start with zero")
# if a phone number has an area code that starts with 1.
raise ValueError("area code cannot start with one")
# if a phone number has punctuation in place of some digits.
raise ValueError("punctuations not permitted")
# if a phone number has letters in place of some digits.
raise ValueError("letters not permitted")
Exercism पर साइन अप कीजिए और Python को 17 कॉन्सेप्ट146 अभ्यास तथा असली इंसानों से मिलने वाली मेंटरिंग के साथ सीखिए और उसमें महारत हासिल कीजिए, वह भी बिल्कुल मुफ्त।