Азбука Морзе. Питон
Всем доброго дня! Есть задача по азбуке Морзе на Питоне. Сделать надо через словарь.
Из условия: Весь текст записан в единственной строке. Текст состоит из английских букв и пробелов, других символов в тексте нет. В тексте не может быть двух или более пробелов подряд. Выведите каждое слово исходного текста, закодированное азбукой Морзе, на отдельной строке. Количество строк в ответе должно совпадать с количеством слов в исходном тексте. Между закодированными буквами нужно ставить ровно один пробел. Например, слово «Help» превратится в «.... . .-.. .--.». Обратите внимание, что строчные и заглавные буквы кодируются одинаково.
Сам вопрос перевода решил легко - на другом курсе уже решил похожую задачу. Но тут бьюсь над переносом (каждое слово на отдельной строке).
morze = {'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': '——••'} # собственно, словарь перевода текста в код
text = input().lower().split() # Houston we have a problem
text = '\n'.join(text)
print(text) # проверочный принт - каждое слово на отдельной строке
for i in text:
for key, value in morze.items():
if i==key:
print(value, end=' ') # однако в итоге получаем код одной строчкой
Есть еще вариант с костылем - я добавил в словарь еще одну пару значений для пробела: ' ': '\n'
morze = {'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': '——••', ' ': '\n'}
text = input().lower()
for i in text:
for key, value in morze.items():
if i==key:
print(value, end=' ')
И код Морзе переносится, однако:
- перед каждым кодом выводится лишний пробел (как я понимаю, унаследованный от предыдущего слова)
- в комментах пишут что с таким костылем не принимается задача, т.к. сам словарь предоставлен платформой "как есть" без права его как-то модифицировать.
Пробовал такой акт отчаяния:
if i==' ':
print('\n')
Но там слова выводились с какими-то гигантскими промежутками...
Как реализовать перевод строки?