[英]Python: String index out of range
我已经看了很多以前的问题,但仍然找不到任何能帮到我的东西。 这是我写给Reverse一句话的代码。 我本可以使用split()函数,但无论如何我试着没有它。
s='abcdef ghij klmn op qrst uv w xy z'
s=s[::-1]
print s
j=0
p=''
while(j<len(s)):
a=''
while(s[j]!=''):
a=a+s[j]
j+=1
p.append(a[::-1])
j+=1
print p
它在while括号中给出了一个超出范围错误的字符串索引。 为什么?
非常感谢您的帮助。
因为在第二个while循环中你正在递增j
而不检查你是否还在最后。
此外,对于字符串, s[j]!=''
将始终为true。 如果可以在字符串上使用索引运算符,则表示存在字符。 否则没有。
例如:
s = ''
s[0] # IndexError, there are no characters so there can be no index
s = 'x'
s[0] # Will be x and s[1] will give the same error as above
一个更简单的代码版本(不是Pythonic,使用列表并使用' '.join()
)会更好:
s = 'abcdef ghij klmn op qrst uv w xy z'
print s
p = ''
i = 0
word = ''
while i < len(s):
c = s[i]
if c == ' ':
if p:
p = word + ' ' + p
else:
p = word
word = ''
else:
word += c
i += 1
print p
和分裂的干净/简单的Pythonic版本:
s = 'abcdef ghij klmn op qrst uv w xy z'
print s
p = ' '.join(s.split()[::-1])
print p
你的问题是这个内循环:
while(s[j]!=''):
a=a+s[j]
j+=1
这个循环允许j
超过s
的长度,你可能想在这里添加一个额外的条件来防止这种情况(我也删除了不必要的括号):
while j < len(s) and s[j] != '':
a=a+s[j]
j+=1
我想你想这样做: -
s='abcdef ghij klmn op qrst uv w xy z'
s=s[::-1]
print s
j=0
p=[]
while(j<len(s)):
a=''
while(j<len(s) and s[j]!=' '):
a=a+s[j]
j+=1
p.append(a[::-1])
j+=1
print ' '.join(p)
while(s[j]!=''):
a=a+s[j]
j+=1
这是问题..你的最后一个字符是z
..当它到达那里时,你的while条件是真的..并且它尝试将j
增加到下一个索引..这是出界的..
您可以将此条件也移动到outer
while循环中。因为您需要同时检查两个条件......在您的情况下,两个条件都必须为真。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.