Вам дан английский текст. Закодируйте его с помощью азбуки Морзе Каждая буква заменяется на последовательность точек и тире. В качестве тире используйте обычный дефис: -
, а в качестве точки — точку .
. Например, буква g превратится в трёхсимвольную строку --.
. Между закодированными буквами ставится ровно один пробел. Например, слово Help
превратится в .... . .-.. .--.
. Обратите внимание, что строчные и заглавные буквы кодируются одинаково.
Формат ввода
Весь текст записан в единственной строке. Текст состоит из английских букв и пробелов, других символов в тексте нет. В тексте не может быть двух или более пробелов подряд.
Формат вывода:
Выведите каждое слово исходного текста, закодированное азбукой Морзе, на отдельной строке.
Количество строк в ответе должно совпадать с количеством слов в исходном тексте.
Примечание
Один из вариантов словаря с Азбукой Морзе:
'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': '----.'
Пример
Ввод
Hello world
Вывод
.... . .-.. .-.. ---
.-- --- .-. .-.. -..
Ввод
Help me SOS
Вывод
.... . .-.. .--.
-- .
... --- ...
Решение
Простая задача на словари. Задаем словарь, где каждой английской букве соответствует код Морзе*. Читаем строку и для каждой буквы выводим соотвествующий символ. Если встретили пробел – переводим вывод на новую строку. Но можно и добавить пробел в словарь со значением ‘\n’. тогда все еще немного упроститься.
* Обратите внимание на то, что имя словаря задано заглавными буквами. В python так принято обозначать переменные которые нельзя менять – в других языках программирования их называют константы. На самом деле эти переменные не являются константами в строгом смысле слова. В отличии от других языков программирования их можно менять. Но смысл от этого не меняется – другие программисты будут знать, что это значение изменять нельзя.
Посмотреть код
Решение
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': '--..',
'0': '-----', '1': '.----', '2': '..---', '3': '...--', '4': '....-',
'5': '.....', '6': '-....', '7': '--...', '8': '---..', '9': '----.'}
for char in input():
if char != ' ':
print(MORZE[char.upper()], end=' ')
else:
print()
Доброго времени суток!
Подскажите суть проблемы
код:
text = input().upper()
listing = text.split()
dicty = {‘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’: ‘—-.’}
for word in listing:
width = len(word)
for i in range(width):
print(dicty.get(word[i], ‘-‘) + ‘ ‘, end=”)
print()
Лог компиляции:
stdout:
/bin/sh ./build.sh 1>&2
stderr:
solution.py:4:1: E128 continuation line under-indented for visual indent
solution.py:5:1: E128 continuation line under-indented for visual indent
solution.py:6:1: E128 continuation line under-indented for visual indent
solution.py:7:1: E128 continuation line under-indented for visual indent
solution.py:8:1: E128 continuation line under-indented for visual indent
solution.py:9:1: E128 continuation line under-indented for visual indent
solution.py:10:1: E128 continuation line under-indented for visual indent
solution.py:11:1: E128 continuation line under-indented for visual indent
solution.py:12:1: E128 continuation line under-indented for visual indent
solution.py:13:1: E128 continuation line under-indented for visual indent
solution.py:14:1: E128 continuation line under-indented for visual indent
solution.py:15:1: E128 continuation line under-indented for visual indent
Код не соответствует стандарту PEP8
или в нем есть синтаксические ошибки
make: *** [Makefile:2: build] Error 1
Стандарт оформления исходного кода (PEP8) требует, чтобы словарь, при таком представлении был выровнен по первым символам: ‘D’ должно быть под ‘A’. и так с каждой строкой словаря.
С одной стороны, соблюдать этот стандарт не обязательно если вы просто тренируетесь писать программы – они будут работать и без его соблюдения. С другой стороны, соблюдение стандарта приводит к тому, что ваши программы будет легче читать другим людям в силу однообразия оформления кода.
Можно почитать стандарт и стараться ему следовать, а можно использовать автоформатеры кода. В PyCharm он встроенный, для VS Code можно скачать любой плагин автоформатирования.
Спасибо за ответ, позвольте немного не по теме, однако этот вопрос у меня возник именно на стадии решения этой задачи. При выводе принта, из соображений удобства, я начал писать f-строку, и столкнулся с вопросом, на который гугл не нашёл мне ответа =) Возможно ли вообще в f-строку засунуть end=”, если вообще возможно перенос строки например убрать, то каким способом это можно сделать в рамках использования f-строк
сами по себе f-строки не содержат перевода строки. Это делает print у которого по-умолчанию “зашит” ‘\n’ в качестве конца строки и который можно изменить с помощью end=. Но, к примеру, в файловых операциях ‘\n’ к f-строкам придется добавлять самому.
То есть нет способа сделать, что-то вроде print(f'{b}’, end=”) для итерируемой переменной b?
Отчего же. прямо так же и делается как с обычным print(). В этом смысле а строка ведет себя ровно так же как любая другая строка в print