Эта статья участвует в "Месяце тем Python", подробнее см.Ссылка на мероприятие
Азбука Морзе — это метод передачи текстовой информации в виде серии включенных и выключенных тонов, огней или щелчков, которые могут быть переведены непосредственно заученным другом без специального оборудования. Он назван в честь изобретателя телеграфа Сэмюэля Ф. Б. Морса.
алгоритм
Алгоритм очень прост. Каждый символ в английском языке заменяется серией «точек» и «тире», а иногда просто отдельными «точками» или «тире», и наоборот.
шифрование
- В случае шифрования мы извлекаем каждый символ (если не пробел) из слова по одному и сопоставляем его с соответствующим кодом Морзе, хранящимся в любой структуре данных по нашему выбору (если вы используете кодировку Python, словарь может оказаться очень полезным в этом случае)
- Сохраняем азбуку Морзе в переменной, которая будет содержать нашу закодированную строку, затем добавляем пробел к строке, содержащей результат.
- При кодировании азбукой Морзе нам нужно добавить 1 пробел между каждым символом и 2 последовательных пробела между каждым словом.
- Если символ является пробелом, добавьте еще один пробел к переменной, содержащей результат. Мы повторяем этот процесс, пока не переберем всю строку.
расшифровать
- В случае расшифровки мы сначала добавляем пробел в конец декодируемой строки (это будет объяснено позже).
- Теперь мы продолжаем извлекать символы из строки, пока у нас не останется пробелов.
- Получив пробел, мы ищем соответствующий английский символ в извлеченной последовательности символов (или в нашей азбуке Морзе) и добавляем его в переменную, в которой будет храниться результат.
- Помните, что пространство для отслеживания является наиболее важной частью этого процесса расшифровки. Как только мы получим 2 последовательных пробела, мы добавим еще один пробел к переменной, содержащей декодированную строку.
- Последний пробел в конце строки поможет нам определить последнюю последовательность символов азбуки Морзе (поскольку пробел действует как проверка для извлечения символов и начала их расшифровки).
воплощать в жизнь
Python предоставляет структуру данных, называемую словарем, в которой хранится информация в виде пар ключ-значение, что удобно для реализации шифров, таких как азбука Морзе. Мы можем сохранить таблицу азбуки Морзе в словаре, где(пара ключ-значение) => (английский символ - азбука Морзе). Открытый текст (английские символы) заменяет ключ, а зашифрованный текст (шифр Морзе) формирует значение соответствующего ключа. Доступ к значению ключа можно получить из словаря так же, как мы получаем доступ к значению массива по индексу, и наоборот.
Сравнительная таблица азбуки Морзе
# 实现摩斯密码翻译器的 Python 程序
'''
VARIABLE KEY
'cipher' -> '存储英文字符串的摩斯翻译形式'
'decipher' -> '存储摩斯字符串的英文翻译形式'
'citext' -> '存储单个字符的摩斯密码'
'i' -> '计算摩斯字符之间的空格'
'message' -> '存储要编码或解码的字符串
'''
# 表示摩斯密码图的字典
MORSE_CODE_DICT = { 'A':'.-', 'B':'-...',
'C':'-.-.', 'D':'-..', 'E':'.',
'F':'..-.', 'G':'--.', 'H':'....',
'I':'..', 'J':'.---', 'K':'-.-',
'L':'.-..', 'M':'--', 'N':'-.',
'O':'---', 'P':'.--.', 'Q':'--.-',
'R':'.-.', 'S':'...', 'T':'-',
'U':'..-', 'V':'...-', 'W':'.--',
'X':'-..-', 'Y':'-.--', 'Z':'--..',
'1':'.----', '2':'..---', '3':'...--',
'4':'....-', '5':'.....', '6':'-....',
'7':'--...', '8':'---..', '9':'----.',
'0':'-----', ', ':'--..--', '.':'.-.-.-',
'?':'..--..', '/':'-..-.', '-':'-....-',
'(':'-.--.', ')':'-.--.-'}
# 根据摩斯密码图对字符串进行加密的函数
def encrypt(message):
cipher = ''
for letter in message:
if letter != ' ':
# 查字典并添加对应的摩斯密码
# 用空格分隔不同字符的摩斯密码
cipher += MORSE_CODE_DICT[letter] + ' '
else:
# 1个空格表示不同的字符
# 2表示不同的词
cipher += ' '
return cipher
# 将字符串从摩斯解密为英文的函数
def decrypt(message):
# 在末尾添加额外空间以访问最后一个摩斯密码
message += ' '
decipher = ''
citext = ''
for letter in message:
# 检查空间
if (letter != ' '):
# 计数器来跟踪空间
i = 0
# 在空格的情况下
citext += letter
# 在空间的情况下
else:
# 如果 i = 1 表示一个新字符
i += 1
# 如果 i = 2 表示一个新词
if i == 2 :
# 添加空格来分隔单词
decipher += ' '
else:
# 使用它们的值访问密钥(加密的反向)
decipher += list(MORSE_CODE_DICT.keys())[list(MORSE_CODE_DICT
.values()).index(citext)]
citext = ''
return decipher
# 硬编码驱动函数来运行程序
def main():
message = "JUEJIN-HAIYONG"
result = encrypt(message.upper())
print (result)
message = ".--- ..- . .--- .. -. -....- .... .- .. -.-- --- -. --."
result = decrypt(message)
print (result)
message = "I LOVE YOU"
result = encrypt(message.upper())
print (result)
message = ".. .-.. --- ...- . -.-- --- ..-"
result = decrypt(message)
print (result)
# 执行主函数
if __name__ == '__main__':
main()
вывод:
.--- ..- . .--- .. -. -....- .... .- .. -.-- --- -. --.
JUEJIN-HAIYONG
.. .-.. --- ...- . -.-- --- ..-
I LOVE YOU
Краткое резюме - программа Python реализует транслятор азбуки Морзе
Это все для этой статьи, вы реализуете транслятор азбуки Морзе с помощью программы Python. Мы надеемся, что этот блог поможет вам, блоггеры тоже учатся, если есть какие-либо ошибки, пожалуйста, покритикуйте и исправьте. Если вам понравилась эта статья и вы хотите увидеть больше, вы можете прочитать ее здесь (Github/Gitee) Вот краткое изложение всего моего оригинального и рабочего исходного кода, следуйте за мной, чтобы увидеть больше статей.
🥇 Резюме серии Python для визуализации данных
- Matplotlib для визуализации данных с помощью Python
- Seaborn для визуализации данных с использованием Python
- Боке для визуализации данных с помощью Python
- Plotly для визуализации данных с помощью Python
🧵 Другие статьи по теме
- 30 руководств и советов по Python
- Операторы Python, выражения и отступы
- Ключевые слова Python, идентификаторы и переменные
- Как писать комментарии и многострочные комментарии в Python
- Изучите преобразование чисел и типов Python на примерах
- Типы данных Python — от базового до продвинутого обучения
- Научит вас, как использовать Python для создания игры про змей
- Объектно-ориентированное программирование на Python — классы, объекты и члены
🍰Рекомендуемые статьи из прошлого:
- 20 советов по Python, которые должен знать каждый
- 100 основных вопросов на собеседовании по Python, часть 1 (1–20)
- 100 основных вопросов на собеседовании по Python, часть II (21–40)
- 100 основных вопросов на собеседовании по Python, часть 3 (41–60)
- 100 основных вопросов на собеседовании по Python, часть 4 (61–80)
- 100 основных вопросов на собеседовании по Python, часть 5 (81–100)
Если вы действительно узнали что-то новое из этой статьи, ставьте лайк, добавляйте в закладки и делитесь с друзьями. 🤗Наконец, не забудьте поддержать ❤ или 📑