-
جمعه, ۳۰ خرداد ۱۳۹۹، ۰۴:۴۹ ب.ظ
-
۱۳۰۵۲
تبدیل متن به کد مورس با اسکریپت پایتونی
درود به همه !
خب خب خب . سلام . بعد از مدت ها دیگه آزاد شدیم از یه سری مشکلات و الان میتونیم باز دوباره روز به روز پست جدید بنویسیم .
امروز میخوایم راجع به مورس صحبت کنیم . خب اول بگیم مورس چیه ؟
- کد مورس در واقع یه روش برای انتقال اطلاعاته که در اون حروف و کلمات داخل جمله تبدیل به کد هایی میشن که این کد ها تشکیل شده از نقطه (•) و خط (-) هستن .
مثلا کلمه ی 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 که معادل با حروف مورس کد که نقطه یا خط هستش صدای بوق رو تولید میکنه و یه جایی از برنامه هم یه اینپوت گرفتیم که متن کاربر رو ازش میگیریم و بعدشم با توجه به دیکشنری کد ها تبدیلش میکنیم .
اینم از پست امشب . از این تاریخ به بعد زود به زود پست میزاریم
امیدوارم استفاده شه .
یا حق !