IndexError:字符串索引超出范围python 3.7

时间:2019-01-30 15:52:40

标签: python-3.x

我目前正在制作一个加密文件,应该使用一个用户密钥和一个用户输入,并像一个凯撒密码一样处理它,只是它将每个字母后的密钥乘以2。经过测试,我遇到了这个错误:

line 40, in <module>
encode("p", 16) line 15, in encode
if decoded_message[place_in_message] == letter:
IndexError: string index out of range`

这是我使用的代码:

import array as arr
alphabet = arr.array('u', ["a", "b", "c", "d", "e", "f", "g", "h", "i", "j", "k", "l", "m", "n", "o", "p", "q", "r", "s", "t", "u", "v", "w", "x", "y", "z"]) 
decoded_message = input("What's your message? ")
amount_of_characters = (len(decoded_message))
key = int(input("What's your key? "))
place_in_message = 0
encoded_message = ""
_ = 0
def encode(letter, letterNum):
    global key
    global place_in_message
    global alphabet
    global decoded_message
    global encoded_message
    if decoded_message[place_in_message] == letter:
        if key + letterNum < 26:
            encoded_message = encoded_message + alphabet[letterNum + key]
            place_in_message = place_in_message + 1
            key = key * 2
        else:
            key = key - 26
            encoded_message = encoded_message + alphabet[letterNum + key]
            place_in_message = place_in_message + 1
for _ in range(amount_of_characters):
    encode("a", 1)
    encode("b", 2)
    encode("c", 3)
    encode("d", 4)
    encode("e", 5)
    encode("f", 6)
    encode("g", 7)
    encode("h", 8)
    encode("i", 9)
    encode("j", 10)
    encode("k", 11)
    encode("l", 12)
    encode("m", 13)
    encode("n", 14)
    encode("o", 15)
    encode("p", 16)
    encode("q", 17)
    encode("r", 18)
    encode("s", 19)
    encode("t", 20)
    encode("u", 21)
    encode("v", 22)
    encode("w", 23)
    encode("x", 24)
    encode("y", 25)
    encode("z", 26)
print(encrypted_message)

我不确定为什么会发生此错误,我查看了我的代码,没有发现任何错误。 感谢您的帮助

1 个答案:

答案 0 :(得分:1)

由于无聊,我将花很多精力,所以首先让我们清理您的代码。 (下面的代码有效)

class MessageEncoder:
    def __init__(self, decoded_message, key):
        self.decoded_message, self.key = decoded_message, key

        self.alphabet = ["a", "b", "c", "d", "e", "f", "g", "h", "i", "j", "k", "l", "m", "n", "o", "p", "q", "r", "s",
                         "t", "u", "v", "w", "x", "y", "z"]
        self.place_in_message = 0
        self.encoded_message = ""

        for c, char in enumerate(self.decoded_message):
            if char == " ":
                c -= 1
                continue
            self.encode(char, c)
        print(self.encoded_message)

    def encode(self, letter, letterNum):
        if self.decoded_message[self.place_in_message] == letter:
            if self.key + letterNum < 26:
                self.encoded_message += self.alphabet[letterNum + self.key]
                self.place_in_message += 1
                self.key *= 2
            else:
                self.key -= 26
                self.encoded_message += self.alphabet[letterNum + self.key]
                self.place_in_message += 1


MessageEncoder("Hello World", 1)

我不确定我是否按照您的意愿去做,如果我犯了一个错误,请让我知道我会做到的,以便它做任何事情。