« Objet de fonction est unsubscriptable » en nombre entier de base à la fonction de mappage de chaîne

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

  •  27-09-2019
  •  | 
  •  

Question

Je suis en train d'écrire une fonction pour retourner la chaîne de mots d'un nombre inférieur à 1000.

Chaque fois que je lance mon code à l'invite, il semble interactif au travail sans problème, mais lorsque je tente d'importer wordify et l'exécuter avec un numéro de test supérieur à 20, il échoue « TypeError: « fonction » objet est unsubscriptable ».

D'après le message d'erreur, il semble que la question est quand il essaie de numstring d'index (par exemple en essayant d'extraire le numéro 4 sur le cas de test de n = 24) et le compilateur pense numstring est une fonction au lieu d'un chaîne. depuis la première ligne de la fonction me définit numstring en tant que chaîne de la variable n, je ne suis pas vraiment sûr pourquoi.

Toute aide à contourner cette erreur, ou même simplement aider à expliquer pourquoi je le voir, serait génial.

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
Était-ce utile?

La solution

Les moyens d'erreur qui a été utilisé une fonction où il aurait dû y avoir une liste, comme ceci:

def foo(): pass
foo[3]

Vous devez avoir un code changé.

Par ailleurs, wordify(40) retourné "fourty". J'épelle "forty" Et vous avez pas d'entrée pour zéro

Autres conseils

Dans le cas où quelqu'un regarde ici et a le même problème que moi, vous pouvez également obtenir un pointeur vers un objet de fonction si le mauvais nom de variable est retournée. Par exemple, si vous avez la fonction comme ceci:

 def foo():
   my_return_val = 0
   return return_val

 my_val = foo()

alors my_val sera un pointeur vers un objet de fonction qui est une autre cause de « TypeError: objet « fonction » est unsubscriptable ». Si my_val est traité comme une liste ou un tableau quand il est vraiment un objet de fonction

La solution? Facile! Fixer le nom de variable dans foo qui est retourné à my_return_val.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top