Python
Оголосіть функцію, яка приймає рядок на кирилиці та перетворює її на латиницю, використовуючи словник для заміни українських букв на відповідне латинське написання.
Функція повинна повертати перетворений рядок. Заміни робити без урахування регістру (початковий рядок перевести в нижній регістр – малі літери). Визначте декоратор з параметром chars і початковим значенням "!?", який ці символи перетворює на символ "-" і, крім того, всі дефіси, що йдуть підряд (наприклад, "--" або "---") призводить до одного дефісу. Отриманий результат має повертатися у вигляді рядка.
Застосуйте декоратор зі значенням chars="?!:;,." до функції та викличте декоровану функцію. Результат відображається на екрані.
Ответы на вопрос
Сначала создадим словарь, который будет содержать украинские буквы и их соответствующее латинское написание:
UKRAINIAN_TO_LATIN = {
'а': 'a',
'б': 'b',
'в': 'v',
'г': 'h',
'ґ': 'g',
'д': 'd',
'е': 'e',
'є': 'ye',
'ж': 'zh',
'з': 'z',
'и': 'y',
'і': 'i',
'ї': 'yi',
'й': 'y',
'к': 'k',
'л': 'l',
'м': 'm',
'н': 'n',
'о': 'o',
'п': 'p',
'р': 'r',
'с': 's',
'т': 't',
'у': 'u',
'ф': 'f',
'х': 'kh',
'ц': 'ts',
'ч': 'ch',
'ш': 'sh',
'щ': 'shch',
'ь': '',
'ю': 'yu',
'я': 'ya',
}
Теперь мы можем написать функцию, которая будет принимать строку на кириллице и превращать ее в латиницу:
def translate_to_latin(string):
string = string.lower() # переводим строку в нижний регистр
result = "" # инициализируем пустую строку, куда будем сохранять результат
for ch in string:
if ch in UKRAINIAN_TO_LATIN: # если буква украинская
result += UKRAINIAN_TO_LATIN[ch] # заменяем ее на соответствующже латинскую букву
else:
result += ch # иначе оставляем букву как есть
return result # возвращаем результат
Теперь мы можем создать декоратор, который будет обрабатывать специальные символы в строке:
from functools import wraps
def replace_chars(chars="!?", replace_char="-"):
def decorator(func):
@wraps(func)
def wrapper(*args, **kwargs):
result = func(*args, **kwargs) # вызываем оборачиваемую функцию
result = result.replace(replace_char * 2, replace_char) # удаляем дублирующиеся дефисы
for ch in chars: # заменяем специальные символы
result = result.replace(ch, replace_char)
return result
return wrapper
return decorator
Теперь мы можем применить декоратор к функции `translate_to_latin`:
@replace_chars(chars="?!:;,.")
def translate_to_latin(string):
# ...
И вызвать декорированную функцию:
result = translate_to_latin("Привет, мир!")
print(result) # выведет "privet-mir-"
Ответ:
from functools import wraps
def convert_to_latin(func):
@wraps(func)
def wrapper(*args, chars="!?", **kwargs):
result = func(*args, **kwargs)
for char in chars:
result = result.replace(char, "-")
result = result.replace("--", "-")
return result
return wrapper
def cyrillic_to_latin(input_string):
cyrillic_to_latin_dict = {
"а": "a",
"б": "b",
"в": "v",
"г": "h",
"ґ": "g",
"д": "d",
"е": "e",
"є": "ie",
"ж": "zh",
"з": "z",
"и": "y",
"і": "i",
"ї": "i",
"й": "i",
"к": "k",
"л": "l",
"м": "m",
"н": "n",
"о": "o",
"п": "p",
"р": "r",
"с": "s",
"т": "t",
"у": "u",
"ф": "f",
"х": "kh",
"ц": "ts",
"ч": "ch",
"ш": "sh",
"щ": "shch",
"ю": "iu",
"я": "ia"
}
input_string = input_string.lower()
output_string = ""
for char in input_string:
output_string += cyrillic_to_latin_dict.get(char, char)
return output_string
@convert_to_latin
def decorated_cyrillic_to_latin(input_string, chars="?!:;,."):
return cyrillic_to_latin(input_string)
result = decorated_cyrillic_to_latin("Привіт, як справи?!")
print(result)
Объяснение: