我有一个需要编写的函数,叫做dial_up,它获取一个字符串作为输入并返回一个单词作为输出。
e.g def dial_up('999 666 88'):
预期产出:
'YOU'
就像你在旧手机上拨打一个消息一样,但我不知道如何用这样的东西开始:
def dial_up(string):
"""
"""
dict = {'2': 'abc', '3': 'def', '4': 'ghi', '5': 'jkl', '6': 'mno', '7': 'pqrt', '8': 'tuv', '9': 'wxyz'}
for key, value in groupby(string):
此后我有点卡住了。
Obs:我需要我的函数循环所以如果我写(' 2222')它返回我' a'因为它可以追溯到' a' a' - > ' B' - > ' C' - > '一个'
答案 0 :(得分:2)
num2chars = {'2': 'abc', '3': 'def', '4': 'ghi', '5': 'jkl', '6': 'mno', '7': 'pqrt', '8': 'tuv', '9': 'wxyz'}
def dial_up(string):
message = ""
for group in string.split(" "):
message += num2chars[group[0]][len(group)-1]
return message
或者:
def dial_up(string):
return "".join(num2chars[group[0]][len(group)-1] for group in string.split())
答案 1 :(得分:1)
这是一个使用groupby
的解决方案。它使用groupby
键在字典中找到正确的数字字符串,并使用groupby
组的长度来索引该字符串。该组作为迭代器返回,因此我们需要将其转换为列表以获取其长度,并且我们需要减去一个来计算正确的索引,因为索引是从零开始的。然后我们可以通过将该索引减去模拟字典数字字符串的长度来实现循环。
我更改了字典的名称,因为string
是标准Python模块的名称。
from __future__ import print_function
from itertools import groupby
decode = {'2': 'ABC', '3': 'DEF', '4': 'GHI', '5': 'JKL',
'6': 'MNO', '7': 'PQRT', '8': 'TUV', '9': 'WXYZ'}
def dial_up(digits):
#return ''.join([decode[key][len(list(value)) - 1]
result = []
for key, value in groupby(digits):
if key == ' ':
continue
i = len(list(value)) - 1
s = decode[key]
result.append(s[i % len(s)])
return ''.join(result)
# Test
data = (
'999 666 88',
'33 99 8',
'222 2 22',
'22 22',
'2222',
'444 43',
)
for s in data:
print(s, dial_up(s))
<强>输出强>
999 666 88 YOU
33 99 8 EXT
222 2 22 CAB
22 22 BB
2222 A
444 43 IGD
在Python 2.6.6上测试过,但它也应该在Python 3上正常工作。