- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在制作凯撒密码,当我运行代码时出现索引错误。当消息只有几个字母时,它会起作用并对其进行加密,但是当我输入超过十个单词时,它会给我一个索引错误。
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_alphabet
,encrypted_alphabet
就变成了 ['Y','Z']
。但您还想要附加到 encrypted_alphabet
末尾的字母表的其余部分。
简单地说,encrypted_alphabet
和 alphabet
的长度不匹配。
您可以非常简单地纠正它
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/
您好,我正在研究这个 Caesar 密码解密器,它采用加密字符串并使用所有 key 对其进行解密(如果它们与另一条消息相似,则另一个函数将匹配它们)。我有 Decipher 函数,但我只是想知道是否有
我正在研究 cs50 类(class)中的 pset2,但我不明白为什么我一直收到这个我没有声明的错误,因为我想我做了。首先我要求一个数字用作一个用于加密的 key ,而不是我要求的纯文本,它应该用给
关闭。这个问题需要更多focused .它目前不接受答案。 想改进这个问题吗? 更新问题,使其只关注一个问题 editing this post . 关闭 6 年前。 Improve this qu
我一直在尝试解决 cs50 的凯撒问题的不太舒服的版本,并且只想在这个问题之前说我是一个完全的初学者。 该程序应该要求用户输入 key 和明文,然后使用提供的 key 对该文本进行加密。例如,对于 k
在下面的代码中,根据放置 'Printf("Ciphertext: )' 语句的位置,我得到不同的输出,我无法理解为什么。有人可以指出我缺少什么吗?下面你可以找到代码,以及输出(粗体变量部分)。 #i
来 self 的 caesar.c 文件的代码 #include #include #include #include #include int main(int argc, string
我正在尝试用 JS 创建一个 Caesar Cypher。它应该接受一个字符串和一个数字,并将字符串中的每个字母按提供的数字在字母表中移动,然后返回密码字符串。 我写了一些代码,将每个字母更改为它的
我正在尝试创建一个函数 rotate_character(char, rot) 接收一个字符“char”(长度为1的字符串)和一个整数“rot”。该函数应返回一个长度为 1 的新字符串,这是将 cha
对于类(class),我必须用 C++ 开发一个凯撒加密项目,它接收一个字符串,并将所有 ascii 代码移动一个随机整数。我的项目运行完美,代码如下: #include #include #in
我正在编写一个具有 4 个不同函数的程序,其中一个询问用户是否要编码/解码,另一个询问在动态内存中输入字符串、实际解密函数和输出函数。我做了一切,但我遇到的唯一问题是考虑输入的单词中是否有空格。 在我
我用 C 为我的类(class)编写了一个凯撒密码程序,但它似乎没有正确加密。该程序从句子“THE QUICK BROWN FOX JUMPS OVER THE LAZY DOG”中获取输入并使用从键
我在网上搜索了很长时间,寻找一个简单的 C 语言凯撒芯片/加密算法。我找到了一个,但并不完美,所以我已经更改了代码。仍然有问题,因为一位 friend 说该程序也应该能够处理大 key 。例如带有键的
我正在尝试制作 Julius Caesar Cipher 程序,但通过在句子的开头和结尾添加一个随机字母来添加一个扭曲。出于某种原因,当我输入一个长字符串时,打印时字符串的一部分丢失了。我正在使用 p
为什么我的代码不接受不包含字符 a-z A-Z 0-9 的字符串?如果要对此进行加密以转移例如“aaaaa[[[[[[”,我得到一个错误。我想要代码,以便它也可以接受空格或任何内容,并跳过那些不是 a
我正在尝试运行 edx 编程简介中的程序分配 caesar.c。它需要一个能够使用凯撒加密来加密字符串的程序:因此,用户必须输入 key (命令行);例如, key 为 2 时,“A”字符需要用“C”
我正在创建一个凯撒密码,我正在尝试弄清楚如何让它同时处理大写和小写字母。例如,如果我输入“Hello World”,我希望它以相同的格式“Ifmmp Xpsme”进行加密。 using System;
我正在做一个凯撒密码。尝试将字符串中的所有字符替换为移位字母表中的某个字符。 这是我到目前为止的代码 public static String caesarify(String str, int
我完全是 C++ 的初学者,到目前为止,在学校里我们只学习和使用过 Java。我们今年的第一个项目是创建一个凯撒密码,但我们必须使用我们教授提供的头文件。在这一点上,我只是试图在编码加密和解密方法之前
所以目前,我的代码看起来像这样(感谢我在另一篇文章中的帮助) phrase = raw_input("Enter text to Cipher: ") shift = int(raw_input("P
尝试在 C 中创建一个 Caesar Cypher,并在移动字母时从超过 'z' 的小写字母中获得一些麻烦的输出 #include void confab(const char* inText, i
我是一名优秀的程序员,十分优秀!