在Python3.4中将列表的一部分从字符串转换为整数

2024-10-01 07:36:35 发布

您现在位置:Python中文网/ 问答频道 /正文

我正试图为一个类项目创建一个简单的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


Tags: 项目keytextmaindefsys密钥generate
1条回答
网友
1楼 · 发布于 2024-10-01 07:36:35

for i in ALPHABETALPHABET中的元素上迭代,而不是在索引上迭代。所以它是'a'、'b'、'c'等等。如果您想在索引上迭代,您需要使用for i in range(len(ALPHABET))。你知道吗

错误告诉您ALPHABET[i]失败,因为i不是整数。在本例中,第一次迭代是字母a,因此它尝试执行ALPHABET['a'],但这将不起作用并返回错误。这就是为什么需要迭代索引而不是元素。你知道吗

假设ckey是cypher偏移量的整数,您可以使用以下代码修复代码:

归功于@AChampion的一个关于索引长度的小技巧

def generate_cypher(ckey):
    cypher = []
    for i in range(len(ALPHABET)):
        x = ALPHABET[(i+ckey)%len(ALPHABET)]
        cypher.append(x)
    return cypher

注意,我添加了一些逻辑来修复迭代结束时索引将超出列表可用索引的情况。在这一点上,密码需要绕到开头,因此模的必要性确保索引永远不会大于字母表的大小。你知道吗

相关问题 更多 >