我不太明白为什么下面的python代码出现值错误。我知道(大部分情况下)这是在告诉我,在我传递的任何内容中都找不到价值,但我并不真正理解为什么。
from string import ascii_lowercase
from math import gcd
lower = ascii_lowercase
def affineDecrypt(ciphertext, a, b):
if gcd(a, 26) != 1:
raise ValueError('a and 26 are not coprime. Please try again.')
msg = ''.join(x for x in ciphertext if x.isalnum())
out = ''
n = 1
count = 1
while True:
if a*n > 26*count:
if a*n == (26*count) + 1:
break
count += 1
n += 1
for char in msg:
if char.isalpha():
d = int((n*(lower.index(char) - b)) % 26)
out += lower[d]
else:
out += char
return out
Error:
ValueError Traceback (most recent call last)
<ipython-input-32-8c8ae6f51f75> in <module>
----> 1 affineDecrypt('UBBAHK CAPJKX',17,20)
<ipython-input-31-215f26339a67> in affineDecrypt(ciphertext, a, b)
23 for char in msg:
24 if char.isalpha():
---> 25 d = int((n*(lower.index(char) - b)) % 26)
26 out += lower[d]
27
ValueError: substring not found
帮助?
答案 0 :(得分:0)
您正在lower
变量中寻找大写字母'U'的索引,该变量是全小写的字符串。
将char
强制转换为小写:
d = int((n*(lower.index(char.lower()) - b)) % 26)
你应该没事。
此外,将lower
变量名称更改为其他名称。有一个使用该名称的字符串方法。