«Функциональный объект - это несущественный» в базовом целочисленном целом к ​​функции сопоставления строки

StackOverflow https://stackoverflow.com/questions/3033563

  •  27-09-2019
  •  | 
  •  

Вопрос

Я пытаюсь написать функцию, чтобы вернуть слово строку любого числа менее 1000.

Каждый раз, когда я запускаю свой код в интерактивной подсказке, оно работает без проблем, но когда я пытаюсь импортировать Optifify и запустить его с тестовым номером, выше 20, он не удается в качестве объекта «TypeError:« Функция », является необоснованным.

На основании сообщения об ошибке, кажется, это проблема, когда он пытается индексировать Numstring (например, пытаться извлечь номер 4 из тестового случая n = 24), и компилятор считает 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
Это было полезно?

Решение

Ошибка означает, что функция была использована там, где должен был быть список, как это:

def foo(): pass
foo[3]

Вы, должно быть, изменили какой-нибудь код.

Кстати, wordify(40) вернулся "fourty". Отказ Я его пишу "forty"И у вас нет ввода для нуля

Другие советы

Если кто-то выглядит здесь и имеет ту же проблему, у меня имел, вы также можете получить указатель на объект функции, если возвращается неправильное переменное имя. Например, если у вас есть функция:

 def foo():
   my_return_val = 0
   return return_val

 my_val = foo()

Тогда My_Val будет указателем на объект функциональности, который является еще одной причиной «TypeError:« Функциональный »объект, является неописанным« если my_val обрабатывается как список или массив, когда он действительно это функциональный объект.

Решение? Простой! Исправьте имя переменной в FO, которое возвращается в My_return_Val.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top