1

我看过很多以前提出的问题,但仍然找不到任何可以帮助我的东西。这是我为反转句子而编写的代码。我本可以使用 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 括号中给了我一个字符串索引超出范围错误。为什么?

非常感谢您的帮助。

4

4 回答 4

2

因为在第二个 while 循环中,您正在递增j而不检查您是否已经结束。

此外,s[j]!=''对于字符串将始终如此。如果您可以在字符串上使用索引运算符,则意味着存在字符。否则没有。

例如:

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
于 2012-10-01T17:26:56.173 回答
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)
于 2012-10-01T17:36:07.807 回答
1

您的问题在于这个内部循环:

while(s[j]!=''):
    a=a+s[j]
    j+=1

这个循环允许j超过 的长度s,你可能想在这里添加一个额外的条件来防止这种情况(我还删除了不必要的括号):

while j < len(s) and s[j] != '':
    a=a+s[j]
    j+=1
于 2012-10-01T17:28:22.370 回答
0
while(s[j]!=''):
        a=a+s[j]
        j+=1

这是问题所在..您的最后一个字符是z..当它到达那里时,您的while条件为真..它会尝试递增j到下一个索引..超出范围..

您可能也可以将此条件移动到您的outerwhile 循环中。因为您需要同时检查这两个条件...在您的情况下,这两个条件都必须为真。

于 2012-10-01T17:27:57.300 回答