为什么replace()方法不能正常工作,但字符串拼接可以工作

2024-10-03 06:21:16 发布

您现在位置:Python中文网/ 问答频道 /正文

最近,我遇到了一个我无法理解的错误输出

我正在解决一个问题,如果字符串中的前一个字符按字母顺序先于当前字符,那么我必须将当前字符大写。另一方面,如果当前字符按字母顺序先于前一个字符,则当前字符为小写。如果两者相同,则无需执行任何操作

例如:

Input : ab cB GG
Output : aB cb GG

这是我的密码:

def transformSentence(sentence):
    for i in range(len(sentence)):
        s = sentence[i]
        p = sentence[i-1]
        if i ==0 or s == ' ' or p == ' ':
            continue
        if s == p:
            continue
        elif ord(s.lower()) > ord(p.lower()):
            sentence = sentence.replace(sentence[i], sentence[i].upper())

        elif ord(s.lower()) < ord(p.lower()):
            sentence = sentence.replace(sentence[i], sentence[i].lower())
    return sentence

print(transformSentence('ab cB GG'))

我得到的这个代码块的输出是:

ab cb GG

如果您注意到上面的输出,那么第二个elif块中的replace()可以工作!(大写b改为小写,因为它完全位于c之前)

当我使用string slicingconcatenation而不是下面的replace()时,它在两个块上都能很好地工作,并提供了预期的输出:

sentence = sentence[:i] + sentence[i].upper() + sentence[i+1:]

我需要知道为什么replace()方法在第一个elif块中不起作用,但在第二个块中起作用


Tags: ab顺序字母字符lowersentencereplacecb