2016-09-22 10 views
0

私はC言語を使って数年後にPythonに戻ってきました。私はPythonコーディングの習慣を取り戻すために自分自身を訓練しながら少し混乱しています。TypeError:文字列インデックスは整数でなければなりません

私はこの小さな、非常に単純なコードを実行しようとしましたが、タイトルに記載されているようにTypeErrorを取得し続けます。私は多くのことを検索したが、これで問題が何であるかを把握することはできません。

def toLower(pStr): 

i = 0 

for i in pStr: 
    if ord(pStr[i]) >= 65 and ord(pStr[i]) <= 90: 
     pStr[i] = chr(ord(pStr[i])+28) 

return pStr 

testStr = "TEST STRING" 

print(toLower(testStr)) 

iが整数であることを考えると、私はこのエラーを取得する理由を、私は理解していません。たぶん私はC IDKをやっているように思えるかもしれません。

+3

Pythonループは* foreach *構造体です。 'i'はインデックスではありません。それは単一の文字です。 –

答えて

1

iは、1文字にではなく、の整数にバインドされているため、文字列を反復処理しています。それはPython forループがForeach constructsであり、Cと違っているからです。

文字を直接使用するだけで、文字列にインデックスを戻す必要はありません。 Python文字列もは不変なので、文字列オブジェクトの文字を置き換えることはできません。あなたが何かのインデックスを生成する必要がある場合

def toLower(pStr): 
    output = [] 
    for char in pStr: 
     if ord(char) >= 65 and ord(char) <= 90: 
      char = chr(ord(char)+28)) 
     output.append(char) 
    return ''.join(output) 

は、あなたが一般的にあなたのためのそれらを作る、またはenumerate()を使用するかrange() typeを使用したいインデックスの両方値を生成する:新しいオブジェクトを作成しますそれ自体がループしています。

また、ループの繰り返し可能性がなく、ループの後にターゲット名を使用することが予想される場合を除き、forループターゲット名をループの前のデフォルトに設定する必要はありません。つまり、i = 0は完全に冗長です。

+0

私は理解しています。 C言語の複雑さと構造になった後、とても簡単なこの言語で戻っていくのはかなり奇妙です。 ありがとうございました。 –

関連する問題