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,理论理解不清
我刚刚试了一下关于你的问题一
s=' '
print(len(s[:1]))
print(len(s[1:]))
这样输出的结果是1 0,说明s[1:]就是一个空字符串(因为这个切片是从字符串第二个到末尾,而字符串本身就只有一个空格)
所以s在经过一次循环以后就变成了空字符串,显然不再满足循环条件
那么没有进入死循环的原因也就解决了
1.单独一个空格,怎么会死循环?while s[:1]==' ':时你的s=s[1:] 这里s[1:]就得到的是空字符串,而不是一个空格的字符串
2.当s='' 即s为空字符串而不是空隔字符串时,s[0]就会报错
所以你要严格把空字符串与空格字符串区分开来。
首先:s[:1]是获取s字符串0到1(不包含)下标的字符
s[:1]==' ':的意思就是 s[:1]的值为一个空格字' '就进入循环
问题一:如果字符串是" " (即单独的一个空格)应该会进入死循环,但是并没有。为什么没进入死循环
先判断s[:1]=是不是等于 ‘ ’,是进入循环,然后重新赋值s,s=s[1:],因为你本身s就只有一个空字符,那么只有下标0,s[1:]表示从下标1到结束的所有字符。但你没有下标1,所有此时你的s是'',啥都没有,一个空的字符串。再去判断s[1:]==" ",也就是 ‘’ == “ ”,空字符是否等于空格字符。不等于,不进入循环