电话号码对应英文单词 (python)

在电话号码输入数字,输出他所有的单词组合。

解法 1

循环法,这里假设电话号码只有3位,那么可以使用3个for循环来进行输出。

c = ["","","ABC","DEF","GHI","JKL","MNO","PQRS","TUV","WXYZ"] # 分别代表着0,1,2,3,4,5,6,7,8,9
total = [0,0,3,3,3,3,3,4,3,4] # 分别代表着c中字母的数量
number = list(map(int, input().split()))
TelLength = len(number) # 电话号码的位数
answer = [0 for _ in range(TelLength)] # 表示数字目前代表的在C的相对位置,比如A为0,B为1,C为3

for answer[0] in range(total[number[0]]):
    for answer[1] in range(total[number[1]]):
        for answer[2] in range(total[number[2]]):
            for i in range(3):
                print(c[number[i]][answer[i]], end="")
            print()

解法 2

将解法1进行改写,使其应用范围更广代码更简洁。

c = ["","","ABC","DEF","GHI","JKL","MNO","PQRS","TUV","WXYZ"] # 分别代表着0,1,2,3,4,5,6,7,8,9
total = [0,0,3,3,3,3,3,4,3,4] # 分别代表着c中字母的数量
number = list(map(int, input().split()))
TelLength = len(number) # 电话号码的位数
answer = [0 for _ in range(TelLength)] # 表示数字目前代表的在C的相对位置,比如A为0,B为1,C为3

while True:
    # 输出数据
    for i in range(TelLength):
        print(c[number[i]][answer[i]], end="")
    print()
    k = TelLength - 1 #从最下层开始遍历
    while k>=0:
        if answer[k] < total[number[k]] - 1:#如果没有到达尾部,直接取
            answer[k] += 1
            break
        else:
            answer[k] = 0 # 该层的值变成第一位
            k -= 1 #遍历上层
    if k < 0:# 最上层也遍历完了
        break

解法 3

采用递归的方法来进行改写解法1。

c = ["","","ABC","DEF","GHI","JKL","MNO","PQRS","TUV","WXYZ"] # 分别代表着0,1,2,3,4,5,6,7,8,9
total = [0,0,3,3,3,3,3,4,3,4] # 分别代表着c中字母的数量
number = list(map(int, input().split()))
TelLength = len(number) # 电话号码的位数
answer = [0 for _ in range(TelLength)] # 表示数字目前代表的在C的相对位置,比如A为0,B为1,C为3


def RecursiveSearch(numbre, answer, index, n):
    if index == n:
        for i in range(TelLength):
            print(c[number[i]][answer[i]], end="")
        print()
        return
    for answer[index] in range(total[number[index]]):
        RecursiveSearch(numbre, answer, index+1, n)
RecursiveSearch(number, answer, 0, TelLength)

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值