12python切片实现trim()

泪湿孤枕 提交于 2020-01-25 10:20:01

12python切片实现trim()

利用切片操作,实现一个trim()函数,去除字符串首尾的空格,注意不要调用str的strip()方法

strip()方法

用于移除字符串头尾指定的字符(默认为空格或换行符)或字符序列。

test = "000python000world000"
print(test.strip("0"))

运行结果

python000world

正解1:利用循环更替字符

def trim(s):
    while s[:1] == " ":     # 判断第一个字符是否为空格,若为真利用切片删除这个字符
        s = s[1:]           
    while s[-1:] == " ":    # 判断最后一个字符是否为空格,若为真利用切片删除这个字符
        s = s[:-1]
    return s

test = "   python   "
print(trim(test))

运行结果

python

正解2:利用切片判断后递归

def trim(s):
    if s[:1] == " ":		# 判断第一个字符是否为空格
        s = trim(s[1:])		# 利用递归改变S并再次进行判断
    if s[-1:] == " ":		# 判断最后一个字符是否为空格
        s = trim(s[:-1])	# 利用递归改变S并再次进行判断
    return s

test = "   python   "
print(trim(test))

运行结果

python

容易写错的方法

def trim(s):
    while s[0] == " ":
        s = s[1:]
    while s[-1] == " ":
        s = s[:-1]
    return s

test = "  python  "
print(trim(test))

运行结果

python

这里看似没有任何问题,我们成功的定义了一个trim()函数并实现其功能
但经过不断的尝试,终于发现了问题
当我们传入一个空字符时程序会报错

def trim(s):
    while s[0] == " ":
        s = s[1:]
    while s[-1] == " ":
        s = s[:-1]
    return s

test = ""
print(trim(test))

运行结果

Traceback (most recent call last):
  File "E:/pycharm/homeWork12.py", line 27, in <module>
    print(trim(test))
  File "E:/pycharm/homeWork12.py", line 20, in trim
    while s[0] == " ":
IndexError: string index out of range

索引器错误:字符串索引超出范围
而我们使用之前的正确方式则不会报错

def trim(s):
    while s[:1] == " ":     
        s = s[1:]
    while s[-1:] == " ":    
        s = s[:-1]
    return s
    
test = ""
print(trim(test))

运行结果(空,不报错)


究其原因我认为是s[0]和s[:1]的区别所导致的
当序列是空序列,这时候用[:1]取第一个元素是空,不会报错,而用[0]取由于超过索引范围则会报错

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!