如何在for循环中编辑字符串字母

时间:2013-08-26 17:33:50

标签: python

我是python的新手,我真的找不到办法做到这一点。

我想根据某些条件更改字符串的字母。这是代码:

for c in text:
    ordChar=ord(c)
    if ordChar>=65 and ordChar<=90:
        ordChar=ordChar+13
        if ordChar>90:
            ordChar=ordChar-90+64
        c=chr(ordChar)
    else:
        if ordChar>=97 and ordChar<=122:
            ordChar=ordChar+13
            if ordChar>122:
                ordChar=ordChar-122+96
            c=chr(ordChar)
return text

返回的text值与参数值相同。我认为变量是指针,因此编辑c时,它应该编辑text。我做错了什么?

3 个答案:

答案 0 :(得分:5)

您不是在“编辑”c,而是将其分配给其他内容。另一种方法是构建一个新的字符串,而不是试图改变旧字符串(这是不可能的),然后代替c=...,你会newstr += ...

答案 1 :(得分:2)

正如我在评论中所解释的,Python中的字符串不可变,因此您需要创建一个新字符串,不能简单地编辑旧字符串。您的代码可以变为:

new_text = ""
for c in text:
    ordChar=ord(c)
    if ordChar>=65 and ordChar<=90:
        ordChar=ordChar+13
        if ordChar>90:
            ordChar=ordChar-90+64
        c=chr(ordChar)
    else:
        if ordChar>=97 and ordChar<=122:
            ordChar=ordChar+13
            if ordChar>122:
                ordChar=ordChar-122+96
            c=chr(ordChar)
    new_text += c
return new_text

答案 2 :(得分:2)

在arshajii和Josh的答案中构建一个新字符串,或者使用map或列表理解来逐个字符地应用转换。 (无论哪种方式,你都在创建一个新的字符串,而不是转换原始字符串。)

def convert_char(c):
    code = ord(c)
    if 65 <= code <= 90:
        code += 13
        if code > 90:
            code -= 26
    elif 97 <= ord(c) <= 122:
        code += 13
        if code > 122:
            code -= 26
    return chr(code)

 print ''.join(map(convert_char, "Testing"))

有几种更好的方法可以做到这一点,例如:

def convert_char(c):
    if 'a' <= c <= 'z':
        return chr(97 + (ord(c) - 6) % 26)
    elif 'A' <= c <= 'Z':
        return chr(65 + ord(c) % 26)
    return c

from string import lowercase, uppercase
def convert_char(c):
    if c in lowercase:
        return lowercase[(lowercase.index(c) + 13) % 26]
    if c in uppercase:
        return uppercase[(uppercase.index(c) + 13) % 26]
    return c

(对早期答案的评论中的链接有更多。)