2016-11-06 242 views
-1
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() 

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

+2

您的代码是没有意义的。你知道'x'是什么吗?什么'str.find'呢?我建议你用例如[Python Tutor](http://pythontutor.com/visualize.html)。请注意,一旦你有中间字符的索引,你就完成了! – jonrsharpe

+0

您需要阅读有关字符串方法的文档,因为您使用不正确。 'odd_string.find(x)'将返回'-1',因为你正在搜索数字'variable/2'的字符串表示形式。因此,'.find'将返回-1,而'odd_string [middle_character]'将返回字符串的最后一个字符(按照Python的负向索引)。 –

回答

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]:在第n个索引
  • str[n:]返回值::从第n个索引直到返回值返回从第0个索引字符串n-1个索引
  • str[n]名单末尾
1

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

def get_middle_character(odd_string): 

比方说,我们称之为get_middle_character('hello'),所以odd_string'hello'

variable = len(odd_string) # variable = 5 

一切都OK为止。

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在这里提问之前先调试你的代码。

0

应该有如下:

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