Convertir una cantidad a la notación india en Python

Problema: necesito convertir una cantidad al formato de moneda india

Mi código: Tengo la siguiente implementación de Python :

 import decimal def currencyInIndiaFormat(n): d = decimal.Decimal(str(n)) if d.as_tuple().exponent =0: if flag==0: res = res + s[i] if s[i]=='.': flag = 1 elif flag==1: k = k + 1 res = res + s[i] if k==3 and i-1>=0: res = res + ',' flag = 2 k = 0 else: k = k + 1 res = res + s[i] if k==2 and i-1>=0: res = res + ',' flag = 2 k = 0 i = i - 1 return res[::-1] def main(): n = 100.52 print "INR " + currencyInIndiaFormat(n) # INR 100.52 n = 1000.108 print "INR " + currencyInIndiaFormat(n) # INR 1,000.108 n = 1200000 print "INR " + currencyInIndiaFormat(n) # INR 12,00,000.00 main() 

Mi pregunta: ¿Hay alguna manera de hacer que mi función monedaInIndiaFormato sea más corta, más concisa y limpia ? / ¿Hay una mejor manera de escribir mi función currencyInIndiadiaFormat ?

Nota: Mi pregunta se basa principalmente en la implementación de Python del problema mencionado anteriormente. No es un duplicado de las preguntas hechas anteriormente con respecto a la conversión de moneda al formato indio.

Formato de moneda india:

    Por ejemplo, los números aquí se representan como:

     1 10 100 1,000 10,000 1,00,000 10,00,000 1,00,00,000 10,00,00,000 

    Consulte el sistema de numeración indio

    Demasiado trabajo.

     >>> import locale >>> locale.setlocale(locale.LC_MONETARY, 'en_IN') 'en_IN' >>> print locale.currency(100.52, grouping=True) ₹ 100.52 >>> print locale.currency(1000.108, grouping=True) ₹ 1,000.11 >>> print locale.currency(1200000, grouping=True) ₹ 12,00,000.00 

    Puedes seguir estos pasos. Instalar el paquete Babel python desde pip

     pip install Babel 

    En tu script de python

     from babel.numbers import format_currency format_currency(5433422.8012, 'INR', locale='en_IN') 

    Salida:

     ₹ 54,33,422.80 

    No pude hacer que las otras dos soluciones funcionaran para mí, así que hice algo un poco más de baja tecnología:

     def format_as_indian(input): input_list = list(str(input)) if len(input_list) <= 1: formatted_input = input else: first_number = input_list.pop(0) last_number = input_list.pop() formatted_input = first_number + ( (''.join(l + ',' * (n % 2 == 1) for n, l in enumerate(reversed(input_list)))[::-1] + last_number) ) if len(input_list) % 2 == 0: formatted_input.lstrip(',') return formatted_input 

    Esto no funciona con decimales. Si necesita eso, sugeriría guardar la parte decimal en otra variable y agregarla de nuevo al final.