código morse para python3 inglês
quero converter o código Morse para Inglês usando Python 3+ Consegui converter Inglês para código morse usando isto. http://code.activestate.com/recipes/578407-simple-morse-code-translator-in-python/
mas eu quero converter o código Morse para Inglês
eu tentei fazê-lo um carecter de cada vez, mas o problema é que Letras de código morse não são 1 carecter longo como letras inglesas, então E é "."E S é"..."o problema que tenho é que ... o laço do dicionário vai encontrar o"."e condizem com "E", por isso em vez de ficar com "e" eu tentei corrigir isso detectando espaços e fazendo uma palavra de cada vez, mas em vez de procurar as letras na palavra ele procura a palavra inteira contra o dicionário sou novo em Python e dicionários e não sei como diferenciar entre um "E"."e um S"..."ao procurar no meu dicionário
Aqui está o meu código.# defines the dictionary to convert morse to english
CODE_reversed = {'..-.': 'F', '-..-': 'X',
'.--.': 'P', '-': 'T', '..---': '2',
'....-': '4', '-----': '0', '--...': '7',
'...-': 'V', '-.-.': 'C', '.': 'E', '.---': 'J',
'---': 'O', '-.-': 'K', '----.': '9', '..': 'I',
'.-..': 'L', '.....': '5', '...--': '3', '-.--': 'Y',
'-....': '6', '.--': 'W', '....': 'H', '-.': 'N', '.-.': 'R',
'-...': 'B', '---..': '8', '--..': 'Z', '-..': 'D', '--.-': 'Q',
'--.': 'G', '--': 'M', '..-': 'U', '.-': 'A', '...': 'S', '.----': '1'}
def main():
#takes user message and makes it upper case
msg = input('MESSAGE: ')
msg = msg.upper()
addtolist = "" # creates blank string
message = [] # creates blank list
for i in msg:
addtolist = addtolist + i # adds every letter in MSG into a string until it finds a space
addtolist.upper() # makes every letter uppercase
if i == " ": # if it detects a space
message.extend(addtolist)
# adds the previously created addtolist to a list, this makes one word
addtolist = "" # clears previous variable
for i in message:
# for every word in the list
str(i) # make it into a string
print(CODE_reversed[i()]) # search the dictionary for that word
if __name__ == "__main__":
main()
Este código pega numa palavra e tenta enfrentá-la. o dicionário, mas não funciona.
eu também tentei pesquisar cada letra de código morse individual contra o dicionário, mas o problema é que você não pode dizer quando uma letra começa e termina, então "..."aparece como" EEE "em vez de" S " e não sei como resolver isto
eu também tentei procurar soluções, mas só as encontrei em Java e não conheço Java
2 answers
Uma vez que você define o mapeamento em uma direção, você pode usar uma compreensão dict para mapeá-lo da outra maneira
CODE = {'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': '----.'
}
CODE_REVERSED = {value:key for key,value in CODE.items()}
Então você pode usar join
com uma expressão geradora para executar as traduções.
def to_morse(s):
return ' '.join(CODE.get(i.upper()) for i in s)
def from_morse(s):
return ''.join(CODE_REVERSED.get(i) for i in s.split())
>>> to_morse('hello')
'.... . .-.. .-.. ---'
>>> from_morse('.... . .-.. .-.. ---')
'HELLO'
mor = {'.-': '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'}
print('''Enter your msg in Morse.
Notic that:
1- Use / to separate the letters and space to separate words.
2- Your message must contain only letters and numbers.
3- '?' in output means that your input was unknowed.
>>> ''', end = '')
msg = input(' ')
out = []
letter = []
j = -1
for i in msg.split(' '):
j += 1
letter += [i.split('/')]
for k in range(len(letter[j])):
out += mor.get(letter[j][k], '?')
out += ' '
print('\n >>> Your msg is: ', end = '')
print(''.join(out))`
Resultado:
Enter your msg in Morse.
Notic that:
1- Use / to separate the letters and space to separate words.
2- Your message must contain only letters and numbers.
3- '?' in output means that your input was unknowed.
>>> ...././.-../.-.. .--/---/.-./.-../-.. (for example)
>>> Your msg is: HELLO WORLD