مترجم کد مورس در پایتون

کد مورس روشی است برای انتقال اطلاعات متنی به شکل یک توالی از صدای خاموش روشن، چراغ یا کلیک که می تواند مستقیم توسط یک شنونده ماهر و بدون تجهیزات خاص دریافت و ترجمه شود. این نام به دلیل ساموئل اف. بی مورس ، مخترع تلگراف انتخاب شده است.

الگوریتم این کار بسیار ساده است. هر کاراکتر زبان انگلیسی با یک سری “نقاط” و “خط” یا گاهی اوقات فقط یک “نقطه” یا “خط” و برعکس جایگزین می شود.

رمزگذاری

۱-در صورت رمزگذاری ، هر کاراکتر را از یک کلمه یک به یک بار استخراج می کنیم و آن را با کد مورس مربوطه ذخیره شده در دیتا اصلی جستجو می کنیم.
۲-کد مورس را در یک متغیر ذخیره کنید.
۳-هنگام رمزگذاری در کد مورس ، باید بین هر حرف و ۱ فاصله و بین هر کلمه ۲ فضای اضافه کنیم.
۴-اگر کاراکتر فاصله باشد ، فاصله دیگری را به متغیر نتیجه اضافه کنید. این روند را تا زمانی که کل رشته را طی کنیم تکرار می کنیم.

 

رمزگشایی

۱-کاراکترها را از رشته استخراج می کنیم تا جایی که فاصله ای پیدا نکنیم.

۲-به محض اینکه فاصله ای پیدا کردیم ، کاراکتر انگلیسی مربوطه را از کد مورس جستجو می کنیم و آن را به متغیری اضافه می کنیم که نتیجه را ذخیره می کند.

۳-دقت داشته باشید که جستجو فاصله مهمترین قسمت از این فرآیند رمزگشایی است. به محض اینکه ۲ فاصله متوالی بدست آوردیم ، فاصله دیگری را به متغیر خود اضافه خواهیم کرد.

۴-آخرین فاصله انتهای رشته به ما کمک می کند تا آخرین ترتیب کاراکترهای کد مورس را شناسایی کنیم.

 

پیاده سازی

پایتون ساختار داده ای به نام Dictionary را در اختیار شما قرار می دهد که اطلاعات را به صورت key-value  ذخیره می کند که برای اجرای رمزگذاری مانند کد مورس بسیار مناسب است. می توانیم اطلاعات کد مورس را در یک Dictionary که در آن (key-value) => (کاراکترهای انگلیسی-کد مورس) ذخیره کنیم. متن ساده (حروف انگلیسی) جای کلیدها را می گیرد و متن رمزنگاری (کد مورس) مقادیر کلیدهای مربوطه را تشکیل می دهد. به مقادیر کلیدها می توانیم از Dictionary به همان کاراکتر مورد نظر دسترسی پیدا کنیم.

Code:

# Python program to implement Morse Code Translator
'''
VARIABLE KEY
'cipher' -> 'stores the morse translated form of the english string'
'decipher' -> 'stores the english translated form of the morse string'
'citext' -> 'stores morse code of a single character'
'i' -> 'keeps count of the spaces between morse characters'
'message' -> 'stores the string to be encoded or decoded'
'''
# Dictionary representing the morse code chart
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':'--..',
'۱':'.----', '۲':'..---', '۳':'...--',
'۴':'....-', '۵':'.....', '۶':'-....',
'۷':'--...', '۸':'---..', '۹':'----.',
'۰':'-----', ', ':'--..--', '.':'.-.-.-',
'?':'..--..', '/':'-..-.', '-':'-....-',
'(':'-.--.', ')':'-.--.-'}

# Function to encrypt the string

# according to the morse code chart
def encrypt(message):
cipher = ''
for letter in message:
if letter != ' ':
# Looks up the dictionary and adds the
# correspponding morse code
# along with a space to separate
# morse codes for different characters
cipher += MORSE_CODE_DICT[letter] + ' '
else:
# ۱ space indicates different characters
# and 2 indicates different words
cipher += ' '
return cipher

# Function to decrypt the string
# from morse to english
def decrypt(message):
# extra space added at the end to access the
# last morse code
message += ' '
decipher = ''
citext = ''
for letter in message:
# checks for space
if (letter != ' '):
# counter to keep track of space
i = 0
# storing morse code of a single character
citext += letter
# in case of space
else:
# if i = 1 that indicates a new character
i += 1
# if i = 2 that indicates a new word
if i == 2 :
# adding space to separate words
decipher += ' '
else:
# accessing the keys using their values (reverse of encryption)
decipher += list(MORSE_CODE_DICT.keys())[list(MORSE_CODE_DICT.values()).index(citext)]
citext = ''
return delattr

# Hard-coded driver function to run the program
def main():
message = "www.pishronic.ir"
result = encrypt(message.upper())
print (result)
message = "--. . . -.- ... -....- ..-. --- .-. -....- --. . . -.- ... "
result = decrypt(message)
print (result)
# Executes the main function

if __name__ == '__main__':

main()

Output:

–. . . -.- … -….- ..-. — .-. -….- –. . . -.- …


مطالب پیشنهادی برای شما


 

محمد صداقتی

دیدگاهتان را بنویسید

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *