为什么单词之间的空格没有出现

问题描述

我有一个莫尔斯程序,但是单词之间的空格没有显示,有人有任何想法吗?首选最简单的方法

样本输入:

APRIL FOOLS DAY

encode_Morse 函数输出

' .-  .--.  .-.  ..  .-..     ..-.  ---  ---  .-..  ...     -..  .-  -.-- '

decode_Morse 函数输出

APRILFOOLSDAY

MORSE_CODES={'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':' --.. '}

##Define functions here
def encode_Morse(my_msg):
  #my_msg=my_msg.upper()

  my_msg_Morse=""
  for letter in my_msg:
    
    if letter!=" " and letter not in MORSE_CODES:
      my_msg_Morse+="*"
    elif letter!=" ":
       my_msg_Morse+= MORSE_CODES[letter]
    else:
      my_msg_Morse+="   "

  return my_msg_Morse+""


def decode_Morse(my_msg): 
 
  string=""
  
  for word in my_msg.split("     "):
  
    for ch in word.split():
      if ch!="  " and ch!="*":
        string=string + list(MORSE_CODES.keys())[list(MORSE_CODES.values()).index(" "+ch+" ")]
      elif ch=="     ":
        string+=" "
    string=string+"" 

  return string

解决方法

split 函数吸收了你的分隔符

我提议:

def decode_Morse(my_msg): 
 
  words = [] 
  
  for word in my_msg.split("     "):
    string = ""
    for ch in word.split():
      string=string + list(MORSE_CODES.keys())[list(MORSE_CODES.values()).index(" "+ch+" ")]
    words.append(string)

  return " ".join(words)
,

我向您推荐这个解决方案:

MORSE_CODES={
    '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':'--..'
}

R_MORSE_CODES = {v:k for k,v in MORSE_CODES.items()}

def encode_morse(msg):
    words = msg.split()
    
    return "  ".join(" ".join(MORSE_CODES.get(c,'*') for c in w) for w in words)
    
def decode_morse(msg):
    words = msg.split("  ")
    return " ".join("".join(R_MORSE_CODES.get(c,'?') for c in w.split()) for w in words)

# Original message
msg = "APRIL FOOLS DAY"

enc_msg = encode_morse(msg)
print(enc_msg)
# .- .--. .-. .. .-..  ..-. --- --- .-.. ...  -.. .- -.--

dec_msg = decode_morse(enc_msg)
print(dec_msg)
# APRIL FOOLS DAY

偏离你的解决方案,我

  1. 不要在字符和莫尔斯电码之间的转换表中使用空格。
  2. 用一个空格字符分隔单个莫尔斯电码,用两个空格标记单词分隔

对于反向翻译,我将字典键和值反向到另一个名为 R_MORSE_CODES 的翻译表以提高可读性。

只要出现任何未知字符,使用一个和两个空格就足以允许兼容性将莫尔斯电码解码回其原始消息。