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']