2013-10-18 3 views
-2

Я пытаюсь написать программу для изменения символа, если ch находится внутри строки с именем st i, заменит ее на '!'Как заменить подстроку в строке?

Я написал программу, но по какой-то причине этот код не может заменить одну букву, например, если я вхожу: «!» й = а ч = а

я не получаю выход вместо этого я получаю «а», но я не хочу, чтобы я хотел, чтобы это было! »

мой код

st = raw_input("String: ") 
ch = raw_input("character: ") 


def replace_char(st,ch): 
    if st.find(ch): 
     new = st.replace(ch,'!') 
     print new 
     return new 
    elif len(st)==len(ch): 
     if ch==st: 
      print"!" 
     else: 
      print st 
    else: 
     print st 
     return st 

replace_char(st,ch) 

Пожалуйста, помогите я не получаю то, что я делаю неправильно или отсутствует из моего кода

+1

Используйте разумный предмет -> Downvote. –

+1

str.find() не возвращает True или False, он возвращает индекс найденной строки. –

+0

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

ответ

3

Из документации Python:

find(s, sub[, start[, end]])¶ 

Return the lowest index in s where the substring sub is found such 
that sub is wholly contained in s[start:end]. Return -1 on failure. 
Defaults for start and end and interpretation of negative values is 
the same as for slices. 

Он ничего не говорит о том, что find() возвращает True или False. Это твоя проблема.

Для поиска подстроки лучше использовать

if some_string in some_otherstring: 
    do_something() 
1

st.find (Ch) возвращает позицию, где ч находится в ст не True/False. Поскольку if True имеет значение True в Python, ваша программа работает в некоторых случаях ... :) Рассмотрим str == 'a' и ch == 'a', первое условие не выполняется, но второе условие работает только в том случае, если str и ch имеют такой же длина. Я предполагаю, что у вас есть что-то еще в вашем st или ch. На моем ПК ваша программа работает, за исключением случая, когда поиск ch является первым в st, например: st = 'afsdf' ch = 'a'. лучшее решение, как следует:

st.replace(ch, '!') 

Он будет работать во всех случаях.

+0

Downvote для повторения моего уже заданного ответа. –

Смежные вопросы