如何在python中返回字符串的中间字符?
完整问题: 编写一个名为mid的函数,该函数以字符串作为参数。函数应该提取并返回中间字母。如果没有中间字母,则函数应返回空字符串。例如,mid(“abc”)应返回“b”,mid(“aaaa”)应返回“.”。 问题:为什么最后打印(x)一切都按预期进行,但返回x会导致程序中断:索引器:列表索引超出范围 谢谢你花时间帮忙如何在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
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)]