我想将整个句子从莫尔斯代码解码为普通字母 - 我的脚本就是这样,但它加入了所有单词 - 它不会保留空格。在morseCode(输入)中,三个空格表示单词之间的分隔,而一个空格表示字母之间的分隔。
我尝试添加三个空格作为字典的键,并且相应的值为一个空格,但它似乎不起作用。
def decodeMorse(morseCode):
MORSE_CODE[' '] = ' '
return ''.join(MORSE_CODE.get(i) for i in morseCode.split())
我也尝试使用正则表达式分隔输入,但是我失败了。有没有办法让它使用词典?甚至可以在字典中使用空格作为键和输入吗?
答案 0 :(得分: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()
可以包括或不包括整个拆分操作的分隔符,而不是单独的分隔符标记。
答案 1 :(得分:0)
函数split
会将三个空格视为单个分隔符。因此,一种选择是首先在三重空间上明确分割,如@Martijn Pieters建议的那样,或者首先用摩尔斯电码中没有出现的其他东西替换三重空间(例如,可能是|
),然后将其转换为空白:
def decodeMorse(morseCode):
MORSE_CODE['|'] = ' '
return ''.join(MORSE_CODE.get(i) for i in morseCode.replace(' ', '|').split())