簡體   English   中英

通過兩個不同長度的不同字符串對齊?

[英]Align through two different strings of different lengths?

如果我有兩個像這樣的字符串:

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”的長度相同,因此它可以同時遍歷兩個"hi" --> "hihih"而不會碰到外面范圍誤差

如果你希望你的短key串環繞,索引時使用的模數:

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

另一種方法是使用itertools.cycle生成一個迭代器,該迭代器在您對其進行迭代時將永遠重復key的值。 然后,您可以使用zip將其與plaintext結合(與使用索引相比,結合兩個序列的Python方式更豐富)。 這是一個在生成器表達式中進行整個加密的版本:

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))

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM