مسیرها
/
Python
Python
/
تمرین‌ها
/
شماره تلفن
شماره تلفن

شماره تلفن

آسان

مقدمه

شما به LinkLine پیوستهاید، یک شرکت ارتباطات پیشرو که میکوشد ارتباطهای قابلاعتماد را برای همه تضمین کند. تیم با چالش بزرگی روبهروست: کاربران شمارههای تلفن را در قالبهای گوناگونی ارسال میکنند، با خط تیره، فاصله، نقطه، پرانتز و حتی پیششماره. برخی از شمارهها معتبرند و برخی دیگر اصلاً قابل استفاده نیستند.

مأموریت شما این است که این هرجومرج را به نظم تبدیل کنید. شمارههای معتبر را پاکسازی میکنید و آنها را به شکلی مناسب برای استفاده در سیستم قالببندی میکنید. همزمان، موارد نامعتبر را شناسایی و حذف میکنید.

موفقیت عملیات LinkLine به توانایی شما در جدا کردن موارد مفید از موارد بلااستفاده بستگی دارد. آیا آمادهاید این چالش را بپذیرید و ارتباطها را روان و بیدردسر نگه دارید؟

دستورالعمل‌ها

شماره‌های تلفن را پاک‌سازی کنید تا بتوان برای آن‌ها پیامک فرستاد.

طرح شماره‌گذاری آمریکای شمالی (NANP) یک سیستم شماره‌گذاری تلفنی است که بسیاری از کشورهای آمریکای شمالی مانند ایالات متحده، کانادا یا برمودا از آن استفاده می‌کنند. همه‌ی کشورهای NANP کد کشور بین‌المللی یکسانی دارند: 1.

شماره‌های NANP اعداد ده‌رقمی‌اند و شامل یک کد سه‌رقمیِ منطقه‌ی طرح شماره‌گذاری هستند که معمولاً «کد منطقه» نامیده می‌شود و پس از آن یک شماره‌ی محلی هفت‌رقمی می‌آید. سه رقم اول شماره‌ی محلی نشان‌دهنده‌ی «کد مرکز» هستند و پس از آن، شماره‌ی چهاررقمی منحصربه‌فردی می‌آید که همان «شماره‌ی مشترک» است.

قالب معمولاً به این صورت نشان داده می‌شود

NXX NXX-XXXX

که N هر رقمی از ۲ تا ۹ و X هر رقمی از ۰ تا ۹ است.

گاهی نیز کد کشور (که با 1 یا +1 نشان داده می‌شود) به ابتدای آن‌ها اضافه می‌شود.

وظیفه‌ی شما این است که شماره‌های تلفنی را که قالب‌های متفاوتی دارند، با حذف علائم نگارشی و کد کشور در صورت وجود، پاک‌سازی کنید.

برای مثال، ورودی‌های زیر

  • +1 (613)-995-0253
  • 613-995-0253
  • 1 613 995 0253
  • 613.995.0253

همه باید خروجی زیر را تولید کنند

6139950253

توجه: چون این تمرین فقط به شماره‌های تلفنی می‌پردازد که در کشورهای NANP استفاده می‌شوند، فقط 1 به عنوان کد کشور معتبر در نظر گرفته می‌شود.

پیام‌های استثنا

گاهی لازم است یک «استثنا» ایجاد کنید. وقتی این کار را می‌کنید، همیشه باید پیام خطای معناداری بنویسید تا نشان دهید منبع خطا چیست. این کار code شما را خواناتر می‌کند و در debug کردن کمک زیادی می‌کند. برای موقعیت‌هایی که می‌دانید منبع خطا نوع مشخصی دارد، می‌توانید یکی از انواع خطای توکار را ایجاد کنید، اما باز هم باید پیام معناداری همراه آن بیاورید.

این تمرین به‌طور خاص می‌خواهد که با دستور raise چند ValueErrors را «پرتاب» کنید، اگر به سازنده‌ی کلاس PhoneNumber() شماره‌ای داده شود که شماره تلفن معتبر نباشد. این شامل خطاهایی است برای وقتی که کد منطقه یا کد تبادل نامعتبر است، وقتی شماره رقم‌های زیادی (یا خیلی کمی) دارد، و برای وقتی که علائم نگارشی یا حروف به‌عنوان ورودی داده می‌شوند. testها تنها در صورتی پاس می‌شوند که هم exception را raise کنید و هم پیامی همراه آن بفرستید.

برای raise کردن یک ValueError همراه با پیام، پیام را به‌عنوان آرگومان به نوع 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")
ویرایش از طریق GitHub این لینک در پنجره یا زبانه‌ی جدیدی باز می‌شود
Python Exercism

آماده‌اید شماره تلفن را شروع کنید؟

در Exercism ثبت‌نام کنید تا Python را همراه با 17 مفهوم146 تمرین و مربی‌گری انسانی واقعی یاد بگیرید و در آن استاد شوید، همه‌ی این‌ها رایگان.