#python #string
Вопрос:
#program to replace all occurences of a substring with a given substring!!!!
def replace_string(str,x,y):
a = len(x)
for i in range(len(str)):
if str[i] == x[0]:
end = i a
sub_str = str[i:end]
if x == sub_str:
str = str[:i] y str[end:]
else:
continue
else:
continue
print (str)
str = input("enter a string- ")
x = input("Input substring to be deleted- ")
y = input("Enter substring to be fit in- ")
replace_string(str,x,y)
Вот некоторые результаты, которые он дает
1.
enter a string- abcabcddabc
Input substring to be deleted- abc
Enter substring to be fit in- haha
-> hahahahaddhaha
2.
enter a string- i am a good boy
Input substring to be deleted-<space>
Enter substring to be fit in- "
-> i"am"a"good"boy
Но когда я вставляю ту же строку «Я хороший мальчик», но пытаюсь заменить хорошее на плохое, это приводит к ошибке индекса вне диапазона, но я не могу понять, почему это происходит….
enter a string- i am a good boy
Input substring to be deleted- good
Enter substring to be fit in- bad
Traceback (most recent call last):
File "f:/----/-----/---------/Fn_replace.py", line 19, in <module>
replace_string(str,x,y)
File "f:/----/-----/--------/Fn_replace.py", line 5, in replace_string
if str[i] == x[0]:
IndexError: string index out of range
ПОЖАЛУЙСТА, ПОМОГИТЕ
Ответ №1:
Это связано с тем, что новая строка bad
короче, чем good
. Для целей отладки я добавляю символ заполнения ^
, чтобы увидеть разницу.
def replace_string(str,x,y):
if len(y)<len(x):
y = "^"*(len(x)-len(y)) #add padding
a = len(x)
for i in range(len(str)):
if str[i] == x[0]:
end = i a
sub_str = str[i:end]
if x == sub_str:
str = str[:i] y str[end:]
else:
continue
else:
continue
print (str)
Выход:
enter a string- i am a good boy
Input substring to be deleted- good
Enter substring to be fit in- bad
i am a bad^ boy
Если вы измените оператор печати на print(str.replace("^", ""))
, новый вывод будет
enter a string- i am a good boy
Input substring to be deleted- good
Enter substring to be fit in- bad
i am a bad boy
В целях обучения вы можете использовать эту функцию .replace()
для достижения своей конечной цели
def replace_string(s,x,y):
print(s.replace(x, y))
s = input("enter a string- ")
x = input("Input substring to be deleted- ")
y = input("Enter substring to be fit in- ")
replace_string(s,x,y)
Выход
enter a string- i am a good boy
Input substring to be deleted- good
Enter substring to be fit in- bad
i am a bad boy
P/S: Также, пожалуйста, следуйте совету @Sujay: не используйте » str » в качестве имени переменной, потому что это функция python, пример str(x)
Комментарии:
1. он мог бы использовать функцию, которую он создал, чтобы сделать это тоже 🙂 с помощью пробелов
2. @AdityaGupta, да, это верно! Введите
good
иbad
(с пробелом), убедившись, что оба имеют одинаковую длину символов
Ответ №2:
Длина bad
не равна good
, следовательно, ошибка. Кроме того, str
это встроенная функция в python, поэтому не используйте ее в качестве переменной. Я предлагаю здесь простую программу.
strr = input("enter a string- ")
x = input("Input substring to be deleted- ")
y = input("Enter substring to be fit in- ")
strr=strr.replace(x,y)
print(strr)
Пример:
strr=hello hello boys
x=hello
y=f
Output: f f hello
Комментарии:
1. Но главной задачей было сделать это без функции замены.. Кстати, Спасибо