获取价值错误,不明白为什么

时间:2019-10-08 19:46:22

标签: python string

我不太明白为什么下面的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

帮助?

1 个答案:

答案 0 :(得分:0)

您正在lower变量中寻找大写字母'U'的索引,该变量是全小写的字符串。

char强制转换为小写:

d = int((n*(lower.index(char.lower()) - b)) % 26)

你应该没事。

此外,将lower变量名称更改为其他名称。有一个使用该名称的字符串方法。