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

3 投票
3 回答
3057 浏览
提问于 2025-04-18 04:32

我在这个问题上卡了很久,问题是这样的:

写一个函数,这个函数接收一个字符串作为参数,然后返回对应的电话号码,结果也应该是一个字符串。转换的规则是标准的字母到电话号码的规则:

'a'、'b' 或 'c' 对应数字 2

'd'、'e' 或 'f' 对应数字 3

'g'、'h' 或 'i' 对应数字 4

'j'、'k' 或 'l' 对应数字 5

'm'、'n' 或 'o' 对应数字 6

'p'、'q'、'r' 或 's' 对应数字 7

't'、'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

你可以创建一个字典,然后逐个检查每个字符,再和字典里的每个键进行比较。

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
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':
    ...
10

我会这样做:

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

在问题的评论中提到的算法虽然更快,但需要花更多的心思去理解,而不仅仅是建立一个翻译字典。这种方法适用于Python2和Python3,不过这里有关于maketrans的相关文档,分别是Python2Python3的链接。

撰写回答