问题描述
完整的问题: 编写一个名为 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)]