Could anyone please help with one right solution? Convert to english with certain spaces between every letter and words. l did:
eng_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', '-----': '0',
'.----': '1', '..---': '2', '...--': '3',
'....-': '4', '.....': '5', '-....': '6',
'--...': '7', '---..': '8', '----.': '9'
}
nomorse = input("Enter your code here: ")
nomorse_list = nomorse.split(' ')
text = ''
morse= True
for letter in nomorse_list:
for key in morse_eng_dict.keys():
if letter == key:
text = text + str(morse_eng_dict[key])
if letter == '':
text = text + " "
if morse == True:
string = "".join(text)
print(string)
the problem.. Sometimes there can be not possible conversion of some coded symbols. that symbols can be displayed like " * "
for example: "- .... .. ....... - . .- --" should be "thi* team"
if try to put like
if letter != key:
letter = '*'
text = text + str(morse_eng_dict[key] + '*')
that shows * after every doubled letter the rest of my attempts all resulted text with spaces in every certain letters.
A couple of notes on the code above. When trying to access the value of a dictionary instead of this...
for key in morse_eng_dict.keys():
if letter == key:
text = text + str(morse_eng_dict[key])
try
if letter in morse_eng_dict:
text = text + str(morse_eng_dict[letter])
This will accomplish the same thing in a much more efficient way.
If you want to only replace dots and dashes, you have a few options. One would be this...
if letter in morse_eng_dict:
text += str(morse_eng_dict[letter])
else:
text += letter
Alternatively, you can use regular expressions to match values and substitute them. In this case r'[\.-]*'
can be used to match words morse code words.
Here is a runnable example!
#!/usr/bin/env python
import re
morse_eng_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', '-----': '0',
'.----': '1', '..---': '2', '...--': '3',
'....-': '4', '.....': '5', '-....': '6',
'--...': '7', '---..': '8', '----.': '9'
}
nomorse = input("Enter your Morse code here:")
def replacer(match: re.Match):
m = match.group()
return morse_eng_dict.get(m, m)
text = re.sub(r'[\.-]*', replacer, nomorse)
morse = text != nomorse
if morse:
string = "".join(text)
print(string)
<script src="https://modularizer.github.io/pyprez/pyprez.min.js"></script>