我正在尝试编写一个函数来返回任何小于1000的数字字符串。
每次我在交互式提示符下运行我的代码时它似乎没有问题,但是当我尝试导入wordify并使用高于20的测试数运行它时,它失败,因为“TypeError:'function'对象是unsubscriptable”。< / p>
基于错误消息,似乎问题在于它尝试索引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 :(得分:2)
错误意味着在应该有列表的地方使用了一个函数,如:
def foo(): pass
foo[3]
您必须更改了一些代码。
顺便说一下,wordify(40)
返回"fourty"
。我拼写"forty"
你没有零的入场
答案 1 :(得分:1)
如果有人看到这里并遇到了同样的问题,如果返回了错误的变量名,你也可以获得一个指向函数对象的指针。例如,如果你有这样的功能:
def foo():
my_return_val = 0
return return_val
my_val = foo()
然后my_val将是一个指向函数对象的指针,这是“TypeError:'function'对象是unsubscriptable”的另一个原因,如果my_val被视为列表或数组,当它真的是一个函数对象时。
解决方案?简单!修复返回到my_return_val的foo中的变量名称。