在线观看不卡亚洲电影_亚洲妓女99综合网_91青青青亚洲娱乐在线观看_日韩无码高清综合久久

鍍金池/ 問答/Python/ 利用切片操作,實現一個trim()函數,去除字符串首尾的空格

利用切片操作,實現一個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不執(zhí)行,elif執(zhí)行后,返回的是'hello '。那最后的else也沒有執(zhí)行,為什么結果還是'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('測試成功!')
2018年8月29日 07:57
編輯回答
背叛者

其實這是一個遞歸,比如s = 'hello ',第一次進入trim,會進入else分支,然后第二次進入trim,這時注意,第二次進入trim的時候分片(s[:-1])去掉了最后一個字符,即' '被去掉了,所以第二次進入trim時 s = 'hello',if條件成真返回'hello'

2018年5月26日 05:43
編輯回答
萌小萌

嗯嗯,它這個利用了函數的嵌套

2017年9月18日 23:58
編輯回答
伴謊

明白了 執(zhí)行elif后返回的是trim(s),之后還是會重新執(zhí)行一邊這個函數。沒錯吧?

2018年3月18日 04:25
編輯回答
情殺

請問引號里面為什么是兩個空格不是一個空格,我在寫的時候只有兩個空格能運行成功,一個空格不行

2017年12月27日 06:55