from caesar import Caesar
from string import ascii_lowercase as lc, ascii_uppercase as uc
class Vigenere:
def __init__(self, key: str):
self.key = key
self.ignore_chrs = ".,:;!?'- "
def encode(self, text: str) -> str:
if len(self.key) > len(text):
text += text[:len(self.key)-len(text)]
elif len(text) > len(self.key):
self.key += self.key[:len(text)-len(self.key)]
else:
assert len(self.key) == len(text)
enc_txt = ""
for _chr in text:
if _chr in self.ignore_chrs:
enc_chr = _chr
elif _chr.islower():
caesar = Caesar(shift=lc.index(self.key[text.index(_chr)]))
enc_chr = caesar.encode(_chr)
else:
caesar = Caesar(shift=uc.index(self.key[text.index(_chr)]))
enc_chr = caesar.encode(_chr)
enc_txt += enc_chr
return enc_txt
我使用了Caesar(在这段代码中没有错误或bug。)加密来加密Vigenere加密。但运行代码时会出现“ValueError:substring not found”错误。每封信我都叫“凯撒”班。我能一次叫“凯撒”班来操作所有这些代码吗?如果我能呢
…\Desktop\Python Projects\vigenere.py”,第25行,编码 caesar=caesar(shift=uc.index(self.key[text.index(_chr)]) ValueError:未找到子字符串 在这里,我得到了完整的追踪
从字符串(https://docs.python.org/3/library/stdtypes.html#common-sequence-operations)上的文档:
因为我们不能根据你给出的告诉你
text
、_chr
或key
的值,所以我们只能告诉你这么多。要对此进行调试,您可以使用简单的print()
语句打印出上述值,并找出哪个值不正确使代码更健壮的另一个选项是更改
if
块。您有一个else
块,它实际上不是一个“else
”,因为它处理大写字母。考虑以下事项:相关问题 更多 >
编程相关推荐