如何return字符串的中间字符python?

How to return the middle character of a string in python?

全题: 编写一个名为 mid 的函数,它接受一个字符串作为参数。您的函数应该提取并 return 中间字母。如果没有中间字母,您的函数应该 return 空字符串。例如,mid("abc") 应该 return "b" 和 mid("aaaa") 应该 return "".

问题:怎么到最后print(x)一切正常预期的,但是 return x 使用以下内容中断程序:IndexError: list index超出范围

感谢您抽出宝贵时间提供帮助!


def mid(string):
    enum = list(enumerate(string))
    lastnum = enum[-1][0] + 1
    if lastnum % 2 == 0:
        return ""
    else:
        middle = math.floor(len(enum)/2)
        x = enum[middle][1]
        print(x)
        return x
mid("asaba")

这是我将如何处理它的示例:

def mid(string):
    if len(string) % 2 == 0:
        return ""
    else:
        offset = int(len(string) / 2)
        return string[offset: offset + 1]

mid("abc")
mid("asaba")

您的代码在边缘情况下失败,特别是在给定空字符串时,但我在测试期间发现它适用于 "asaba""aaaa""abc" 等字符串,但是给定 "" 时抛出错误。这样做的原因是因为 lastnum = enum[-1][0] + 1 会给空字符串一个不存在的索引。解决这个问题的方法是在函数的开头添加一个条件来检查它是否为空字符串,像这样:

if len(string) == 0:
    return ""
import math 

def mid(string_1):
    string_2 = ''
    if len(string_1) %2 == 0:
        return string_2
    else:
        string_2 = string_1[math.floor(len(string_1)/2)]
        return string_2

print(mid("abc"))

我是这样实现的,效果很好,逻辑如下:

如果字符串的长度是偶数 return 一个空字符串 ""

如果字符串的长度是奇数,那么 return 是中间字符,这是通过找到中间的索引来完成的:

string_2 = string_1[math.floor(len(string_1)/2)]