Skip to content

Instantly share code, notes, and snippets.

@nkpro2000sr
Last active February 16, 2020 18:33
Show Gist options
  • Save nkpro2000sr/4c84f030a5b4eae79b9794c1f9e969e8 to your computer and use it in GitHub Desktop.
Save nkpro2000sr/4c84f030a5b4eae79b9794c1f9e969e8 to your computer and use it in GitHub Desktop.
number to word #just_for_fun_:-) comment your efficient code
ones = ['<0>',"one","two","three","four","five","six","seven","eight","nine"]
tens = ['','<Teenify>',"twenty","thirty","forty","fifty","sixty","seventy","eighty","ninety"]
def Teenify(num):
num[1]=''
if num[0]=="<0>":num[0]="ten"
elif num[0]=="one":num[0]="eleven"
elif num[0]=="two":num[0]="twelve"
elif num[0]=="three":num[0]="thirteen"
elif num[0]=="five":num[0]="fifteen"
else :num[0]=num[0]+"teen"
return num
def n2wd(n, num_system = 1):
"""
$n is input number (integer)
-> $n in words (string)
$num_system = 1 => Indian Number System
$num_system = 2 => International Number System
"""
if num_system == 1 :
digits = [ones, tens, "hundred", "thousand", "10k", "lakh", "10l"] # you can add more
elif num_system == 2 :
digits = [ones, tens, "hundred", "thousand", "10k", "100k", "million"] # you can add more
if n == 0 : return "zero"
else : num = []
while n > 0 :
num.append(n%10)
n//=10
index = 0
while index<len(num):
if index < 2 : # once and tens
n = digits[index][num[index]]
if n == '<Teenify>': num = Teenify(num)
else : num[index] = n
elif index == 2 : # hundreds
if num[index] == 0 : num[index] = ''
else:
num[index] = ones[num[index]]+" hundred"
if num[0]!='<0>' : num[index]+=" and" # command this line if you don't need ' and'
else : num[0]=''
else :
num2 = num[index:index+num_system+1]
num[index] = n2wd(sum([n*10**d for d,n in enumerate(num2)]))
if len(num) > index+1 : num[index+1:index+num_system+1] = ['']*num_system
if num[index] != 'zero' : num[index]+=' '+digits[index]
else : num[index] = ''
index += num_system
index += 1
return ' '.join(reversed(list(filter(len,num)))).replace('<0>','')
num_system = int(input("CHOOSE:\n1. Indian Number System\n2. International Number System\n"));print()
while 5 : print(n2wd(int(input('>')), num_system))
@nkpro2000
Copy link

def num2words(num, num_sys):
    """
    $num is input number (integer)
    -> $num in words (string)
    $num_sys = 1 => Indian Number System
    $num_sys = 2 => International Number System
    """
    under_20 = ['Zero','One','Two','Three','Four','Five','Six','Seven','Eight','Nine','Ten','Eleven','Twelve','Thirteen','Fourteen','Fifteen','Sixteen','Seventeen','Eighteen','Nineteen']
    tens = ['Twenty','Thirty','Forty','Fifty','Sixty','Seventy','Eighty','Ninety']

    if num_sys == 1 : above_100 = {100: 'Hundred',1000:'Thousand', 100000:'Lakh', 10000000:'Crore'}
    elif num_sys == 2 : above_100 = {100: 'Hundred',1000:'Thousand', 1000000:'Million', 1000000000:'Billion'}

    if num < 20:
        return under_20[num]

    if num < 100:
        return tens[(int)(num/10)-2] + ('' if num%10==0 else ' ' + under_20[num%10])

    # find the appropriate pivot - 'Million' in 3,603,550, or 'Thousand' in 603,550
    pivot = max([key for key in above_100.keys() if key <= num])

    return num2words((int)(num/pivot),num_sys) + ' ' + above_100[pivot] + ('' if num%pivot==0 else ' ' + num2words(num%pivot,num_sys))

code_from_quora

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment