我在使用C代码几年后回到了Python,在训练自己恢复Python编码习惯时,我有点困惑。
我试图运行这个非常简单的代码,但是我仍然按标题中的描述获得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太过分了。
答案 0 :(得分:1)
您正在迭代字符串,因此每个i
都绑定到一个字符,不是一个整数。这是因为Python for
循环是Foreach constructs,与C不同。
直接使用该字符,无需索引回字符串。 Python字符串也是 immutable ,因此您无法替换字符串对象中的字符。构建一个新对象:
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()
生成索引< em>和循环中的值本身。
另外,请注意,在循环之前不需要将for
循环目标名称设置为默认值,除非您需要处理循环迭代为空并且您希望在之后使用目标名称的情况循环。换句话说,您的i = 0
完全是多余的。