python – 为什么我必须创建一个空字符串来替换字符串中的所有字符?

我正在写一个ROT13函数,我无法理解为什么以下不起作用:

def ROT(string):
    # y = 0
    for char in string:
        x = ord(char)
        if 97 <= x < 110 or 65 <= x < 78:
            # string[y]=char.replace(char, chr(x+13))
            char=char.replace(char, chr(x+13))
            print(char)
            # y+=1
        elif x >= 110 or 78 <= x < 91:
            # string[y]=char.replace(char, chr(x-13))
            char=char.replace(char, chr(x-13))
            print(char)
            # y+=1
    return string

string = ROT('Hello, lorem ipsum dolor sit amet')
print(string)

对函数的调用只打印原始字符串.正如您在上面的注释行中所看到的(道歉,如果它有点难以阅读),我尝试定义一个变量y来增加字符串,然后访问它但我得到一个运行时错误.我想出的解决方案是在函数的开头创建一个空字符串(从我的谷歌搜索似乎是大多数人使用的解决方案),但没有人解释为什么会这样.如果要替换原始字符串,为什么不能返回原始字符串?

解决方法:

您的代码中的问题是您没有操纵原始字符串.您只是替换临时变量char而不是原始字符串.由于字符串在python中是不可变的,您可以尝试使用新字符串而不是替换原始字符串,您可以将字符附加到新字符串.喜欢:

modified_string = ""
for char in string:
     #whatever condition
     modified_string += #value to be added
上一篇:用PHP实现ROT13


下一篇:Bag of mice(概率DP)