如何将字符串转换为电话号码

时间:2014-04-28 04:34:52

标签: python string for-loop

长期以来,我一直坚持这个问题:

编写一个以字符串作为参数的函数,并返回电话号码 作为结果对应于该字符串。 电话号码也应该是一个字符串。 转换规则是电话号码规则的标准字词:

  

' a',' b'或者' c'映射到2

     

' d',' e'或者' f'映射到3

     

' g',' h'或者'我'映射到4

     

' j',' k'或' l'映射到5

     

' m',' n'或' o'映射到6

     

' p',' q',' r'或' s'映射到7

     

'',' u'或' v'映射到8

     

' w',' x',' y'或' z'映射到9。

基本上我试过

for char in word:
    if char == 'a' or char == 'b' or char == 'c':
    print 2,

依此类推但当我调用函数strng_to_num("apples")时 输出为2 7 7 5 3 7,我想要'277537'。无论如何要删除空格?

3 个答案:

答案 0 :(得分:11)

我会这样做:

def string_to_num(in_str):
    try:
        translationdict = str.maketrans("abcdefghijklmnopqrstuvwxyz","22233344455566677778889999")
    except AttributeError:
        import string
        translationdict = string.maketrans("abcdefghijklmnopqrstuvwxyz","22233344455566677778889999")

    out_str = in_str.lower().translate(translationdict)
    return out_str

ooga在问题评论中提到的算法肯定更快,但需要比仅仅构建翻译词典更强烈的思考。这种方式适用于python2或python3,但这里是Python2Python3maketrans的相关文档

答案 1 :(得分:3)

不要单独打印每个号码。相反,将它们添加到列表中,并在最后将它们一起打印出来:

phone_num = []
for char in word:
    if char == 'a' or char == 'b' or char == 'c':
       phone_num.append('2')
    elif char == 'd' or char == 'e' or char == 'f':
       phone_num.append('3')
    ...
print ''.join(phone_num)

您可以通过编写以下内容使您的if语句更简单:

if char in 'abc':
    ...
elif char in 'def':
    ...

答案 2 :(得分:0)

您可以创建一个字典并遍历每个字符,然后与每个字典键进行比较。

def phone(arg):
    num_dict = {'abc': "2",
               'def': "3",
               'ghi': "4",
               'jkl': "5",
               'mno': "6",
               'pqrs': "7",
               'tuv': "8",
               'wxyz': "9" }
    string = ""
    for c in arg:
            for k in num_dict.keys():
                    if c in k:
                            string += num_dict[k]
    return string