如何替换字符串中的子字符串?

时间:2013-10-18 04:38:09

标签: python replace

我正在尝试编写一个程序来改变字符,如果在名为st的字符串中找到ch,我将用'!'替换它

我写了一个程序,但由于某些原因,如果我输入以下代码不能替换一个字母: st = a ch = a

我没有得到'!'的输出相反,我得到'一个'但我不想要我想要它'!'

我的代码是

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)

请帮助我从我的代码中得到错误或遗失的内容

2 个答案:

答案 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 :(得分:1)

st.find(ch)返回ch在st中的位置,而不是True / False。因为如果Python中的== True为True,那么你的程序在某些情况下会起作用...... :) 考虑str =='a'和ch =='a',第一个条件失败,但第二个条件仅在str和ch具有相同长度时有效。我想你的st或ch中还有别的东西。 在我的电脑中你的程序工作,除非搜索ch在st中是第一个,如下所示:st ='afsdf'ch ='a'。 更好的解决方案如下:

st.replace(ch, '!')

它适用于所有情况。