zdw1213812138 2022-07-28 12:04 采纳率: 75%
浏览 44
已结题

python切片的使用or函数的理解

学习python切片时,是编写函数可以做到去除字符串前后的空格,代码如下:
def  trim(s):

    while s[:1]==' ':

        s=s[1:]      

    while s[-1:]==' ':

        s=s[:-1]      

    return s      

测试没有问题,但是想到,如果字符串是" " (即单独的一个空格)应该会进入死循环,但是并没有
问题一:为什么没进入死循环
问题二:后面自己改了一下代码如下:

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

测试发现可以单独通过字符串" "的。但是当我用这种方式:

if trim('hello  ') != 'hello':
    print('测试失败!')
elif trim('  hello') != 'hello':
    print('测试失败!')
elif trim('  hello  ') != 'hello':
    print('测试失败!')
elif trim('  hello  world  ') != 'hello  world':
    print('测试失败!')
elif trim('') != '':
    print('测试失败!')
elif trim('    ') != '':
    print('测试失败!')
else:
    print('测试成功!')

发现会出现报错,报错为:

  File "c:\Users\zdw\Desktop\python\study\qiepian.py", line 23, in <module>
    elif trim('') != '':
  File "c:\Users\zdw\Desktop\python\study\qiepian.py", line 2, in trim
    while s[0]==" ":
IndexError: string index out of range

问题二:为什么第二种单独测试字符串" "不会报错,而统一测试会报错

谢谢大家。刚开始学python,理论理解不清

  • 写回答

3条回答 默认 最新

  • Freshman小白 2022-07-28 12:24
    关注

    我刚刚试了一下关于你的问题一

    s=' '
    print(len(s[:1]))
    print(len(s[1:]))
    
    

    这样输出的结果是1 0,说明s[1:]就是一个空字符串(因为这个切片是从字符串第二个到末尾,而字符串本身就只有一个空格)
    所以s在经过一次循环以后就变成了空字符串,显然不再满足循环条件
    那么没有进入死循环的原因也就解决了

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(2条)

报告相同问题?

问题事件

  • 系统已结题 8月5日
  • 已采纳回答 7月28日
  • 修改了问题 7月28日
  • 创建了问题 7月28日

悬赏问题

  • ¥100 set_link_state
  • ¥15 虚幻5 UE美术毛发渲染
  • ¥15 CVRP 图论 物流运输优化
  • ¥15 Tableau online 嵌入ppt失败
  • ¥100 支付宝网页转账系统不识别账号
  • ¥15 基于单片机的靶位控制系统
  • ¥15 真我手机蓝牙传输进度消息被关闭了,怎么打开?(关键词-消息通知)
  • ¥15 装 pytorch 的时候出了好多问题,遇到这种情况怎么处理?
  • ¥20 IOS游览器某宝手机网页版自动立即购买JavaScript脚本
  • ¥15 手机接入宽带网线,如何释放宽带全部速度