问:python:为什么我的char被视为str?

时间:2017-08-15 09:44:49

标签: python string

我刚开始使用python而且我遇到了一个愚蠢的错误,但我不明白它为什么不能正常工作

def encryption(str1):
    i = 0
    for x in str1:
        if (x >= 'a' and x <= 'z' or x >= 'A' and x <= 'Z'):
            str1[i] = str1[i] + 3 % 26 #str[i] = x + 3 % 26
        i+=1
    return str1

当我执行程序时出现此错误:

  

TypeError:字符串索引必须是整数,而不是str。

有人可以解释为什么str [i] - 23被视为str吗?对我来说,我只是修改了一个字符的ascii值。

1 个答案:

答案 0 :(得分:1)

python中的字符串不是像C中的数组。它们是不可变的,即 你无法对字符串进行更改。你的选择是转 将字符串放入列表(类似于c数组)或创建一个新的空字符串 并将每个加密的字母连接到它上(这可能会更快)。 Ord将字符串转换为ascii数字,chr转换为反向字符串。 如果字符在{a-z A-Z}

中,则isalpha方法测试为true
str1 = 'this is a test string!@#$@#$@'

def encryption(str1):
    new_string = ''
    for character in str1:
        if character.isalpha():
            new_string += chr(ord(character) + 3 % 26)
        else:
            new_string += character
    return new_string

print(encryption(str1))