caesar密码对象不支持赋值python

时间:2017-01-06 20:21:01

标签: python algorithm

编写一个接受整数offset和字符串的方法。  生成一个新字符串,其中每个字母都移动offset。您  可以假设该字符串仅包含小写字母和  空格。

def caesar_cipher(offset, string):
    words = string.split(" ")

    word_i = 0 
    while word_i < len(words): 
        word = words[word_i]

        letter_i = 0 
        while letter_i < len(word):
            char_i = ord(word[letter_i]) - ord("a")

            new_char_i = (char_i + offset) % 26 
            word[letter_i] = chr(ord("a") + new_char_i) #----error is at this line ----

            letter_i += 1
        word_i += 1 
    return words.join(" ")
print caesar_cipher(3, "abc")

print应返回def。

想知道如何修复此str分配错误,谢谢!

1 个答案:

答案 0 :(得分:0)

字符串是不可变的。

a = "hello"
a[1] = 'q'

..导致此错误:

TypeError: 'str' object does not support item assignment

更好的方法是从替换字母中建立新的1个字符的字符串列表。在惯用的Pythonic中,这将是list comprehension,但for循环也可以正常工作。

最后,将它们加入到这样的新字符串中:

''.join(cipher_chars)