2016-09-22 7 views
0

Я вернулся на Python через несколько лет, выполняя код C, и я немного запутался, тренируя себя, чтобы вернуть свои навыки кодирования 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 привязан к одному символу, не целое число. Это потому, что петли 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) 

Если вы должны генерировать индекс для чего-то, вы бы вообще использовать либо range() type производить те, для вас, или использовать enumerate() производить как индекс и значение сам в петле.

Кроме того, обратите внимание, что вам не нужно указывать целевое имя цикла for по умолчанию перед циклом, если вам не нужно обрабатывать случай, когда итерация цикла пуста, и вы ожидаете использовать целевое имя после цикла. Другими словами, ваш i = 0 полностью избыточен.

+0

Хорошо, я понял. Очень странно возвращаться к этому языку, что так просто после того, как он находится в сложности и структуре C. Спасибо всем за ваши ответы :) –

Смежные вопросы