gpt4 book ai didi

python - 索引错误: list index out of range for the caesar cipher

转载 作者:行者123 更新时间:2023-12-01 04:01:18 32 4
gpt4 key购买 nike

我正在制作凯撒密码,当我运行代码时出现索引错误。当消息只有几个字母时,它会起作用并对其进行加密,但是当我输入超过十个单词时,它会给我一个索引错误。

shift_key = int(raw_input("Enter in your key shift: 1-9\n>>> "))

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']
encrypted_alphabet = []
encrypted_message = ''

for i in alphabet[shift_key:]:
encrypted_alphabet.append(i)

input = raw_input("Enter text to be decoded\n>>> ").upper()
input = input.split()

for i in input:
for j in i:
index = alphabet.index(j)
encrypted_message += encrypted_alphabet[index]
encrypted_message += ' '
print encrypted_message

最佳答案

问题出在这两行:

for i in alphabet[shift_key:]:
encrypted_alphabet.append(i)

请注意,执行alphabet[shift_key:] 切片列表alphabet仅获取从shift_key开始的元素>。

换句话说,例如,如果 shift_key 为 25,则 alphabet[shift_key:] 仅返回 ['Y','Z']。由于您将这些附加到 encrypted_alphabetencrypted_alphabet 就变成了 ['Y','Z']。但您还想要附加到 encrypted_alphabet 末尾的字母表的其余部分。

简单地说,encrypted_alphabetalphabet长度不匹配。

您可以非常简单地纠正它

for i in alphabet[shift_key:] + alphabet[:shift_key]:
encrypted_alphabet.append(i)

或者(更简单)

encrypted_alphabet = alphabet[shift_key:] + alphabet[:shift_key]
<小时/>

但是,如果您想知道执行此操作的正确方法,请使用内置字符串方法 maketrans相反,这要简单得多:

import string

shift_key = int(raw_input("Enter in your key shift: 1-9\n>>> "))

alphabet = string.ascii_uppercase
encrypted_alphabet = alphabet[shift_key:] + alphabet[:shift_key]
caesar = string.maketrans(alphabet,encrypted_alphabet)
input = raw_input("Enter text to be decoded\n>>> ").upper()

print(input.translate(caesar))

快速解释

如代码所示,maketrans 在两个字符串之间创建一个转换表,将第一个字符串中的每个字符映射到另一个字符串。然后,您可以将此翻译表输入到每个字符串都有的 .translate() 方法中。

关于python - 索引错误: list index out of range for the caesar cipher,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36457123/

32 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com