Discuss / Python / 使用一下上节课的芝士,这么久都没敢发过自己的代码

使用一下上节课的芝士,这么久都没敢发过自己的代码

Topic source

#!/usr/bin/pystu python3

# -*- coding: utf-8 -*-

def trim(s):

    if s == '':

        return s

    elif s[0] == ' ':

         s = trim(s[1:])

    elif s[-1] == ' ':

         s = trim(s[:-2])

    return s

XXiao_怪兽

#2 Created at ... [Delete] [Delete and Lock User]

 elif s[-1] == ' ':

         s = trim(s[:-2])

请教一下这两行代码里面为什么s = trim(s[:-2])或者s = trim(s[:-1])都可以测试成功

你这个厉害了! 几行递归小程序就解决了.

去掉收尾空格还是正则简单

def trim(s):    import re    re_s=re.compile(r'^\s+|\s+$')    return re.sub(re_s,'',s)

Ciq1n7

#5 Created at ... [Delete] [Delete and Lock User]

那如果s【0】==‘’ ,s【-1】==‘’同时存在呢

倒数第二行应该是:s = trim(s[:-1]),s[:-1]是不包含索引-1的

叶什么凡

#7 Created at ... [Delete] [Delete and Lock User]

有一个疑问,if语句不是由上向下执行的吗,那么如果我是首尾都空格,我在满足第二个条件后应该退出,返回的函数值在尾部应该还有一个空格,为什么这个首尾都能去掉啊,是我理解错了吗

楼上,他这个是递归,

 elif s[0] == ' ':
     s = trim(s[1:])

 这个就表示如果字符串首为空格,就截取第二个开始到最后,然后重新调用该方法`trim`,如果尾部有空格就会进入第二个 `elis`去除尾部空格。直到首尾都没有空格

测试了一下这个是有问题的,

 elif s[-1] == ' ':
         s = trim(s[:-2])

这部分代码,当字符串尾部有奇数个空格就会多截取一个,因为切片操作是左开右闭,即 [:-2]其实是倒是第二个元素不会被切片操作截取在内,比如a = [1,2,3,4] ,a[:-2]结果是[1,2],所以这里应该改为

elif s[-1] == ' ':
         s = trim(s[:-1])  // 将s[:-2]改为s[:-1]

  • 1

Reply