Есть ли способ включить пробел при разбиении строки? - PullRequest
0 голосов
/ 22 марта 2020

(благодаря коду CoryKramer к запросу на сообщение: код Морзе к engli sh python3)

Я пишу программу с азбукой Морзе. Это работает для строки к морсу. При создании morse-to-string он правильно переводит азбуку Морзе, но игнорирует пробел, который мне нужен для вывода.

Вот мой код:

def coder(text, to_morse=True):
    morse_key = {'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': '----.', ' ': ' '
            }

    key_reversed = {value: key for key, value in morse_key.items()}
    if to_morse:
        return ' '.join(morse_key.get(i.upper()) for i in text)
    else:
        x = ''.join([key_reversed.get(i) for i in text.split() for i in (i, ' ')][:-1])
        return str(x)

Если, например, я делаю:

coder('-.. .- - .-   ... -.-. .. . -. -.-. .', False)

, он выводит:

'D A T A S C I E N C E'

Однако, вывод, который мне нужен:

'DATA SCIENCE'

Как мне реализовать функцию split(), включая пробелы?

Ответы [ 2 ]

2 голосов
/ 22 марта 2020

Измените деталь под else на:

text = text.replace(' ', ',').replace(',,,', ', ,')
return ''.join(key_reversed.get(i) for i in text.split(','))
0 голосов
/ 22 марта 2020

Используйте это в своем блоке else

else:
    words = text.split('   ') # split on 3 spaces
    x =[]
    for word in words:
        x.append(''.join([key_reversed.get(i) for i in word.split()]))
    return ' '.join(x)
...