Треки
/
Python
Python
/
Вправи
/
Номер телефону
Номер телефону

Номер телефону

Легка

Вступ

Ми приєдналися до 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() передано число, яке не є дійсним номером телефону. Це включає помилки, коли код міста або код комутатора недійсні, коли в номері забагато (або замало) цифр, а також коли на вході подано розділові знаки чи літери. Тести пройдуть лише тоді, коли ми і зробимо raise для exception, і додамо до нього повідомлення.

Щоб підняти 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 вправ та справжнє наставництво від людей, і все це безкоштовно.