【问题标题】:Remove extra space before word ends在单词结束前删除多余的空格
【发布时间】:2021-04-15 01:56:42
【问题描述】:

我需要一些帮助来删除单词/字符串结束前的多余空格。有人有什么想法吗?

输入:

hello

我得到的输出(最后两个空格):

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

预期输出(末尾只有一个空格,但字母之间有两个空格):

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

这是我的代码:

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


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

【问题讨论】:

标签: python dictionary


【解决方案1】:

你可以这样做:

my_msg_Morse_list.replace(' ','')

已编辑

我被纠正了, 如果问题总是两个空格,也许你可以用

修剪字符串
my_msg_Morse = my_msg_Morse[:-1]

【讨论】:

  • 感谢您的反馈,我编辑了我的答案
  • 这个去哪儿了?
  • 就在encode_Morse(my_msg)返回之前和for 循环之外
【解决方案2】:

我会在您的字符串上使用split() 方法将您的莫尔斯电码解析为可迭代的,然后遍历每个代码,首先使用strip(),然后忽略空元素。

【讨论】:

    【解决方案3】:

    您可以通过以下两种方式之一:

    1. 使用enumerate() 跟踪迭代中每个字母的索引。检查这是否是my_msg 中的最后一个字母。如果是,请不要添加第二个空格。
    def encode_Morse(my_msg):
      my_msg=my_msg.upper()
    
      my_msg_Morse=" "
      for index, letter in enumerate(my_msg):
        
        if letter!=" " and letter not in MORSE_CODES:
          my_msg_Morse+=" * "
        elif letter!=" ":
           my_msg_Morse+= MORSE_CODES[letter] + " "
           if index < len(my_msg) - 1:
               my_msg_Morse += " "
        else:
          my_msg_Morse+=" "
    
      return my_msg_Morse
    
    1. 建立一个列表,然后使用str.join() 将其与空格连接起来。我们还必须在 join() 的结果前后添加一个空格。
    def encode_Morse(my_msg):
      my_msg=my_msg.upper()
    
      my_msg_Morse_list = []
      for letter in my_msg:
        if letter=" " and letter not in MORSE_CODES:
          my_msg_Morse_list.append("*")
        elif letter!=" ":
           my_msg_Morse_list.append(MORSE_CODES[letter])
        else:
          my_msg_Morse_list.append(" ")
      # Add the leading and trailing space
      return " " + "  ".join(my_msg_Morse_list) + " "
    

    我将重写你的函数以使 if-else 阶梯更清晰一些。首先,我要为MORSE_CODES 字典中的空格添加一个值。这消除了检查letter 是否为空格的需要。然后,我将使用dict.get() 函数从MORSE_CODES 中获取键letter 的值。 get() 让我们指定在字典中不存在给定键时要返回的默认值。

    
    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':'--..', ' ': ' '}
    
    def encode_Morse(my_msg):
      my_msg=my_msg.upper()
      my_msg_Morse_list = []
      for letter in my_msg:
        morse_letter = MORSE_CODES.get(letter, "*")
        my_msg_Morse_list.append(morse_letter)
    
      # Add the leading and trailing space
      return " " + "  ".join(my_msg_Morse_list) + " "
    

    当您完成所有这些操作时,如果您想使用生成器表达式代替循环,可以在一行中编写整个函数:

    def encode_Morse(my_msg):
      return " " + "  ".join(MORSE_CODES.get(letter, "*") for letter in my_msg.upper()) + " "
    

    对于每个函数,您可以通过检查以下代码是否提供True来检查它是否提供了预期的输出

    ' ....  .  .-..  .-..  --- ' == encode_Morse("hello")
    

    【讨论】:

    • 我为什么要创建一个列表?
    • 这样您就可以使用str.join() 连接列表中的所有元素,它们之间有两个空格" ".join(["a", "b"]) 给您"a b"
    • 你可以添加另一个 elif 语句,它可以说不要在字符串的最后一个字母之后放置空格吗?
    • 您的问题是您希望在最后一个字母后有 一个 个空格。你到底想要什么?
    • 我需要在莫尔斯字母之间有两个空格,最后一个莫尔斯字符后有一个空格。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-03-03
    • 2014-09-12
    • 1970-01-01
    • 1970-01-01
    • 2016-05-19
    • 2012-01-24
    • 1970-01-01
    相关资源
    最近更新 更多