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

j2番目のwhileループでは、まだ最後にいるかどうかを確認せずにインクリメントしているためです。

また、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

あなたの問題はこの内側のループにあります:

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 に答える
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 に答える
0
while(s[j]!=''):
        a=a+s[j]
        j+=1

ここに問題があります..最後の文字はz..そこに到達すると、while条件が真になります..そしてj次のインデックスにインクリメントしようとします..これは範囲外です..

おそらく、この条件をouterwhileループに移動することもできます。両方の条件を同時にチェックする必要があるためです...両方の条件が真である必要があります。

于 2012-10-01T17:27:57.300 に答える