I see an interesting python exercise in codewars.it is about convert strings to numbers.I want some suggestions or guidance to solve this python exercise.Thank you
this is the exercise:In this kata we want to convert a string into an integer. The strings simply represent the numbers in words. Examples: "one"1
and this is my code:
def parse_int(string):
dict_of_numbers={ "zero":0, "one":1, "two":2, "three":3, "four":4, "five":5, "six":6, "seven":7, "eight":8, "nine":9,"ten":10, "eleven":11, "twelve":12, "thirteen":13, "fourteen":14, "fifteen":15, "sixteen":16, "seventeen":17, "eighteen":18, "nineteen":19, "twenty":20, "thirty":30, "forty":40, "fifty":50, "sixty":60, "seventy":70, "eighty":80, "ninety":90,"thousand":1000,"hundred":100}
string=string.replace(' ','-')
numbers=string.split('-')
created_number=0
for number in numbers:
for key,value in dict_of_numbers.items():
if number==key:
created_number+=value
return created_number
I have a solution and I did not test it for large collection of numbers but it may give you some ideas:
and between numbers. Like: thirty seven thousand and twenty one[] to get value from your dictionary. Use get method. So if there is not data corresponding to the number you have control over the return..lower() to lower the letters in the string to avoid upper case, lower case problemThe code I wrote would look like:
def parse_int(string):
dict_of_numbers = {"zero": 0, "one": 1, "two": 2, "three": 3, "four": 4, "five": 5, "six": 6, "seven": 7,
"eight": 8, "nine": 9, "ten": 10, "eleven": 11, "twelve": 12, "thirteen": 13, "fourteen": 14,
"fifteen": 15, "sixteen": 16, "seventeen": 17, "eighteen": 18, "nineteen": 19, "twenty": 20,
"thirty": 30, "forty": 40, "fifty": 50, "sixty": 60, "seventy": 70, "eighty": 80, "ninety": 90,
"thousand": 1000, "hundred": 100}
string = string.replace(" and ", " ")
the_number = 0
for each in string.lower().split():
if each in ["hundred", "thousand"]:
the_number *= dict_of_numbers.get(each, 1)
else:
the_number += dict_of_numbers.get(each, 0)
return the_number
print(parse_int("thirty seven thousand and twenty two")) # 37022
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With