Создадим преобразователь русскоязычного текста в звуки азбуки Морзе. Для этого воспользуемся таблицей соответствий символов «точка» и «тире» с кириллическими буквами.
В азбуке Морзе отсутствуют такие символы как:
- Точка
- Тире
- Запятая
- Восклицательный знак
- Вопросительный знак
- Другие специальные символы
Этот нюанс необходимо учесть. Программа должна уметь обрабатывать такие символы. Сделаем максимально просто — будем их игнорировать. Также, понятие строчной и заглавной буквы растворяются.
Создадим функцию, которая будет преобразовывать все символы исходной строки в нижний регистр и очищать саму строку от специальных символов.
1 2 3 4 5 6 7 8 9 |
def Clean_stroke(content): result = [] content = str(content).lower() for element in content: if ord(element) >= 1072 and ord(element) <= 1103: result.append(element) return result |
Теперь напишем функцию, которая будет преобразовывать «чистый» текст в наборы «точек тире» Морзе. Создадим ассоциативный массив, ключами которого будут кириллические символы, а значениями ключей будут соответствующие наборы «точек тире».
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 |
def Russian_to_Morse(content): rus_to_morse = {'а': '.-', 'б': '-...', 'в': '.--', 'г': '--.', 'д': '-..', 'е': '.', 'ж': '...-', 'з': '--..', 'и': '..', 'й': '.---', 'к': '-.-', 'л': '.-..', 'м': '--', 'н': '-.', 'о': '---', 'п': '.--.', 'р': '.-.', 'с': '...', 'т': '-', 'у': '..-', 'ф': '..-.', 'х': '....', 'ц': '-.-.', 'ч': '---.', 'ш': '----', 'щ': '--.-', 'ъ': '.--.-.', 'ы': '-.--', 'ь': '-..-', 'э': '..-..', 'ю': '..--', 'я': '.-.-'} content = Clean_stroke(content) result = [] for element in content: result.append(rus_to_morse[element]) return result |
Всё готово, осталось использовать в жизни!
Используем функции для конвертации русского текста, а также озвучим эти самые «точки тире» с помощью модуля winsound. Ещё потребуется модуль time для установки небольшой задержки между «словами».
Подключаем модули
1 2 |
import winsound import time |
Применим наши функции для озвучивания на «языке Морзе» имения Петя.
1 2 3 4 5 6 7 8 9 10 11 |
frequency = 1000 content = Russian_to_Morse('Петя') for set in content: for symbol in set: if symbol == '.': winsound.Beep(frequency, 100) elif symbol == '-': winsound.Beep(frequency, 700) print() time.sleep(0.2) |
Всё! Мы написали конвертер русского текста в «точка-тире» азбуки Морзе с озвучиванием!
Весь код выглядит так
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 |
import winsound import time def Clean_stroke(content): result = [] content = str(content).lower() for element in content: if ord(element) >= 1072 and ord(element) <= 1103: result.append(element) return result def Russian_to_Morse(content): rus_to_morse = {'а': '.-', 'б': '-...', 'в': '.--', 'г': '--.', 'д': '-..', 'е': '.', 'ж': '...-', 'з': '--..', 'и': '..', 'й': '.---', 'к': '-.-', 'л': '.-..', 'м': '--', 'н': '-.', 'о': '---', 'п': '.--.', 'р': '.-.', 'с': '...', 'т': '-', 'у': '..-', 'ф': '..-.', 'х': '....', 'ц': '-.-.', 'ч': '---.', 'ш': '----', 'щ': '--.-', 'ъ': '.--.-.', 'ы': '-.--', 'ь': '-..-', 'э': '..-..', 'ю': '..--', 'я': '.-.-'} content = Clean_stroke(content) result = [] for element in content: result.append(rus_to_morse[element]) return result frequency = 1000 content = Russian_to_Morse('Петя') for set in content: for symbol in set: if symbol == '.': winsound.Beep(frequency, 100) elif symbol == '-': winsound.Beep(frequency, 700) print() time.sleep(0.2) |