Número a Texto

Una función que convierte las cantidades numéricas en texto.




  1. #!/usr/bin/env python
  2. # -*- coding: utf-8 -*-


  3. UNIDADES = ( '''UN ''DOS ''TRES ''CUATRO ''CINCO ''SEIS ''SIETE ''OCHO ''NUEVE ''DIEZ ''ONCE ''DOCE ''TRECE ''CATORCE ''QUINCE ''DIECISEIS ''DIECISIETE ''DIECIOCHO ''DIECINUEVE ''VEINTE '
  4. )

  5. DECENAS = ('VENTI''TREINTA ''CUARENTA ''CINCUENTA ''SESENTA ''SETENTA ''OCHENTA ''NOVENTA ''CIEN ' )

  6. CENTENAS = ('CIENTO ''DOSCIENTOS ''TRESCIENTOS ''CUATROCIENTOS ''QUINIENTOS ''SEISCIENTOS ''SETECIENTOS ''OCHOCIENTOS ''NOVECIENTOS '  )       



  7. def NumberToText(number_in):
  8.     
  9.     if len(str(number_in)) > 9:
  10.         raise ValueError(u"¡Fuera de rango! El límite es 9 numeros = 999999999")
  11.         
  12.     convertido ''
  13.     number_str str(number_inif (type(number_in) != 'str'else number_in
  14.     number_str =  number_str.zfill(9)
  15.     millonesmilescientos number_str[:3], number_str[3:6], number_str[6:]
  16.     
  17.     if(millones):
  18.         if(millones == '001'):
  19.             convertido += 'UN MILLON '
  20.         elif(int(millones) > 0):
  21.             convertido += '%sMILLONES ' __convertNumber(millones)
  22.     
  23.     if(miles):
  24.         if(miles == '001'):
  25.             convertido += 'MIL '
  26.         elif(int(miles) > 0):
  27.             convertido += '%sMIL ' __convertNumber(miles)
  28.     
  29.     if(cientos):
  30.         if(cientos == '001'):
  31.             convertido += 'UN '
  32.         elif(int(cientos) > 0):
  33.             convertido += '%s ' __convertNumber(cientos)
  34.     
  35.     if convertido[-3:] == "UN "#si el ultimo es (UN) cambiarlo por (UNO)
  36.         convertido convertido[:-1]+"O"
  37.     
  38.     return convertido


  39. def __convertNumber(n):
  40.     output ''
  41.     
  42.     if(== '100'):
  43.         output "CIEN "
  44.         
  45.     elif(n[0] != '0'):
  46.         output CENTENAS[int(n[0])-1]
  47.     int(n[1:])
  48.     
  49.     if(<= 20):
  50.         output += UNIDADES[k]
  51.         
  52.     else:
  53.         if((30) & (n[2] != '0')):
  54.             output += '%sY %s' % (DECENAS[int(n[1])-2], UNIDADES[int(n[2])])
  55.             
  56.         else:
  57.             output += '%s%s' % (DECENAS[int(n[1])-2], UNIDADES[int(n[2])])
  58.             
  59.     return output



  60. if __name__ == "__main__":
  61.     printNumberToText(14545547) )