На этом шаге мы усовершенствуем однострочник из предыдущего шага.
На этом шаге мы еще больше углубимся в вопросы проверки формата времени во вводимых пользователями данных, чтобы решить проблему, упомянутую на
предыдущем шаге: некорректные данные, введенные пользователем, например 99:99 не должны считаться допустимыми при поиске соответствий.
Одна из удобных стратегий решения задач - иерархическая. Для начала сведите задачу к простейшему виду и решите этот более простой ее вариант. Далее
уточните решение, чтобы оно соответствовало конкретной (и более сложной) задаче, стоящей перед вами. На данном шаге мы существенно совершенствуем
решение из предыдущего шага: исключаем некорректные варианты вводимого времени наподобие 99:99 или 28:66. Поэтому наша
задача становится более конкретной (и сложной), но мы можем повторно использовать отдельные части нашего старого решения.
Наша задача - написать функцию input_ok, принимающую строковый аргумент и проверяющий его на соответствие формату (времени) XX:XX, где X - число от 0 до 9 (пример 5.7). Кроме того, должен соблюдаться правильный формат времени во входных данных - в 24-часовом диапазоне от 00:00 до 23:59.
## Зависимости import re ## Данные inputs = ['18:29', '23:55', '123', 'ab:de', '18:299', '99:99'] ## Однострочник input_ok = lambda x: re.fullmatch('([01][0-9]|2[0-3]):[0-5][0-9]', x) != None ## Результат for x in inputs: print(input_ok(x))
Этот код выводит шесть строк. Каких?
Как уже упоминалось в начале этого шага, мы можем повторно использовать части предыдущего однострочника для упрощения решения нашей задачи. Код остается тем же самым, меняется только регулярное выражение: ([01][0-9]|2[0-3]):[0-5][0-9]. Первая часть ([01] [0-9]|2[0-3]) представляет собой группу, которой соответствуют все возможные часы в сутках. Оператор логического ИЛИ | здесь позволяет учесть часы от 00 до 19, с одной стороны, и от 20 до 23 - с другой. Второй части, [0-5][0-9], соответствуют минуты от 00 до 59. В результате выводится следующее:
## Результат for x in inputs: print(input_ok(x)) # True # True # False # False # False # False
Обратите внимание, что шестая из строк результата демонстрирует: время 99:99 более не считается допустимыми входными данными. Этот однострочник показывает, как с помощью регулярных выражений проверять соответствие вводимых пользователем данных семантическим требованиям приложения.
На следующем шаге мы рассмотрим поиск удвоенных символов в строковых значениях.