-1

我是 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。我究竟做错了什么?

4

3 回答 3

5

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

于 2013-08-26T17:36:06.760 回答
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
于 2013-08-26T17:38:43.310 回答
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

(评论中指向较早答案的链接有更多内容。)

于 2013-08-26T17:49:49.827 回答