


И ещё одна задача на Питоне
Телефонные номера в адресной книге мобильного телефона имеют один из следующих форматов:
+7<код><номер>
8<код><номер>
<номер>
где <номер> — это семь цифр, а <код> — это три цифры или три цифры в круглых скобках. Если код не указан, то считается, что он равен 495. Кроме того, в записи телефонного номера может стоять знак “-” между любыми двумя цифрами (см. пример).
На данный момент в адресной книге телефона Васи записано всего три телефонных номера, и он хочет записать туда еще один. Но он не может понять, не записан ли уже такой номер в телефонной книге. Помогите ему!
Два телефонных номера совпадают, если у них равны коды и равны номера. Например, +7(916)0123456 и 89160123456 — это один и тот же номер.
Входные данные
В первой строке входных данных записан номер телефона, который Вася хочет добавить в адресную книгу своего телефона. В следующих трех строках записаны три номера телефонов, которые уже находятся в адресной книге телефона Васи.
Гарантируется, что каждая из записей соответствует одному из трех приведенных в условии форматов.
Выходные данные
Для каждого телефонного номера в адресной книге выведите YES (заглавными буквами), если он совпадает с тем телефонным номером, который Вася хочет добавить в адресную книгу или NO (заглавными буквами) в противном случае.
Пример
Ввод Вывод
8(495)430-23-97 YES
+7-4-9-5-43-023-97 YES
4-3-0-2-3-9-7 NO
8-495-430
Помогите пожалуйста решить, даже не знаю с чего начинать
Будем считать, что четыре телефона лежат в файле input.txt. Тогда:
phones = [''.join([x for x in list(line) if x in list('1234567890')]) for line in open('input.txt').readlines()]
phones = ['8' + phone[1:] if phone[:1] == '7' and len(phone)==11 else phone for phone in phones]
phones = ['8495' + phone if len(phone)==7 else phone for phone in phones]
print '\n'.join([phone + ((' YES' if phone in phones[:i]+phones[(i+1):] else ' NO') if i !=0 else '') for i, phone in enumerate(phones) ])
А как предыдущее задание? До конца довёл?
А что тут решать? И первый номер и последующие обработать по одному алгоритму:
Если в начале стоит +7 - запомнить вместо этого 8
Если попалась любая скобка - пропустить
Если попался минус - пропустить.
И потом уже сравнивать. И всё.
А вот как понять, что 8(495)4953456 и 84953456 - это один номер? По длине номера? А что тогда значит 8-495-430?!!!
Два телефонных номера совпадают, если у них равны коды и равны номера то будем сравнивать по коду и номеру 10 символов
приводишь все номера в единый формат в 10 символов ( (3) код (7) номер) если номер короче 10 символов то перед ним дописываем 495. .берем номер проверяем есть ли он в контактах если нет то добавляем и выводим NO если есть то просто выводим YES
четвертая строка при вводе это просто <номер> без кода и +7 в условии явно написано