تبدیل متن به کد مورس با اسکریپت پایتونی :: Mr Python | مستر پایتون

تبدیل متن به کد مورس با اسکریپت پایتونی

  • ۱۱۸۲۹

تبدیل متن به کد مورس با اسکریپت پایتونی

 

درود به همه !

 

خب خب خب . سلام . بعد از مدت ها دیگه آزاد شدیم از یه سری مشکلات و الان میتونیم باز دوباره روز به روز پست جدید بنویسیم .

 

امروز میخوایم  راجع به مورس صحبت کنیم . خب اول بگیم مورس چیه ؟

- کد مورس در واقع یه روش برای انتقال اطلاعاته که در اون حروف و کلمات داخل جمله تبدیل به کد هایی میشن که این کد ها تشکیل شده از نقطه (•) و خط (-) هستن .

مثلا کلمه ی Hossein رو اگه تبدیل به کد مورس کنیم میشه این :

•••• −−− ••• ••• • •• −•

 

جالبه نه !

در زیر تصویر الفبای مورس رو میبینید :

 

خب حالا مورس رو به روش های مختلف انتقال میدن و همچنین در طول تاریخ استفاده های زیادی هم ازش شده . یکی از جالب ترین هایی که ازش دیدم توی فیلم میان ستاره ای بود اگه یادتون باشه :)

من خودم خیلی مورس رو دوست دارم . چرا ؟ چون که به روش های خیلی زیادی میشه انتقالش داد . در واقع در هر روشی که بشه دو حالت نقطه و خط رو نشون داد کار راه میافته .

 

یکی از مهمترین روش های انتقال مورس روش تولید صدا یا مثلا ضربه زدنه . فرض کنید میخوایم با ضربه زدن روی میز با صدای تق تق تق ... یه کد مورس رو انتقال بدیم . برای اینکار یه سری قوانینی هست . یکی از اساسی ترین قوانینی که در این روش انتقال باید رعایت بشه میزان کشش یا دیرند ضربه هاست . برای مثال کشش ضربه ای که نشان دهنده ی نقطه (•) است یک واحد است و میزان کشش ضربه ای که نشان دهنده ی خط (-) است سه واحد است . یعنی هر ضربه ای که یک خط (-) را نشان میدهد از لحاظ کشش سه برابر کشش یک نقطه (•) است . از این طریق اون شخصی که داره گوش میده میتونه بفهمه که منظور شما از هر ضربه نقطه (•) است یا خط (-) !

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

اینا اساسی ترین قوانین انتقال به این روش بودن .

ما میتونیم کلی روش برای انتقال از خودمون در بیاریم . مثلا از طریق چشمک زدن . خاموش روشن شدن یه چراغ . بوق زدن :)

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

 

حالا میخوایم یه اسکریپتی بنویسیم که بیاد خودش برامون یه متن رو تبدیل به مورس کنه و همچنین با بوق زدن کد مورس اون پیام رو پخش کنه . :)

 

خب ما دوتا سورس داریم . یکی برا ویندوزه یکی برا لینوکس . تفاوت زیادی ندارن تنها تفاوتشون توی روش پخش صدای بوقه . داخل لینوکس از ابزار beep استفاده میکنیم . بنابراین اگه میخواین روی لینوکس باز کنید ابتدا اولش با دستور زیر ابزار beep رو نصب کنید  :

MrPython@debian:~$ sudo apt install beep

 

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

 

سورس لینوکس :

#!/usr/bin/python3
# MrPython.blog.ir
from os import system
from time import sleep
MORSE_CODES = {"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" : "--..",
        " " : " "}

def playSound(code):
    for i in code:
        if i == ".":
            system("beep -l 100")

        elif i == "-":
            system("beep -l 300")

        elif i == " ":
            sleep(1/2)
            return ("  ")
    return code+" "
    
    
text = input("Text : ")
text = text.upper()
morsed = ""
for char in text:
    morsed += playSound(MORSE_CODES[char])
    sleep(300/1000)
morsed = morsed.replace(".","•")
morsed = morsed.replace("-","−")
print("{} : {}".format(text,morsed))

 

سورس ویندوز :

# MrPython.blog.ir
from winsound import Beep
from time import sleep
MORSE_CODES = {"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" : "--..",
        " " : " "}

def playSound(code):
    for i in code:
        if i == ".":
            Beep(800,100)

        elif i == "-":
            Beep(800,300)

        elif i == " ":
            sleep(1/2)
            return ("  ")
    return code+" "
    
    
text = input("Text : ")
text = text.upper()
morsed = ""
for char in text:
    morsed += playSound(MORSE_CODES[char])
    sleep(300/1000)
morsed = morsed.replace(".","•")
morsed = morsed.replace("-","−")
print("{} : {}".format(text,morsed))

خب کد رو اگه بخوایم طبق روال عادی توضیح بدیم توی خط اول که کتابخونه هارو وارد کار کردیم و یه دیکشنری تعریف کردیم که تمامی حروف انگلیسی و معادل های مورسش رو داخلش داره . همچنین یه تابعی داریم به اسم playSound که معادل با  حروف مورس کد که نقطه یا خط هستش صدای بوق رو تولید میکنه و یه جایی از برنامه هم یه اینپوت گرفتیم که متن کاربر رو ازش میگیریم و بعدشم با توجه به دیکشنری کد ها تبدیلش میکنیم .

 

اینم از پست امشب  . از این تاریخ به بعد زود به زود پست میزاریم

امیدوارم استفاده شه .

 

یا حق !

  • سلام وقتتون بخیر 

    میشه رمز گشایی این کد رو هم توضیح بدین ؟

    پاسخ:
    سلام اینجا دیگه نه ولی احتمالا روی وبسایتمون یه پست براش منتشر میکنیم .
  • سلا

    توی یه قسمت از کد نوشته

    ()text.upper

    upperچیه و کارش چیه؟

    پاسخ:
    درود . یک داده رشته ای رو uppercase میکنه به عبارتی حروفشو تبدیل به حروف بزرگ انگلیسی میکنه . مثلا hossein رو تبدیل به HOSSEIN  میکنه .
  • ببخشید کد مورس فارسی از کدام سمت خوانده میشود

    پاسخ:
    سلام اگه متن فارسی به صورت فینگلیش (فارسی ولی با حروف انگلیسی) نوشته بشه که طبق روال عادی از چپ به راست نوشته میشه . 
    ولی خب اگه قراره حتما به فارسی نوشته بشه، باید برسی کنید کد های مورس و جدول مورس برای حروف فارسی هم موجود باشه . سپس میتونید از راست به چپ بنویسید و اسکریپت رو هم طوری طراحی کنید که از راست به چپ شروع به دیکود کردن کنه .
  • ترخدا اون ریزاشم الان بگید واجبه

    پاسخ:
    سورس دیکودر مورس به ایمیل شما ارسال شد .
  • سلام

    چطور میتونم کاری کنم که برعکس کار انجام بشه؟

    پاسخ:
    سلام . 
    اون دیکشنری که حاوی معادل های هر حرف به کد مورس هست رو باید برعکس کنید . یعنی مثلا حاوی معادل هر کد مورس به هر حرف باشه . سپس یه سری تغییرات خیلی ریز نیاز داره . 
    به سوال شما به طور کامل در قسمت بعدی سوالات شما پاسخ داده خواهد شد . :)
ارسال نظر آزاد است، اما اگر قبلا در بیان ثبت نام کرده اید می توانید ابتدا وارد شوید.
شما میتوانید از این تگهای html استفاده کنید:
<b> یا <strong>، <em> یا <i>، <u>، <strike> یا <s>، <sup>، <sub>، <blockquote>، <code>، <pre>، <hr>، <br>، <p>، <a href="" title="">، <span style="">، <div align="">
تجدید کد امنیتی