0

我想将整个句子从摩尔斯电码解码为普通字母 - 我的脚本就是这样做的,但它连接了所有单词 - 它不保留空格。在摩尔斯电码(输入)中,三个空格代表单词之间的分隔,而一个空格代表字母之间的分隔。

我尝试添加三个空格作为字典的键,对应的值为一个空格,但它似乎不起作用。

def decodeMorse(morseCode):
    MORSE_CODE['   '] = ' '
    return ''.join(MORSE_CODE.get(i) for i in morseCode.split())

我也尝试使用正则表达式分隔输入,但我失败了。有没有办法使用字典使它工作?甚至可以在字典中使用空格作为键和输入吗?

4

2 回答 2

1

str.split()在任意宽度的空格上拆分输入字符串。这意味着您只能获得不是空格的字符串部分(其中空格包括空格)。

您通常会将输入拆分两次;一次在字符串' '上获取单词列表,然后在空格上的每个单词仅获取字母:

def decodeMorse(morseCode):
    return ' '.join([
        ''.join([MORSE_CODE.get(i) for i in word.split()])
        for word in morseCode.split('   ')])

如果您想使用您的方法,则必须使用正则表达式来拆分并包含3 个空格分隔符:

re.split(r'([ ]{3}| )', morseCode)

但是您必须过滤掉单空格字母分隔符,因为re.split()可以包含或不包含整个拆分操作的分隔符,而不是单个分隔符标记。

于 2016-10-30T11:08:16.953 回答
0

该函数split会将三重空格视为单个分隔符。因此,一种选择是首先在三重空间上显式拆分,正如@Martijn Pieters 所建议的那样,或者首先用摩尔斯电码中没有出现的其他东西(例如,maybe |)替换三重空间,然后将其转换为空格:

def decodeMorse(morseCode):
    MORSE_CODE['|'] = ' '
    return ''.join(MORSE_CODE.get(i) for i in morseCode.replace('   ', '|').split())
于 2016-10-30T11:19:20.827 回答