我正试图为一个类项目创建一个简单的caesarcypher,但是我无法通过创建Cypher密钥。到目前为止,我已经:
import sys
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','']
def main(text, key):
print("Encoding message '", text,"'with key",key)
ALPHABET = generate_cypher(key)
def generate_cypher(ckey):
cypher = []
for i in ALPHABET:
x = ALPHABET[i] + ckey
cypher = cypher + x
return cypher
main(sys.argv[1], int(sys.argv[2])
我经常会遇到这样的错误: TypeError:列表索引必须是整数,而不是str
行
for i in ALPHABET
在ALPHABET
中的元素上迭代,而不是在索引上迭代。所以它是'a'、'b'、'c'等等。如果您想在索引上迭代,您需要使用for i in range(len(ALPHABET))
。你知道吗错误告诉您
ALPHABET[i]
失败,因为i
不是整数。在本例中,第一次迭代是字母a
,因此它尝试执行ALPHABET['a']
,但这将不起作用并返回错误。这就是为什么需要迭代索引而不是元素。你知道吗假设ckey是cypher偏移量的整数,您可以使用以下代码修复代码:
归功于@AChampion的一个关于索引长度的小技巧
注意,我添加了一些逻辑来修复迭代结束时索引将超出列表可用索引的情况。在这一点上,密码需要绕到开头,因此模的必要性确保索引永远不会大于字母表的大小。你知道吗
相关问题 更多 >
编程相关推荐