获取奇数长度字符串的中间字符

新手上路,请多包涵
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()

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

原文由 computer science noob 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 813
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 来调试您的代码。

原文由 jonrsharpe 发布,翻译遵循 CC BY-SA 3.0 许可协议

推荐问题
logo
Stack Overflow 翻译
子站问答
访问
宣传栏