通过两个不同长度的不同字符串对齐?

时间:2015-10-18 19:50:08

标签: python string loops

如果我有两个字符串,如:

plaintext = "hello"
key = "hi"

如何在不超出范围的情况下将字母(或空格和标点符号等其他字符)对齐在一起?到目前为止,我正在这样做,但我继续遇到索引错误的字符串。

encryption = ""
for index in range(len(plaintext)):
    if plaintext[index] in alphabet:
        encryption += vigenere_encrypt(plaintext[index], key[index])
    if plaintext[index] not in alphabet:
        encryption += plaintext[index]
return encryption

我基本上是想让我的密钥与明文的长度相匹配,所以"hi" --> "hihih" 它与“hello”的长度相同,因此它可以同时循环两个而不会超出范围错误

1 个答案:

答案 0 :(得分:1)

如果您希望缩短key字符串,请在索引时使用模数:

encryption += vigenere_encrypt(plaintext[index], key[index % len(key)])

另一种方法是使用itertools.cycle创建一个迭代器,在迭代它时永远重复key的值。然后,您可以使用plaintext将其与zip结合使用(比使用索引更多Pythonic组合两个序列的方式)。这是一个在生成器表达式中执行整个加密的版本:

import itertools

encryption = "".join(vigenere_encrypt(plain_char, key_char)
                         if plain_char in alphabet else plain_char
                     for plain_char, key_char in zip(plaintext, itertools.cycle(key))