试图在python中一次搜索2个字符

试图在python中一次搜索2个字符,python,python-3.x,for-loop,Python,Python 3.x,For Loop,我刚刚回到python,我试图通过字符串一次搜索两个以上的字符,并用其他字符替换它们。例如,在字符串“aah”中搜索字符串“aa”,并将其替换为其他字符串,例如“xx”,但当我尝试运行它时,它会说类型必须是字符串,而不是int。这是我的代码,非常感谢您的帮助,谢谢 test = input("enter words to encrypt\n") #print(test) #change a letter def changea(test): #print(test) outp

我刚刚回到python,我试图通过字符串一次搜索两个以上的字符,并用其他字符替换它们。例如,在字符串“aah”中搜索字符串“aa”,并将其替换为其他字符串,例如“xx”,但当我尝试运行它时,它会说类型必须是字符串,而不是int。这是我的代码,非常感谢您的帮助,谢谢

test = input("enter words to encrypt\n")
#print(test)

#change a letter
def changea(test):
    #print(test)
    outp = ""
    for i in test:
        if i & i+1  == "aa":
            outp += "x"
        else:
            outp += i

    print(outp)
changea(test)

&
运算符对两个整数执行
位and运算。for循环在字符串上循环,因此循环变量
i
将字符串的连续字符作为其值。因此出现了错误:您正在对字符应用
&
运算符。此外,
i+1
没有意义:它试图将
+
运算符应用于字符和整数-python会抱怨无法将字符和整数连接起来

i&i+1
表达式的本意是为您提供两个相邻的字符,但它是错误的

有几种方法可以继续:一种是使用索引在字符串上循环(我想这就是您试图做的,因为您命名了for循环变量
I
,循环索引的传统名称)

将使
i
成为范围从
0
len(test)-1
的整数。然后,您需要从位置
i
开始切掉字符串中的两个字符:

for i in range(len(test)):
     if test[i:i+2] == "aa":
         outp += "x"
     else:
         outp += test[i]
您必须记住,字符串上的索引从
0
len(string)-1
,还必须记住切片
test[i:j]
是索引
i
j-1
之间的字符串片段(而不是
j


这不是特别地道的python,但我希望它是可以理解的

理想情况下,您应该使用
replace
re.sub
。但如果您致力于使用循环,以下是您可以尝试的:

def changea(test):
    pairs = zip(test, test[1:] + "$")
    out = ""
    for x, y in pairs:
        if x == "a" and y == "a":
            out += "x"
            next(pairs) # Skip the next iteration
        else:
            out += x
    return out

changea("Maary haad aa little laamb")
#'Mxry hxd x little lxmb'

Python中的逻辑and运算符是关键字
&
是位and运算符。为了解决您的主要问题,
i+1
失败,因为
i
是字符串
test
中的字符串,
1
是整数。您可能想用整数为字符串编制索引,而不是直接尝试添加整数和字符串。相关--此接受的答案也适用于字符串。您可以使用if test.count(“a”)==2:#做一些您可能会发现有用的事情。那么如何更改此选项以不排除最后一个字符?这是否与使用替换功能有关?智能移动;但我还是把它修好了。
def changea(test):
    pairs = zip(test, test[1:] + "$")
    out = ""
    for x, y in pairs:
        if x == "a" and y == "a":
            out += "x"
            next(pairs) # Skip the next iteration
        else:
            out += x
    return out

changea("Maary haad aa little laamb")
#'Mxry hxd x little lxmb'