0

我有以下用 Python 编写的小函数:

def encode(str):
    out = ""
    for i in str:
        ret += str(ord(i.upper()) - 64)
    return ret

基本上,我想要做的是获取 alphabat 中字母的编号并将其连接到“out”字符串。使用此代码,我在第 4 行得到回溯:“str”对象不适用。

有人可以解释一下为什么会引发此错误以及如何解决此问题吗?(对不起,如果这已经被问过一次,我找不到它,可能也是因为我对 Python 和编程很陌生)

4

3 回答 3

3

不要调用你的变量str,你正在隐藏内置函数

此外,您需要修复out/的命名ret

我个人会这样写这个函数:

def encode(s):
   return ''.join(str(ord(c.upper()) - 64) for c in s)

(我并没有真正遵循str(ord(...))它的意图,所以我只是从你的代码中复制了它。)

于 2012-11-30T20:07:12.983 回答
3

切勿以预定义的内置名称命名您的变量。

在您的代码中,str不是内置函数。它是您在函数中用作参数的变量。

另一个问题是,你已经声明了out变量,使用retwhich 会给你错误。更改out = ""ret = ""

于 2012-11-30T20:08:01.857 回答
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迭代整数序列时通常会这样做。

于 2012-11-30T21:38:56.340 回答