我刚刚回到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)
理想情况下,您应该使用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'
&
运算符对两个整数执行bitwise and
。您的 for 循环遍历字符串,因此循环变量i
将字符串的连续字符作为其值。因此错误:您正在对字符应用&
运算符。此外,i+1
毫无意义:它试图将+
运算符应用于字符和整数 - python 会抱怨您无法连接字符和整数。
i & i+1
表达式旨在为您提供两个相邻的字符,但这是错误的。
有几种方法可以继续:一种是使用索引循环字符串(我想这就是您尝试做的事情,因为您将 for 循环变量命名为i
,循环索引的传统名称(。
for i in range(len(test)):
将使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,但我希望它是可以理解的。