[英]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.