不明白我收到的错误?
Do not understand the error I am receiving?
我有这个函数,我已经大大简化了计算乘法和加法密钥来解密仿射密码的功能,它在某些情况下有效,但在这种情况下它会抛出一个错误,我不确定为什么.这是我的代码:
def InverseMod(a, m):
for i in range(1,m):
if ( m*i + 1) % a == 0:
return ( m*i + 1) // a
return 'These are not co-prime.'
def decryption_keys_affine(p1, p2, C1, C2, AL):
s = InverseMod(p1 - p2, AL) * (C1 - C2)
r = (InverseMod(s, AL) * C2 - p2) % AL
print("INV(S):", InverseMod(s, AL), "\n" + "R:", r)
当我给它这个输入时,它输出正确答案 17 和 26:
>>> decryption_keys_affine(3, 20, 19, 20, 42)
INV(S): 17
R: 26
当我给它这个输入时,它抛出这个错误:
>>> decryption_keys_affine(5, 20, 9, 26, 26)
Traceback (most recent call last):
File "<pyshell#9>", line 1, in <module>
decryption_keys_affine(5, 20, 9, 26, 26)
File "C:\Users\Herman\Desktop\crypto_math_functions.py", line 96, in decryption_keys_affine
r = (InverseMod(s, AL) * C2 - p2) % AL
TypeError: unsupported operand type(s) for -: 'str' and 'int'
它应该输出:
>>> decryption_keys_affine(5, 20, 9, 26, 26)
INV(S): 7
R: 20
在 InverseMod()
中,如果这些计算不是质数 return "A string",你提出了一个条件。所以函数 return 是一个字符串, r
语句变成像
r = ("String" * int - int) % int
哪个不正确
要么return0,要么做一些if
条件来解决
这个函数InverseMod
returns 不同的类型针对不同的情况。如果你没有通过循环中的 if
测试或者循环没有执行,你 return 一个字符串。
def InverseMod(a, m):
for i in range(1,m):
if ( m*i + 1) % a == 0:
return ( m*i + 1) // a
return 'These are not co-prime.'
一般来说,这种行为应该用例外来建模。
如果有,故障模式会更明显。
def InverseMod(a, m):
for i in range(1,m):
if ( m*i + 1) % a == 0:
return ( m*i + 1) // a
raise ValueError('"{}" and "{}" are not co-prime'.format(a, m))
我有这个函数,我已经大大简化了计算乘法和加法密钥来解密仿射密码的功能,它在某些情况下有效,但在这种情况下它会抛出一个错误,我不确定为什么.这是我的代码:
def InverseMod(a, m):
for i in range(1,m):
if ( m*i + 1) % a == 0:
return ( m*i + 1) // a
return 'These are not co-prime.'
def decryption_keys_affine(p1, p2, C1, C2, AL):
s = InverseMod(p1 - p2, AL) * (C1 - C2)
r = (InverseMod(s, AL) * C2 - p2) % AL
print("INV(S):", InverseMod(s, AL), "\n" + "R:", r)
当我给它这个输入时,它输出正确答案 17 和 26:
>>> decryption_keys_affine(3, 20, 19, 20, 42)
INV(S): 17
R: 26
当我给它这个输入时,它抛出这个错误:
>>> decryption_keys_affine(5, 20, 9, 26, 26)
Traceback (most recent call last):
File "<pyshell#9>", line 1, in <module>
decryption_keys_affine(5, 20, 9, 26, 26)
File "C:\Users\Herman\Desktop\crypto_math_functions.py", line 96, in decryption_keys_affine
r = (InverseMod(s, AL) * C2 - p2) % AL
TypeError: unsupported operand type(s) for -: 'str' and 'int'
它应该输出:
>>> decryption_keys_affine(5, 20, 9, 26, 26)
INV(S): 7
R: 20
在 InverseMod()
中,如果这些计算不是质数 return "A string",你提出了一个条件。所以函数 return 是一个字符串, r
语句变成像
r = ("String" * int - int) % int
哪个不正确
要么return0,要么做一些if
条件来解决
这个函数InverseMod
returns 不同的类型针对不同的情况。如果你没有通过循环中的 if
测试或者循环没有执行,你 return 一个字符串。
def InverseMod(a, m):
for i in range(1,m):
if ( m*i + 1) % a == 0:
return ( m*i + 1) // a
return 'These are not co-prime.'
一般来说,这种行为应该用例外来建模。
如果有,故障模式会更明显。
def InverseMod(a, m):
for i in range(1,m):
if ( m*i + 1) % a == 0:
return ( m*i + 1) // a
raise ValueError('"{}" and "{}" are not co-prime'.format(a, m))