我有一个需要编写的函数,称为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/

10-12 17:01
查看更多