如何在python中返回字符串的中间字符?

如何在python中返回字符串的中间字符?,python,function,indexing,enumerate,Python,Function,Indexing,Enumerate,完整问题: 编写一个名为mid的函数,该函数以字符串作为参数。函数应该提取并返回中间字母。如果没有中间字母,则函数应返回空字符串。例如,mid(“abc”)应返回“b”,mid(“aaaa”)应返回“.”。 问题:为什么最后打印(x)一切都按预期进行,但返回x会导致程序中断:索引器:列表索引超出范围 谢谢你花时间帮忙 def mid(string): enum = list(enumerate(string)) lastnum = enum[-1][0] + 1 if

完整问题: 编写一个名为mid的函数,该函数以字符串作为参数。函数应该提取并返回中间字母。如果没有中间字母,则函数应返回空字符串。例如,mid(“abc”)应返回“b”,mid(“aaaa”)应返回“.”。

问题:为什么最后打印(x)一切都按预期进行,但返回x会导致程序中断:索引器:列表索引超出范围

谢谢你花时间帮忙


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 ""
我以这种方式完成了函数,它工作正常,逻辑如下:

如果字符串的长度为偶数,则返回空字符串“”

如果字符串的长度为奇数,则返回中间字符,方法是在中间查找索引:

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

虽然您的代码可以改进,但对我来说,您的代码在“asaba”情况下运行良好-我不明白为什么您会为“asaba”输入获取Indexer。正如baduker链接的问题中所述,您的代码中的空字符串有问题。如果您可以使用调试器,那么逐步检查代码以查看每个点上的变量可能会有所帮助。此外,异常的堆栈跟踪将告诉您异常发生在哪一行,这可以提供有关问题出在哪一个索引操作的有用线索。祝你好运!非常感谢你!这个社区是非常有帮助的,我惊喜地发现这最终成为了问题所在。非常感谢。
string_2 = string_1[math.floor(len(string_1)/2)]