При регистрации в различных сервисах пользователи вводят большое количество информации. Правильное заполнение полей — важная часть работы программы, поэтому формы снабжают системами валидации данных.
Напишите функцию name_validation
, которая принимает один позиционный аргумент — фамилию или имя.
Если параметр не является строкой, то вызовите исключение TypeError
.
А также разработайте собственные ошибки:
CyrillicError
— вызывается, если значение не состоит только из кириллических букв;CapitalError
— вызывается, если значение не начинается с заглавной буквы или найдена заглавная буква не в начале значения.
Обработка ошибок должна происходить в порядке, указанном в задании.
В случае успешного выполнения, функция должна вернуть переданный параметр без изменений.
Примечание
В решении не должно быть вызовов требуемых функций.
Пример
Ввод
print(name_validation("user"))
Вывод
Вызвано исключение CyrillicError
Ввод
print(name_validation("иванов"))
Вывод
Вызвано исключение CapitalError
Решение
Довольно простая задача.
Проверяем является ли переданный параметр строкой с помощью type() или isinstance(). Если это не так, вызываем исключение TypeError.
Проверяем все ли буквы являются кириллицей. Это можно сделать несколькими способами: с помощью диапазонов кодов русских букв или с помощью заранее заданного алфавита. Можно проверить буквы с помощью all() или any(), а можно посчитать количество букв не являющихся кириллицей. Если хоть одна буква не является кириллицей вызываем исключение CyrillicError.
Проверяем является ли первая буква заглавной, а остальные прописными. Самый простой способ – преобразовать строку с помощью метода .istitle(). Если они не равны, то вызвать исключение CapitalError.
Посмотреть код
Решение
class CyrillicError(Exception):
pass
class CapitalError(Exception):
pass
def name_validation(name) -> str:
valid_cyrillic_chars = 'абвгдеёжзийклмнопрстуфхцчшщъыьэюя'
if not isinstance(name, str):
raise TypeError
if not all([char.lower() in valid_cyrillic_chars for char in name]):
raise CyrillicError
if not name.istitle():
raise CapitalError
return name