繁体   English   中英

Python:字符串索引超出范围

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM