Перевод азбуки Морзе на английский без добавления лишних слов. - PullRequest
0 голосов
/ 06 мая 2018

Я делаю программу с английского на азбуку Морзе и наоборот. Я успешно перевел с английского на азбуку Морзе, но у меня возникли проблемы с переводом азбуки Морзе на английский. Всякий раз, когда я пытаюсь перевести азбуку Морзе на английский, он выдает мне ошибку TypeError: «text = '' .join (map (trans_back.get, user_input)) Ошибка типа: элемент последовательности 0: ожидаемый экземпляр str, найден NoneType ».

Вот мой код. Последний раздел является частью кода, где у меня возникают проблемы:

translation = {
"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": "--.. ",
"1": ".---- ",
"2": "..--- ",
"3": "...-- ",
"4": "....- ",
"5": "..... ",
"6": "-.... ",
"7": "--... ",
"8": "---.. ",
"9": "----. ",
"0": "----- ",
".": ".-.-.- ",
",": "--..-- ",
"?": "..--.. ",
"!": "..--. ",
"/": "-..-. ",
"@": ".--.-. ",
" ": " "
}

user_input = input("Input english or morse code message:\n").upper()

if all(c in translation for c in user_input):
    morse = ''.join(map(translation.get, user_input))
    print(morse)
elif all(c in ".- " for c in user_input):
    print("*needs work in order to change morse to text*")
    #trans_back = {v: k for k, v in translation.items()}
    #text = ''.join(map(trans_back.get, user_input))
    #print(text)

1 Ответ

0 голосов
/ 06 мая 2018

Разница между этими двумя блоками заключается в том, что первый блок ожидает посимвольного сопоставления, но для второго блока требуется сопоставление блока символов с одним ключом. Вам нужно разделить user_input по пробелам, чтобы map применила функцию к группе . с и - с, представляющей одну клавишу. Конечно, тогда вам также нужно будет удалить пробелы из обратного поиска в словаре. Вот код, который я получил для работы:

elif all(c in ".- " for c in user_input):
    trans_back = {v.rstrip(' '): k for k, v in translation.items()}
    text = ''.join(map(trans_back.get, user_input.split(' ')))
    print(text)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...