【问题标题】:Getting the middle character in a odd length string获取奇数长度字符串中的中间字符
【发布时间】:2017-03-20 05:43:20
【问题描述】:
def get_middle_character(odd_string):
    variable = len(odd_string)
    x = str((variable/2))
    middle_character = odd_string.find(x)
    middle_character2 = odd_string[middle_character]
    return middle_character2



def main():
    print('Enter a odd length string: ')
    odd_string = input()
    print('The middle character is', get_middle_character(odd_string))

main()   

我需要弄清楚如何在给定的奇数长度字符串中打印中间字符。但是当我运行这段代码时,我只得到最后一个字符。问题是什么?

【问题讨论】:

  • 您的代码没有意义。你知道x 是什么吗? str.find 做什么?我建议你逐步完成它,例如Python Tutor。请注意,一旦你有了中间字符的索引,你就完成了!
  • 您需要阅读有关字符串方法的文档,因为您使用错误。 odd_string.find(x) 将返回 -1,因为您正在搜索数字 variable/2 的字符串表示形式。因此,.find 将返回 -1,odd_string[middle_character] 将返回字符串的最后一个字符(根据 Python 的负索引)。

标签: python string function find


【解决方案1】:

您需要更仔细地考虑您的代码实际上在做什么。让我们举个例子:

def get_middle_character(odd_string):

假设我们调用get_middle_character('hello'),所以odd_string'hello'

    variable = len(odd_string)  # variable = 5

到目前为止一切正常。

    x = str((variable/2))  # x = '2'

这是显然很奇怪的第一件事——你为什么要字符串'2'?那就是中间字符的索引,你不就是要一个整数吗?另外你只需要一对括号,另一组是多余的。

    middle_character = odd_string.find(x)  # middle_character = -1

显然你不能在odd_stringstr.find 子字符串'2',因为它从来不存在。 str.find 如果找不到子字符串,则返回-1;你应该改用str.index,当它找不到子字符串时,它会给你一个很好的清晰的ValueError

请注意,即使您搜索的是中间字符,而不是中间字符的字符串化索引,您也会遇到麻烦,因为 str.find 给出了子字符串出现的 first 索引,这可能不是您所追求的(考虑'lolly'.find('l')...)。

    middle_character2 = odd_string[middle_character]  # middle_character2 = 'o'

由于 Python 允许从序列末尾开始进行负索引,-1 是最后一个字符的索引。

    return middle_character2  # return 'o'

您实际上可以简化为return odd_string[middle_character],并删除多余的分配;你仍然会得到错误的答案,但代码更简洁(而且没有middle_character2,这是一个糟糕的名字)。


希望您现在可以看到哪里出了问题,并且很明显您应该采取哪些措施来解决它。下次使用例如Python Tutor 在此处提问之前调试您的代码。

【讨论】:

    【解决方案2】:

    您只需要根据字符串的索引和字符串切片简单地访问字符。例如:

    >>> s = '1234567'
    >>> middle_index = len(s)/2
    >>> first_half, middle, second_half = s[:middle_index], s[middle_index], s[middle_index+1:]
    >>> first_half, middle, second_half
    ('123', '4', '567')
    

    解释:

    • str[:n]:将字符串从第 0 个索引返回到n-1th 索引
    • str[n]: 返回第 n 个索引处的值
    • str[n:]: 返回从第 n 个索引到列表末尾的值

    【讨论】:

      【解决方案3】:

      应该如下所示:

      def get_middle_character(odd_string):
          variable = len(odd_string)/2
          middle_character = odd_string[variable +1]
          return middle_character 
      

      【讨论】:

        【解决方案4】:

        我知道为时已晚,但我发布了我的解决方案 我希望它会有用;)

        def get_middle_char(string):
            if len(string) % 2 == 0:
                return None
            elif len(string) <= 1:
                return None
        
            str_len = int(len(string)/2))
        
            return string[strlen]
        

        【讨论】:

          【解决方案5】:
          reversedString = ''
          
          print('What is your name')
          
          str = input()
          idx = len(str)
          print(idx)
          
          str_to_iterate = str
          for char in str_to_iterate[::-1]:
              print(char)
          
          evenodd = len(str) % 2
          if evenodd == 0:
              print('even')
          else:
              print('odd')
          
          l = str
          
          if len(l) % 2 == 0:
              x = len(l) // 2
              y = len(l) // 2 - 1
              print(l[x], l[y])
          else:
              n = len(l) // 2
              print(l[n])
          

          【讨论】:

          • 基于任何给定输入的 idx 的简单代码,并返回呈现的中间偶数和奇数场景的值。
          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2011-05-13
          • 1970-01-01
          • 1970-01-01
          • 2016-01-10
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多