长期以来,我一直坚持这个问题:
编写一个以字符串作为参数的函数,并返回电话号码 作为结果对应于该字符串。 电话号码也应该是一个字符串。 转换规则是电话号码规则的标准字词:
' 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'
。无论如何要删除空格?
答案 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,但这里是Python2和Python3中maketrans
的相关文档
答案 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