2010-06-13 51 views
1

我試圖寫一個函數返回任意數量的字串低於1000「Function對象是unsubscriptable」基本整數字符串映射功能

每次我在交互提示是我的代碼運行似乎工作沒有問題,但是當我嘗試導入wordify並運行一個高於20的測試號時,它會失敗,因爲「TypeError:」函數'object is unsubscriptable「。

根據錯誤消息,似乎問題是它試圖索引numString(例如試圖從n = 24的測試用例中提取數字4)並且編譯器認爲numString是一個函數而不是一個字符串。因爲函數的第一行是我將numString定義爲變量n的一個字符串,我不確定這是爲什麼。

任何幫助解決這個錯誤,甚至只是幫助解釋我爲什麼看到它,都會很棒。

def wordify(n): 
    # Convert n to a string to parse out ones, tens and hundreds later. 
    numString = str(n) 

    # N less than 20 is hard-coded. 
    if n < 21: 
     return numToWordMap(n) 
    # N between 21 and 99 parses ones and tens then concatenates. 
    elif n < 100: 
     onesNum = numString[-1] 
     ones = numToWordMap(int(onesNum)) 
     tensNum = numString[-2] 
     tens = numToWordMap(int(tensNum)*10) 
     return tens+ones 
    else: 
     # TODO 
     pass 

def numToWordMap(num): 
    mapping = { 
    0:"", 
    1:"one", 
    2:"two", 
    3:"three", 
    4:"four", 
    5:"five", 
    6:"six", 
    7:"seven", 
    8:"eight", 
    9:"nine", 
    10:"ten", 
    11:"eleven", 
    12:"twelve", 
    13:"thirteen", 
    14:"fourteen", 
    15:"fifteen", 
    16:"sixteen", 
    17:"seventeen", 
    18:"eighteen", 
    19:"nineteen", 
    20:"twenty", 
    30:"thirty", 
    40:"fourty", 
    50:"fifty", 
    60:"sixty", 
    70:"seventy", 
    80:"eighty", 
    90:"ninety", 
    100:"onehundred", 
    200:"twohundred", 
    300:"threehundred", 
    400:"fourhundred", 
    500:"fivehundred", 
    600:"sixhundred", 
    700:"sevenhundred", 
    800:"eighthundred", 
    900:"ninehundred", 
    } 

    return mapping[num] 


if __name__ == '__main__': 
    pass 
+0

我無法重現您的錯誤。請說明如何做到這一點和/或您收到的完整追溯。 – wRAR 2010-06-13 19:30:20

+0

「TypeError:'函數'對象是不可取代的」。哪裏?什麼行號。請用實際行號提供實際的錯誤信息,並確保您的代碼具有相同的行號,以便我們可以看到實際發生錯誤的行。 – 2010-06-13 19:31:40

+0

實際上,現在它不會發生在我身上,我認爲它與我重新加載模塊的方式有關。一旦我關閉了交互式提示並在PyDev中重新打開它,一切似乎都過去了。 – IanWhalen 2010-06-13 19:35:34

回答

2

錯誤指的是使用功能那裏應該有一個列表,像這樣:

def foo(): pass 
foo[3] 

你一定已經改變了一些代碼。

順便說一句,wordify(40)返回"fourty"。我拼寫它"forty" 而且你沒有零的條目

1

如果有人在這裏看到和我有同樣的問題,如果返回錯誤的變量名稱,你也可以得到一個函數對象的指針。舉例來說,如果你有這樣的功能:

def foo(): 
    my_return_val = 0 
    return return_val 

my_val = foo() 

然後my_val將是一個指向函數對象,它是另一個原因爲「類型錯誤:‘功能’的對象是unsubscriptable」如果my_val就像一個列表或處理數組,當它真的是一個函數對象。

解決方案?簡單!修復返回到my_return_val的foo中的變量名稱。