2010-06-13 43 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中的变量名称。