给定一个 phone 数字,将数字转换为数字

Given a phone number in words, convert the number to digits

下面的代码适用于

Input: "two one nine six eight one six four six zero"

Output: "2196816460"
n=s.split()
    l=[]
    for val in n:
        if(val=='zero'):
            l.append('0')
        elif(val=='one'):
            l.append("1")
        elif(val=='two'):
            l.append("2")
        elif(val=='three'):
            l.append("3")
        elif(val=='four'):
            l.append("4")
        elif(val=="five"):
            l.append("5")
        elif(val=="six"):
            l.append("6")
        elif(val=="seven"):
            l.append("7")
        elif(val=="eight"):
            l.append("8")
        elif(val=="nine"):
            l.append("9")
    new = ''.join(l)
    return new

但是如果

输入:“五八双二双二四八五六”
所需输出应为:5822224856
或者,
输入:“五一零六三八九六四”
所需输出应为:5106888964 上面的代码怎么修改?

为数量修饰符创建另一个映射,并将数字字符串乘以前面的修饰符。

digits = {
    "zero": "0",
    "one": "1",
    "two": "2",
    "three": "3",
    "four": "4",
    "five": "5",
    "six": "6",
    "seven": "7",
    "eight": "8",
    "nine": "9",
}

modifiers = {
    "double": 2,
    "triple": 3,
}

number = ""
n = 1
for word in input("? ").split():
    if word in modifiers:
        n *= modifiers[word]
    else:
        number += n * digits[word]
        n = 1
print(number)
? five eight double two double two four eight five six
5822224856

您可以使用变量来保存下一个数字的重复。

变量以值 1 开头。

当得到一个重复词('triple'),然后更新相应的变量。

当得到一个数字('three')时,添加到列表并将变量更新回1

此外,您可以使用字典来代替 else..if

repeat = 1
repeat_dict = {'double':2, 'triple':3}:

n=s.split()
l=[]
for val in n:
    if val in repeat_dict:   # got a repeat word
        repeat = repeat_dict[val]
    else:
          
        if(val=='zero'):
            l.append('0' * repeat) 
        elif(val=='one'):
            l.append("1" * repeat)
        elif(val=='two'):
            l.append("2" * repeat)
        elif(val=='three'):
            l.append("3" * repeat)
        elif(val=='four'):
            l.append("4" * repeat)
        elif(val=="five"):
            l.append("5" * repeat)
        elif(val=="six"):
            l.append("6" * repeat)
        elif(val=="seven"):
            l.append("7" * repeat)
        elif(val=="eight"):
            l.append("8" * repeat)
        elif(val=="nine"):
            l.append("9" * repeat)
        repeat = 1
new = ''.join(l)
return new