【问题标题】:why are the spaces in between the words not showing up为什么单词之间的空格不显示
【发布时间】:2021-07-10 14:34:02
【问题描述】:

我有一个莫尔斯程序,但单词之间的空格没有显示。有人有什么想法吗?更喜欢最简单的方法

样本输入:

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

【问题讨论】:

  • 我需要它,因为我需要在莫尔斯字符之间留两个空格
  • 如果您的映射MORSE_CODES 根本不使用空格并且您将在转换之外处理它们,那会更简单。
  • @ExplooreX 这毫无意义,我需要在单词之间留四个空格,我告诉你每个字符后面需要两个空格
  • @qwvst 抱歉,请将string=string+"" 更新为string=string+" "
  • 为什么需要那两个空格?

标签: python loops dictionary if-statement morse-code


【解决方案1】:

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)

【讨论】:

    【解决方案2】:

    我建议你这个解决方案:

    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 的翻译表,以获得更好的可读性。

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-04-22
      • 1970-01-01
      • 2023-03-09
      • 2020-01-14
      • 1970-01-01
      • 2016-05-08
      相关资源
      最近更新 更多