我有一个问题,我正在努力。问题的目标是采用字符串占位符i
。如果i
是偶数占位符,请将i
处的字母替换为i -1
处的字母。如果i
占位符为奇数,则将i
替换为i +1
处的字母。
到目前为止,这是我的代码:
def easyCrypto (s):
for i in range (0,len(s)-1):
if i % 2 == 0:
str(s).replace(i,((i-1)))
if i % 2 != 0:
str(s).replace(i,((i+2)))
print (s)
我的错误:
Traceback (most recent call last):
File "<pyshell#4>", line 1, in <module>
easyCrypto('abc')
File "C:/Python/cjakobhomework7.py", line 4, in easyCrypto
str(s).replace(i,((i-1)))
TypeError: Can't convert 'int' object to str implicitly
更新!!
基于答案的新代码:
def easyCrypto (s):
for i in range (0,len(s)-1):
if i % 2 == 0:
s = str(s).replace(s(i),(s(i-1)))
else:
s = s.replace(s(i), s(i + 1))
print (s)
但是我仍然有以下错误:
Traceback (most recent call last):
File "<pyshell#7>", line 1, in <module>
easyCrypto('abc')
File "C:/Python/cjakobhomework7.py", line 4, in easyCrypto
s = str(s).replace(s(i),(s(i-1)))
TypeError: 'str' object is not callable
有什么想法吗?谢谢
答案 0 :(得分:2)
使用s[i]
代替s(i)
,同样使用其他索引。
答案 1 :(得分:0)
这里有两件事:
str.replace
不会自动对其参数进行字符串化。您需要手动将它们转换为字符串。请记住:“明确比隐含更好。”
str.replace
无法就地工作,因为字符串在Python中是不可变的。您需要将s
重新分配给str.replace
返回的新字符串对象。
您的代码应为:
s = s.replace(str(i), str(i-1))
此外,您可以将if i % 2 != 0:
替换为else:
,因为第二个if语句的条件只有在第一个为false时才为真:
if i % 2 == 0:
s = s.replace(str(i), str(i-1))
else:
s = s.replace(str(i), str(i+1))
关于您编辑的问题,您试图通过在其后面放置括号来将字符串s
作为函数调用。您需要使用方括号来索引字符串:
>>> 'abcde'[0]
'a'
>>> 'abcde'[3]
'd'
>>>
在你的情况下,它将是:
s = s.replace(s[i], s[i-1])
作为一般经验法则,括号(...)
用于调用函数,而方括号[...]
用于索引序列/容器。