利用切片操作,实现一个trim()函数,去除字符串首尾的空格

1.最近又重新学习一遍python, 看廖雪峰的教程切片部分,请问这个代码是如何实现的把两边的空格都用切片的方法在输出中不显示出来的


def trim(s):
    if s[:1] != ' ' and s[-1:] != ' ':
        return s
    elif s[:1] == ' ':
        return trim(s[1:])
    else:
        return trim(s[:-1])
       

如果输入的字符串中,一边有空格的话,我还可以理解代码是如何工作的,但是如果字符串两边都有空格的话,我就不懂为什么会最后输出的时候两边的空格都没了。比如s = ' hello ',请问这个代码在输出的时候是如何变成'hello'的。因为我的理解是如果字符串为' hello ',if不执行,elif执行后,返回的是'hello '。那最后的else也没有执行,为什么结果还是'hello'。

阅读 9.5k
5 个回答
新手上路,请多包涵

明白了 执行elif后返回的是trim(s),之后还是会重新执行一边这个函数。没错吧?

新手上路,请多包涵

嗯嗯,它这个利用了函数的嵌套

其实这是一个递归,比如s = 'hello ',第一次进入trim,会进入else分支,然后第二次进入trim,这时注意,第二次进入trim的时候分片(s[:-1])去掉了最后一个字符,即' '被去掉了,所以第二次进入trim时 s = 'hello',if条件成真返回'hello'

新手上路,请多包涵

请问引号里面为什么是两个空格不是一个空格,我在写的时候只有两个空格能运行成功,一个空格不行

def trim(s):

 if s[:1] != ' ' and s[-1:] != ' ':
     #第一个不是空格且倒数第一个也不是空格时返回s
     return s
 elif s[:1] == ' ':
     #s[0]处是空格,则从s[1]处开始取值
     return trim(s[1:])
     #此处切掉s[0]处的空格,s = s[1:]
 else:
     #s[-1]处是空格
     return trim(s[:-1])
     #切掉s[-1],取到倒数第二个,s = s[:-1]

------我是一条分割线--------
pycharm里面加入断点,使用如下测试语句感受一下:)
------我也是一条分割线------

if trim(' hello world ') != 'hello world':

 print('测试失败4!')

else:

 print('测试成功!')
撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
宣传栏