Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/wix/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 将长数字转换为相应的字母组合_Python_Letters And Numbers - Fatal编程技术网

Python 将长数字转换为相应的字母组合

Python 将长数字转换为相应的字母组合,python,letters-and-numbers,Python,Letters And Numbers,给定一个数字,将其翻译成所有可能的对应字母组合。例如,如果给定数字1234,它应该吐出abcd,lcd,和awd,因为与字母对应的数字组合可能是1234,1234,或1234 我在想用Python实现这一点的方法,但我真的被难倒了。有什么提示吗 到目前为止,我基本上只设置了一个简单的系统来将单个数字转换为字母。我不会给你一个完整的解决方案,但会告诉你从哪里开始: 我会将数字转换为字符串,并在字符串上迭代,因为字母表有26个字符,所以只需检查一位和两位数字 与上面的注释一样,递归方法也可以做到这一

给定一个数字,将其翻译成所有可能的对应字母组合。例如,如果给定数字
1234
,它应该吐出
abcd
lcd
,和
awd
,因为与字母对应的数字组合可能是
1234
1234
,或
1234

我在想用Python实现这一点的方法,但我真的被难倒了。有什么提示吗


到目前为止,我基本上只设置了一个简单的系统来将单个数字转换为字母。

我不会给你一个完整的解决方案,但会告诉你从哪里开始:

我会将数字转换为字符串,并在字符串上迭代,因为字母表有26个字符,所以只需检查一位和两位数字

与上面的注释一样,递归方法也可以做到这一点,例如:

电话号码是1234

*)取第一个字符->数字为1

*)然后将其与所有剩余的1位数字合并-->

*)然后将其与下一个2位数字组合(如果

*)……等等

正如我所说,这只是一个从哪里开始的想法,但基本上是一种使用组合学的递归方法,包括检查两位数是否大于26,从而超出字母表。

Make
str

如中所示实施

筛选数字超过26的列表

Write返回字母的函数

def alphabet(n):
    # return " abcde..."[n]
    return chr(n + 96)


def partition(lst):
    for i in range(1, len(lst)):
        for r in partition(lst[i:]):
            yield [lst[:i]] + r
    yield [lst]


def int2words(x):
    for lst in partition(str(x)):
        ints = [int(i) for i in lst]
        if all(i <= 26 for i in ints):
            yield "".join(alphabet(i) for i in ints)


x = 12121
print(list(int2words(x)))
# ['ababa', 'abau', 'abla', 'auba', 'auu', 'laba', 'lau', 'lla']
def字母表(n):
#返回“abcde…”[n]
返回chr(n+96)
def分区(lst):
对于范围(1,len(lst))中的i:
对于分区中的r(lst[i:]):
收益率[lst[:i]]+r
产量[lst]
def int2words(x):
对于分区中的lst(str(x)):
ints=[int(i)表示lst中的i]

如果所有人(我)都是你自己尝试过做什么吗?你能发布到目前为止你写的代码吗?一个基本的递归方法应该很容易解决这个问题…不知道是谁否决了你,但他应该感到羞耻。向上投一票。当然是那些搜索完整实现的人中的一个,但这不是它的本意:-D
      1 23 4
def alphabet(n):
    # return " abcde..."[n]
    return chr(n + 96)


def partition(lst):
    for i in range(1, len(lst)):
        for r in partition(lst[i:]):
            yield [lst[:i]] + r
    yield [lst]


def int2words(x):
    for lst in partition(str(x)):
        ints = [int(i) for i in lst]
        if all(i <= 26 for i in ints):
            yield "".join(alphabet(i) for i in ints)


x = 12121
print(list(int2words(x)))
# ['ababa', 'abau', 'abla', 'auba', 'auu', 'laba', 'lau', 'lla']