有人能解决这个递归函数问题吗?
编写一个程序,确定电话号码的所有字母翻译。如果输入字符串中出现不可翻译的字符,则应将其作为常量传递。 输入:7位数字串的序列,每行一个。由一串7 0&#39>终止。
示例输入:
borla63 0000000
示例输出:
borlamd,borlame,borlamf,borland,borlane,borlanf,borlaod,borlaoe,borlaof
#data5.py
import string
lets=["","","abc","def","ghi","jkl","mno","pqrs","tuv","wxyz"]
def rep(numb,index):
if index<len(numb) and (numb[index]) not in assi at +"01"
for letter in lets[int(numb[index])]:
rep(numb[:index] +letter+numb[index+1:],index+1)
elif index>= len(numb:
print(numb)
else:
rep(numb,index+1)
while True:
number=input()
if number=="0000000":
break
rep(number,0)
答案 0 :(得分:0)
我理解下选票和结束票,因为你在这里没有表现出丝毫的努力。另一方面,这是一个非平凡的问题。我会假设你真的对这个问题的解决方案感兴趣,我会告诉你我将如何写这个(没有看过你发布的代码)。
lets=("", "", "abc", "def", "ghi", "jkl", "mno", "pqrs", "tuv", "wxyz")
def trans(pnum, res = ""): # res is the current result (initially the empty string)
if not pnum:
yield res # phone number is empty string, so we're done, return res
else:
digit = pnum[0] # get first digit
try:
repls = lets[int(digit)] # if it is an integer, get replacements
if not repls: # if replacements is an empty string,
repls = digit # fall back to initial digit
except ValueError:
repls = digit # not an integer - fall back to initial character
for i in repls: # for every replacement character
yield from trans(pnum[1:], res+i) # recursively process the rest of the phone number
for pnum in ["borla63", "h3llo"]:
print(list(trans(pnum)))
产生
['borlamd', 'borlame', 'borlamf', 'borland', 'borlane', 'borlanf', 'borlaod', 'borlaoe', 'borlaof']
['hdllo', 'hello', 'hfllo']
现在我不知道问题禁令是如何工作的,但我希望你用“超时”来研究这段代码,然后对上面的代码进行适当的修改。
请注意,如果重要的话,这是Python 3.3+。
希望这有帮助!