2014-10-18 3 views
-6

Может ли кто-нибудь решить эту проблему рекурсивного funtion?решение этой рекурсивной функции вопросы?

Напишите программу, которая определяет все алфавитные переводы номера телефона. Если во входной строке появляется непереводимый символ, он должен быть передан как константа. Ввод: Последовательность из 7 цифр строк, по одной в строке. Заканчивается строкой из 7 0. вход

Пример:

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) 
+4

Добро пожаловать в переполнение стека! Похоже, вы хотите, чтобы мы написали вам код. Хотя многие пользователи готовы создавать код для кодера, терпящего бедствие, они обычно помогают только тогда, когда плакат уже попытался решить проблему самостоятельно. Хорошим способом продемонстрировать это усилие является включение кода, который вы написали до сих пор, пример ввода (если он есть), ожидаемый вывод и вывод, который вы фактически получаете (вывод консоли, трассировки стека, ошибки компилятора - все, что угодно применимо). Чем больше деталей вы предоставляете, тем больше ответов вы получите. –

+0

Да, кто-то может – UnholySheep

+0

этот вопрос с предыдущего конкурса, я скопировал часть решения, но я неправильно скопировал его часть и сумел сломать код. Будет ли сообщество хотеть исправить этот код для меня? обратите внимание, что он не выводит результат. – Lilyk27

ответ

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+, если это имеет значение.

Надеюсь, это поможет!

+0

Большое вам спасибо! Я просто немного стеснялся для теста выбора команды comp sci в четверг, так что ваш ответ был большой помощью! – Lilyk27

+0

@ Lilyk27 Нет проблем. Я надеюсь, что вы вернетесь к SO с более подготовленными вопросами позже ;-) Удачи вам в вашем тесте! – uselpa