رقم الهاتف

رقم الهاتف

سهل

مقدمة

لقد انضممت إلى LinkLine، وهي شركة اتصالات رائدة تعمل على ضمان اتصالات موثوقة للجميع. يواجه الفريق تحديًا كبيرًا: فالمستخدمون يُدخلون أرقام الهاتف بصيغ شتى، من الشرطات والمسافات والنقاط والأقواس، وحتى البادئات. بعض هذه الأرقام صالح للاستخدام، وبعضها الآخر يتعذّر استخدامه.

مهمتك هي تحويل هذه الفوضى إلى نظام. ستُنقّي الأرقام الصالحة وتُنسّقها بالشكل المناسب لاستخدامها في النظام. وفي الوقت نفسه، ستتعرّف على المدخلات غير الصالحة وتستبعدها.

يتوقف نجاح عمليات LinkLine على قدرتك على فصل المفيد عن غير القابل للاستخدام. هل أنت مستعد لخوض التحدي والحفاظ على سير الاتصالات بسلاسة؟

التعليمات

نظّف أرقام الهاتف حتى يمكن إرسال رسائل SMS إليها.

خطة الترقيم لأمريكا الشمالية (NANP) هي نظام لترقيم الهواتف تستخدمه دول كثيرة في أمريكا الشمالية مثل الولايات المتحدة وكندا وبرمودا. تشترك جميع دول NANP في رمز البلد الدولي نفسه: 1.

أرقام NANP أرقام مكوّنة من عشرة أرقام، تتألف من رمز منطقة خطة الترقيم المكوّن من ثلاثة أرقام، المعروف شائعًا بـ_رمز المنطقة_، ويتبعه رقم محلي من سبعة أرقام. تمثل الأرقام الثلاثة الأولى من الرقم المحلي رمز المقسم، ويتبعها رقم فريد من أربعة أرقام هو رقم المشترك.

يُكتب التنسيق عادةً على النحو التالي

NXX NXX-XXXX

حيث N أي رقم من 2 إلى 9 وX أي رقم من 0 إلى 9.

وأحيانًا يُضاف إليها رمز البلد (الممثَّل بـ1 أو +1) في البداية.

مهمتك هي تنظيف أرقام الهاتف المكتوبة بتنسيقات مختلفة، وذلك بإزالة علامات الترقيم ورمز البلد إن وُجد.

على سبيل المثال، المدخلات

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

يجب أن تُنتج جميعها الخرج نفسه

6139950253

ملاحظة: بما أن هذا التمرين يتعامل فقط مع أرقام الهاتف المستخدمة في دول NANP، فإن 1 هو رمز البلد الوحيد المعتبر صالحًا.

رسائل الاستثناء

أحيانًا يكون من الضروري رفع استثناء. وعندما تفعل ذلك، ينبغي أن تُضمّن دائمًا رسالة خطأ ذات معنى تشير إلى مصدر الخطأ. فهذا يجعل الكود أكثر قابلية للقراءة ويساعد كثيرًا في تصحيح الأخطاء. وفي الحالات التي تعرف فيها أن مصدر الخطأ سيكون من نوع معيّن، يمكنك أن تختار رفع أحد أنواع الأخطاء المضمّنة، لكن ينبغي أن تُضمّن معه رسالة ذات معنى.

يتطلّب هذا التمرين تحديدًا أن تستخدم عبارة raise لكي «ترمي» عدة ValueErrors إذا مُرِّر إلى باني الصنف PhoneNumber() رقمٌ ليس رقم هاتف صالحًا. ويشمل ذلك أخطاءً عندما يكون رمز المنطقة أو رمز المقسم غير صالح، وعندما يحتوي الرقم على أرقام أكثر من اللازم (أو أقل من اللازم)، وعندما تُمرَّر علامات ترقيم أو حروف كمدخلات. ولن تنجح الاختبارات إلا إذا رفعت exception باستخدام 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 تمرينًا، وإرشاد بشري حقيقي، وكل ذلك مجانًا.