2015-03-23 2 views
-1

Мне нужно рекурсивно заменить символы в строке новыми символами. Однако я немного застрял. Я ничего не могу импортировать, поэтому вот мой код:Рекурсия строки Python

EDIT: Я забыл упомянуть, что мне не разрешено использовать какие-либо встроенные функции, кроме операторов len() и index/splice. Это означает, что я не могу использовать «in». Это вопрос домашней работы, но я не ожидаю, что вы, ребята, решите его для меня, просто чтобы указать, почему мой код не работает. Благодаря!

def replace_char(astr, old_char, new_char): 
    newstr = "" 
    if astr == "": 
     return newstr 
    elif astr[0] == old_char: 
     newstr += new_char 
     return replace_char(astr[1:], old_char, new_char) 
    else: 
     newstr += astr[0] 
     return replace_char(astr[1:], old_char, new_char) 

Любые идеи о том, почему он не работает? Благодаря!

+0

вы сделаете NewString пустой каждый раз вы называете это ..., но тогда вы пытаетесь добавить к нему ... –

+0

возможно дубликат [Изменить один символ в строке в Python?] (HTTP: //stackoverflow.com/questions/1228299/change-one-character-in-a-string-in-python) –

ответ

1

Вот то, что вы ищете:

def replace_char(astr, old_char, new_char): 
    if astr == "": 
     return astr 
    elif astr[0] == old_char: 
     return new_char + replace_char(astr[1:], old_char, new_char) 
    else: 
     return astr[0] + replace_char(astr[1:], old_char, new_char) 

Единственная строка, которую вы когда-либо вернулся в свой старый код был пуст один:

newstr = "" 
    if astr == "": 
     return newstr 

Вам нужно добавлять символы к вашему возвращаемому значению при повторном выполнении строки.

0
def replace_char(s, old, new): 
    if len(s) == 0: 
     return '' 
    elif len(s) == 1: 
     if s == old: 
      return new 
     else: 
      return s 
    else: 
     return replace_char(s[0], old, new) + replace_char(s[1:], old, new) 

>>> replace_char('test', 't', 'c') 
'cesc' 
0

@ Joran Beasley is right - вы воссоздаете newstr каждый раз, когда вы проходите через функцию. Измените заголовок функции включить NewStr:

def replace_char(astr, old_char, new_char, newstr = '')

И изменить все вызовы функции, а также:

return replace_char(astr[1:], old_char, new_char, newstr)

Вот полный код:

def replace_char(astr, old_char, new_char, newstr = ''): 
    newstr = "" 
    if astr == "": 
     return newstr 
    elif astr[0] == old_char: 
     newstr += new_char 
     return replace_char(astr[1:], old_char, new_char, newstr) 
    else: 
     newstr += astr[0] 
     return replace_char(astr[1:], old_char, new_char, newstr) 

Это реализация хранит большую часть вашего существующего кода на месте, но имеет смысл использовать astr.replace(old_char, new_char) в большинстве случаев

0
def replace_chr(a_string,old,new): 
    if not a_string:return a_string 
    next_char = a_string[0] if a_string[0] != old else new 
    return next_char + replace_chr(a_string[1:],old,new) 
Смежные вопросы