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()
我需要弄清楚如何在给定的奇数长度字符串中打印中间字符。但是当我运行这段代码时,我只得到最后一个字符。问题是什么?
答案 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])