2014-02-19 3 views
-1

Я новичок в python, и для упражнения я создаю функцию, которая будет делать то же самое, что и метод .replace.Функции Assist

меня это до сих пор:

def replace_str (string, substring, replace): 
    my_str = "" 
    for index in range(len(string)): 
     if string[index:index+len(substring)] == substring : 
      my_str += replace 
     else: 
      my_str += string[index] 
    return my_str 

При испытании с:

print (replace_str("hello", "ell", "xx")) 

возвращает:

hxxllo 

Я надеялся, что кто-то может помочь мне точку в правильном направлении так что он заменяет «ell» на «xx», а затем переходит к «o» и печатает:

hxxo 

как .replace string способ сделал.

+0

Вы можете использовать регулярное выражение? – Drewness

+2

Эти типы упражнений являются наихудшими. – wim

+0

Ну, если вы ничего не можете импортировать, то регулярное выражение отсутствует. – Drewness

ответ

0

Обычно, используя while с индексной переменной, поддерживаемой стороны, это плохая идея, но когда вам нужно манипулировать индекс внутри цикла, это может быть хорошо вариант:

def replace_str(string, substring, replace): 
    my_str = "" 
    index = 0 
    while index < len(string): 
     if string[index:index+len(substring)] == substring: 
      my_str += replace 
      # advance index past the end of replaced part 
     else: 
      my_str += string[index] 
      # advance index to the next character 
    return my_str 

Обратите внимание, что x.replace(y, z) делает что-то другое, когда y пуст. Если вы хотите соответствовать этому поведению, в вашем коде может быть особый случай.

+0

Это продвижение индекса мимо конца замещенной части, которую я не могу понять ... – Chadmmiles

+0

@ user3321382: Как долго замещается часть? С чего это начинается? Где это заканчивается? Добавьте достаточно, чтобы 'index', чтобы взять его из того места, где заканчивается замещенная часть. – user2357112

0

Вы можете сделать следующее:

import sys 

def replace_str(string, substring, replace): 
    new_string = '' 
    substr_idx = 0 

    for character in string: 
     if character == substring[substr_idx]: 
      substr_idx += 1 
     else: 
      new_string += character 
     if substr_idx == len(substring): 
      new_string += replace 
      substr_idx = 0 
    return new_string 

if len(sys.argv) != 4: 
    print("Usage: %s [string] [substring] [replace]" % sys.argv[0]) 
    sys.exit(1) 
print(replace_str(sys.argv[1], sys.argv[2], sys.argv[3])) 

Обратите внимание, что с помощью команды str.join() в списке (list.append является O (1)) работает быстрее, чем выше, но вы сказали, что вы не можете использовать строковые методы.

Пример использования:

$ python str.py hello ell pa 
hpao 
$ python str.py helloella ell pa 
hpaopaa