我目前正在制作一个加密文件,应该使用一个用户密钥和一个用户输入,并像一个凯撒密码一样处理它,只是它将每个字母后的密钥乘以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)
我不确定为什么会发生此错误,我查看了我的代码,没有发现任何错误。 感谢您的帮助
答案 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)
我不确定我是否按照您的意愿去做,如果我犯了一个错误,请让我知道我会做到的,以便它做任何事情。