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



我刚刚回到python,我试图通过一个字符串一次搜索两个字符,并用其他东西替换它们。例如在字符串"aah"中搜索字符串"aa"并将其替换为其他内容,例如"xx",但是当我尝试运行它时,它说类型必须是字符串,而不是 int。这是我的代码,任何帮助将不胜感激,谢谢

test = input("enter words to encryptn")
#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)

理想情况下,您应该使用replacere.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'

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

i & i+1表达式旨在为您提供两个相邻的字符,但这是错误的。

有几种方法可以继续:一种是使用索引循环字符串(我想这就是您尝试做的事情,因为您将 for 循环变量命名为i,循环索引的传统名称(。

for i in range(len(test)):

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

for i in range(len(test)):
if test[i:i+2] == "aa":
outp += "x"
else:
outp += test[i]

您必须记住,字符串上的索引从0len(string) - 1,您还必须记住切片test[i:j]是索引ij-1之间的字符串部分(不是j(。

这不是特别惯用的python,但我希望它是可以理解的。

最新更新