将中间字符放入奇数长度的字符串中

时间:2016-11-06 23:25:03

标签: python string function find

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()   

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

5 个答案:

答案 0 :(得分: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

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

请注意,即使您正在搜索中间字符,而不是中间字符的字符串索引,您也会遇到麻烦,因为str.find会提供第一个索引,出现子字符串,可能不是您之后的字符串(考虑'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在此处提出问题之前调试代码。

答案 1 :(得分:0)

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

>>> 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-1索引
  • str[n]:在第n个索引返回值
  • str[n:]:从第n个索引返回值到列表末尾

答案 2 :(得分:0)

应该如下:

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

答案 3 :(得分:0)

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

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]

答案 4 :(得分:0)

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])