我正在执行代码战中的此问题集。我已经完成了基本的摩尔斯电码功能,但是我没有找到其他一些测试用例的方法。

测试的代码对于8/12测试用例而言正确。我该如何测试更长的句子,例如“ The Brown Quick Fox Jumped over the lazy dog”,一个“ E E”的测试用例以及一个“ S O S”的测试用例?

这是我的代码:

def decodeMorse(morse_code):
    space_pos = morse_code.find("  ")
    match_str = ''.join(MORSE_CODE.get(i) for i in morse_code.split())
    match_list = list(match_str)
    if space_pos >= 0:
        edit_match = match_list.insert(int(space_pos/3.5), " ")
    final_str = ''.join(match_list)
    return final_str


这是我正在查看的Code Wars Kata


  在此kata中,您必须编写一个简单的摩尔斯电码解码器。尽管现在摩尔斯电码已被语音和数字数据通信渠道所取代,但它仍在世界各地的某些应用中得到使用。
  
  摩尔斯电码将每个字符编码为“点”和“破折号”的序列。例如,字母A被编码为·−,字母Q被编码为−−·−,数字1被编码为·−−−−。摩尔斯电码不区分大小写,传统上使用大写字母。用摩尔斯电码写消息时,一个空格用于分隔字符代码,而三个空格用于分隔单词。例如,摩尔斯电码中的消息HEY JUDE···· · −·−− ·−−− ··− −·· ·
  
  注意:代码之前或之后的多余空格没有任何意义,应将其忽略。
  
  除了字母,数字和标点符号外,还有一些特殊的服务代码,其中最臭名昭著的是国际求救信号SOS(由泰坦尼克号首次发布),其编码为···−−−···。这些特殊代码被视为单个特殊字符,通常作为单独的单词发送。
  
  您的任务是实现一个功能,该功能将摩尔斯电码作为输入并返回已解码的人类可读字符串。
  
  例如:

decodeMorse('.... . -.--   .--- ..- -.. .')
#should return "HEY JUDE"

  
  注意:出于编码目的,您必须使用ASCII字符.-,而不是Unicode字符。
  
  摩尔斯电码表已预载为字典,请随时使用:MORSE_CODE['.--']

最佳答案

问题在于,使用morse_code.find(" ")只会找到第一个双精度空格的索引。不能保证您的输入仅包含两个单词。您还需要检测输入字符串中的任何其他双精度空格。

其次,将位置除以3.5并不可靠,因为您不知道在最终翻译的字符串中插入空格的位置。尽管在摩尔斯电码编码中这可能是一个字母宽度的平均数,但有些单词的宽度更接近每个字母2。

您应该通过执行.split(" ")将输入拆分为单词。然后分别解决每个单词的问题,最后将这些单独的翻译与它们之间的一个空格连接在一起。

如果将问题分解为以下步骤,则非常简单:


通过将摩尔斯句拆分成摩尔斯词(在两个空间边界处)并分别翻译每个摩尔斯词来翻译摩尔斯句
通过将单词分成摩尔斯字符(在单个空间边界)并分别翻译每个摩尔斯字符来翻译摩尔斯词
将翻译的字符连接在一起
将翻译的单词连接在一起,以空格分隔。


这是一个可能的Python解决方案:

# helper function to solve the problem for just one Morse-word
def decodeMorseWord(morse_word):
    return "".join([MORSE_CODE[morse_letter] for morse_letter in morse_word.split(' ')])

def decodeMorse(morse_code):
    return " ".join([decodeMorseWord(morse_word) for morse_word in morse_code.split('   ')])

关于python - 摩尔斯电码程序不处理带有空格的测试用例,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/59179747/

10-12 13:18