Пытаюсь перевести азбуку Морзе на английский

Я пытаюсь перевести азбуку Морзе на английский язык с помощью словаря, который я использовал. Я пытаюсь сделать так, чтобы пользователь ввел сообщение, и оно напечатает его/ее сообщение в коде Морзе.

Мне было легко перевести на азбуку Морзе, однако азбука Морзе на английский вызывает у меня некоторые проблемы.

Во-первых, если я наберу «.-» вместо «A», я фактически получу «E», поскольку он читает первый «.». ключ и переводить его в «E» вместо того, чтобы брать всю строку.

Это то, что я пробовал до сих пор :)

#If user types 'N' or 'n' it proceeds this loop
if morse_message == 'N' or morse_message == 'n':    #Loops looks to see if morse_message was 'N' or 'n'
    nomorse = input("Enter your Morse code here:")
    nomorse_list = (nomorse.join('')
    for letter in nomorse_list:
        not_morse = (morse_eng_dict[letter.upper()])
        print(not_morse)

А это мой словарь, который у меня есть

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"}

Я хотел бы, чтобы Python взял мою азбуку Морзе и распечатал сообщение на английском языке. Вроде что-то вроде... . .-.. .-.. --- (ПРИВЕТ)

Это для проекта, поэтому я не могу использовать какие-то причудливые модули или что-то в этом роде. Любые идеи или вклад? Благодарю вас!


person PKPython    schedule 26.04.2018    source источник
comment
Возможный дубликат кода Морзе для английского python3   -  person Lescurel    schedule 26.04.2018
comment
Большое спасибо! Прости за это   -  person PKPython    schedule 26.04.2018


Ответы (3)


Что-то вроде этого должно работать: по сути, он разбивает строку всякий раз, когда есть пробел, создавая список, в котором каждый элемент является буквой азбуки Морзе. Затем он сверяет каждую букву со словарем и берет английскую копию. Наконец, он помещает все это в список, снова превращает его в строку и печатает. Надеюсь, поможет!

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"}

nomorse = input("Enter your Morse code here:")
nomorse_list = nomorse.split() #this splits the string up wherever there is a space
not_morse = []
morse = True    #The code is morse (so far)
for letter in nomorse_list:
    eng_letter = False
    for key in morse_eng_dict.keys():   #for each of the morse code letters in the dictionary
        if letter == key:
            eng_letter = morse_eng_dict[key]
    if eng_letter: #if a letter was found that corresponds
        not_morse.append(eng_letter)
    else:
        print("Input is not valid morse code.")
        morse = False
if morse == True:
    string = "".join(not_morse) #joining the string together (without spaces in between)
    print(string)
person rarie    schedule 26.04.2018

азбука Морзе построена с неоднозначностью. как вы указали .- можно рассматривать как e t или a. невозможно легко отличить их, не прибегая к большому словарю или какой-то нечеткой логике.

оператор обычно использует пробелы для разделения буквы и слова: https://en.wikipedia.org/wiki/Morse_code

«Буквы слова разделены пробелом, равным трем точкам (одному тире), а слова разделены пробелом, равным семи точкам». если вы вставите пробелы, например: 1 пробел между буквами и 2 пробела между словами, в вашу строку азбуки Морзе, которая сделает декодирование куском пирога (разделить, а затем сопоставить)

person eniacz    schedule 26.04.2018

для любого словаря dictionary = {'.-': 'a'}['.-'] вы также получите 'a' Dictionary.get('.-') также даст вам индексы 'a' для словарей - это строки, любые строки и '.' отличается от '.-'

'.','.-','...','-.--'

Кстати, Морзе — это бинарное дерево, которое начинается с E = left.node и T = right.node...

person marc    schedule 16.01.2021