如何将字符串转换为电话号码
我在这个问题上卡了很久,问题是这样的:
写一个函数,这个函数接收一个字符串作为参数,然后返回对应的电话号码,结果也应该是一个字符串。转换的规则是标准的字母到电话号码的规则:
'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
的相关文档,分别是Python2和Python3的链接。