我有一个需要编写的函数,称为Dial_up,它获取一个字符串作为输入并返回一个单词作为输出。
e.g def dial_up('999 666 88'):
预期输出:
'YOU'
就像您在旧手机上拨打msg一样,但是我不知道如何从这样的事情开始:
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'->'a' 。
最佳答案
这是使用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上也应该可以正常工作。
关于python - 试图编写一个模拟手机拨号的功能,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/36159244/