如何在Python中将字符串转换为数字

3

我在codewars上看到了一个有趣的python练习,它涉及将字符串转换为数字。我想要一些解决这个python练习的建议或指导。谢谢。

这是练习题:在这个kata中,我们想要将一个字符串转换成一个整数。这些字符串只是单纯地表达数字的单词形式。 例子: "one" 1

这是我的代码:

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

你需要什么帮助?这对我有效。 - milt_on
它无法处理大数字。例如七十八万三千九百一十九。 - M.HBA
是的。在“一百”上出现了故障。 - MSH
3
你假设口头表述的数字是相加的,但在某些情况下它们是相乘的。例如,“七百”。在这种情况下,你必须将“百”前面的数字乘以100。 - MSH
2
可以看一下word2number的开发者是如何解决这个问题的,因为由口语数字转换为整数并不容易,正如@MSH所提到的那样:GitHub - user8563312
1个回答

1
我有一个解决方案,尚未对大量数字进行测试,但可能会给您一些想法:
  1. 口头表达的数字有时是相加的,有时是相乘的。
  2. 有时人们在数字之间加上 and。例如:thirty seven thousand and twenty one
  3. 不要使用 [] 从字典中获取值。使用 get 方法。因此,如果与您拥有的数字没有相应的数据,则可以控制返回值。
  4. 使用 str 的 .lower() 将字符串中的字母变为小写,避免大小写问题

我编写的代码如下:

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

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接