使用str.replace替换字符串的不同占位符中的字符串中的字母

时间:2014-11-11 00:12:47

标签: python string

我有一个问题,我正在努力。问题的目标是采用字符串占位符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

有什么想法吗?谢谢

2 个答案:

答案 0 :(得分:2)

使用s[i]代替s(i),同样使用其他索引。

答案 1 :(得分:0)

这里有两件事:

  1. str.replace不会自动对其参数进行字符串化。您需要手动将它们转换为字符串。请记住:“明确比隐含更好。”

  2. str.replace无法就地工作,因为字符串在Python中是不可变的。您需要将s重新分配给str.replace返回的新字符串对象。

  3. 您的代码应为:

    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])
    

    作为一般经验法则,括号(...)用于调用函数,而方括号[...]用于索引序列/容器。