Archive
Python: Number Letter Counts
Python: Number Letter Counts
Problem 17, Projecteuler
For problem 17, projectEuler ask for the total numbers of alphabetics in all words of numbers from 1 to 1000.
Here I am coping from there page.
Once I read the task, I decide to create my own version of the requirement. I start to assume that I may have a dictionary with some numbers and words, then base on what ever the user will input (number between 1 and 999) then I shall convert it to words.
Example:
1 –> one
8 –> eight
234 –> tow hundred thirty-four .. and so on.
I start searching the net to get the words I need, and store them in 3 dictionaries.
num_1_9 = {“1″:”one”,”2″:”two” .. ext.
num_10s = {“10″:”ten”,”20″:”twenty” .. ext.
num_11s = {“11″:”eleven”,”12″:”twelve”.. ext
Then, I start writing the functions for each group of numbers/dictionaries, so if the user enter a number we will read number of digits if it is 1 then we call def num_1_d(), if it is 2 digits we call def num_2_ds() and if it is 3 digits we call num_3_ds(). At the end, we got the right answer for Projecteuler, and here is the code in my way, I am asking the user to enter a number then i convert it to a corresponding words.
![]() |
The Code:
# Date:27/6/2019
# ProjectEuler
# Problem No.17
# Completed on Sun, 30 Jun 2019, 10:30
num_1_9 = {“1″:”one”,”2″:”two”,”3″:”three”,”4″:”four”,”5″:”five”,”6″:”six”,”7″:”seven”,”8″:”eight”,”9″:”nine”}
num_11s={“11″:”eleven”,”12″:”twelve”,”13″:”thirteen”,”14″:”fourteen”,”15″:”fifteen”,”16″:”sixteen”,”17″:”seventeen”,”18″:”eighteen”,”19″:”nineteen”}
num_10s ={“10″:”ten”,”20″:”twenty”,”30″:”thirty”,”40″:”forty”,”50″:”fifty”,”60″:”sixty”,”70″:”seventy”,”80″:”eighty”,”90″:”ninety”}
num_100=’hundred’
def num_1_d(num):
if len(str(num)) == 1:
return num_1_9[str(num)]
def num_2_ds(num):
d0,d1 = num[0], num[1]
if int(num[1])== 0 :
return num_10s[str(num)]
elif int(num[0]) == 1 :
return num_11s[str(num)]
elif (int(num[0])) >1 :
d0=str(d0)+str(0)
return ‘{}-{}’.format(num_10s[str(d0)],num_1_9[str(d1)])
def num_3_ds (num):
d0,d1,d2=num[0],num[1],num[2]
if (int(num[1])==0) and (int(num[2])==0) :
return ‘{} {}’.format(num_1_9[str(d0)],num_100)
elif (int(num[1])>0):
d1 = str(d1)+str(d2)
return ‘{} {} and {}’.format(num_1_9[str(d0)],num_100,num_2_ds(d1))
elif (int(num[1])==0) and (int(num[2])>0):
d1 = str(d1)+str(d2)
return ‘{} {} and {}’.format(num_1_9[str(d0)],num_100,num_1_9[str(d2)])
num =0
while num !=’f’ :
num =input(‘\nEnter a number: (1-999)’)
if len(str(num)) == 1:
print(num ,’ is ‘,(num_1_d(num)))
elif len(str(num)) == 2:
print (num ,’ is ‘,(num_2_ds(num)))
elif len(str(num)) == 3:
print (num ,’ is ‘,(num_3_ds(num)))
This is Output screen for my-way version
![]() |