我有以下用Python编写的小函数:
def encode(str):
out = ""
for i in str:
ret += str(ord(i.upper()) - 64)
return ret
基本上,我想要做的是获取alphabat中的字母数,并将其连接到'out'字符串。使用此代码,我在第4行得到一个回溯:'str'对象不适用。
有人可以解释一下为什么它会抛出这个错误以及我如何解决这个问题? (对不起,如果已经问了一次,我找不到它,可能也是因为我对Python和编程很陌生)
答案 0 :(得分:3)
请勿调用变量str
,而是隐藏built-in function。
此外,您需要修复out
/ ret
的命名。
我个人会写下这个函数如下:
def encode(s):
return ''.join(str(ord(c.upper()) - 64) for c in s)
(我并没有真正遵循str(ord(...))
的意图,所以我只是从你的代码中复制了它。)
答案 1 :(得分:3)
永远不要在预定义的内置名称上命名变量。
在您的代码中,str
不是内置函数。它是您在函数中用作参数的变量。
另一个问题是,您已声明out
变量,并使用ret
会导致错误。将out = ""
更改为ret = ""
。
答案 2 :(得分:0)
正如其他人所说,不要将str
用作变量。
我怀疑这是你想要的:
def encode(s):
return "".join(chr(ord(c.upper()) - 64) for c in s)
这相当于:
def encode(s):
out = ""
for c in s:
ret += chr(ord(c.upper()) - 64)
return ret
您正在寻找chr()
函数,该函数将数字ASCII / Unicode值转换为1个字符的字符串。正在运行str()
会将5
转换为"5"
。
同样在风格上,通常在迭代字符串时执行for c in s
,而在迭代整数序列时执行for i in x
。