-2

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

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

我没有得到“!”的输出 相反,我得到“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)

请帮助我不知道我做错了什么或从我的代码中丢失

4

2 回答 2

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()
于 2013-10-18T04:52:05.930 回答
1

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

st.replace(ch, '!')

它适用于所有情况。

于 2013-10-18T05:01:26.990 回答