আপনি 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 স্টেটমেন্ট ব্যবহার করে একাধিক ValueError "থ্রো" করতে হবে, যদি PhoneNumber() ক্লাস কনস্ট্রাক্টরকে এমন একটি সংখ্যা পাস করা হয় যা বৈধ ফোন নম্বর নয়। এর মধ্যে রয়েছে এরিয়া কোড বা এক্সচেঞ্জ কোড অবৈধ হলে, নম্বরটিতে খুব বেশি (বা খুব কম) ডিজিট থাকলে, এবং ইনপুট হিসেবে যতিচিহ্ন বা অক্ষর দেওয়া হলে সেসব ক্ষেত্রের এরর। টেস্টগুলো কেবল তখনই পাস হবে যদি আপনি 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টি অনুশীলনী আর সত্যিকারের মানুষের মেন্টরিং দিয়ে শিখুন ও দক্ষ হয়ে উঠুন, সম্পূর্ণ বিনামূল্যে।