Нахождение всех вхождений шаблона
Нахождение всех вхождений шаблона Первая вещь, которую делает эта программа — это находит все слова (в оригинале — буквы, так как ищет она именно буквы, прим. перев) в головоломке. > > > import re ① Модуль re реализует регулярные выражения в Питоне. В этом модуле есть удобная функция findall(), которая принимает в качестве параметров шаблон регулярного выражения и строку, и находит все подстроки, соответствующие шаблону. В этом случае шаблон соответствует последовательностям цифр. Функция findall() возвращает список всех подстрок, представляющих последовательность цифр. ② Здесь регулярное выражение соответствует последовательностям букв. И снова возвращаемое значение представляет собой список, каждый элемент которого — это строка, соответствующая шаблону регулярного выражения. Это самая трудная скороговорка на английском языке. Вот другой пример, над которым вам, возможно, придется поломать голову. > > > re. findall(' s. *? s', " The sixth sick sheikh's sixth sheep's sick. " ) Удивлены? Приведенное регулярное выражение ищет пробел, за которым следуют буква s, кратчайшая возможная последовательность любых символов (. *? ), пробел и еще одна буква s.
Но функция re. findall() находит только три вхождения: первое, третье и пятое. Почему так? Потому что она не возвращает перекрывающиеся подстроки. Первая подстрока перекрывается со второй, поэтому и возвращается только первая строка, а вторая пропускается. Затем третья подстрока перекрывается с четвертой, поэтому возвращается только третья подстрока, а четвертая пропускается. Наконец возвращается пятая подстрока. Три совпадения, а не пять.
Это не имеет никакого отношения к решению криптарифмов, я просто подумал, что это интересно. Нахождение уникальных элементов в последовательностях Множества делают задачу нахождения уникальных элементов в последовательности тривиальной. > > > a_list = ['The', 'sixth', 'sick', " sheik's", 'sixth', " sheep's", 'sick']
② Тот же подход работает и если функции set() передать строку, а не список, поскольку строка — это просто последовательность символов. ③ Получив список строк, функция . join(a_list) объединяет все эти строки в одну. ④ Этот фрагмент кода, получив список строк, возвращает все уникальные символы, встречающиеся во всех строках. Наша программа для решения криптарифмов использует эту технику для получения множества всех уникальных букв, используемых в головоломке. unique_characters = set(''. join(words))
Проверка выполнения условий Like many programming languages, Python has an assert statement. Here’s how it works. Подобно многим языкам программирования, Python имеет оператор подтверждения отсутствия ошибок. Вот как он работает. > > > assert 1 + 1 == 2 ①
② Однако если выражение возвращает False, assert выбрасывает исключение. ③ Вы также можете добавить информативное сообщение, которое будет выведено при возбуждении исключения AssertionError. Поэтому, эта строка кода assert len(unique_characters) < = 10, 'Too many letters' эквивалентна if len(unique_characters) > 10:
Воспользуйтесь поиском по сайту: ©2015 - 2024 megalektsii.ru Все авторские права принадлежат авторам лекционных материалов. Обратная связь с нами...
|