2012-11-30 36 views
0

我有以下的小功能用Python寫的:「STR」的對象是不適用

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

基本上,我想要做的就是在alphabat信件的數量,並串連到「出'字符串。通過這段代碼,我得到了第4行的回溯:'str'對象不適用。

有人可以請解釋我爲什麼會拋出這個錯誤,我該如何解決這個問題? (對不起,如果這已經問了一次,我找不到它,可能也是因爲我對Python和編程非常陌生)

+0

str也是一個內置函數,所以解釋器無法處理它。 –

回答

3

不要在預定義的內置名稱上命名變量。

在您的代碼中,str不是內置函數。這是您在函數中用作參數的變量。

另一個問題是,您已聲明out變量,並使用ret這會給你錯誤。將out = ""更改爲ret = ""

3

不要調用變量str,你正在遮蔽built-in function

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

我如下親自將寫這個函數:

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

(我真的不遵循什麼str(ord(...))是爲了幹什麼,所以我剛剛從你的代碼複製它。)

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