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

2024-10-01 15:37:37 发布

您现在位置: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。我做错什么了?在


Tags: and方法字符串代码textin编辑for
3条回答

{1}你没有在编辑。另一种方法是构建一个新的字符串,而不是尝试对旧字符串进行变异(这是不可能的),然后用c=...代替newstr += ...。在

或者像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"))

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

^{pr2}$

或者

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

(评论中的链接指向之前的答案有更多。)

正如我在评论中所解释的,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

相关问题 更多 >

    热门问题