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

问题描述

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

问题:为什么最后print(x)一切都按预期进行,但返回x 使用以下内容破坏程序:IndexError: list index out of range

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


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"))

我已经按照这种方式做了这个功能,效果很好,逻辑如下:

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

如果字符串的长度是奇数则返回中间的字符,这是通过在中间找到索引来完成的:

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

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...