我为一个执行单个字符解密的函数编写了代码。我收到此错误消息:'int'对象不可调用,但我不知道这是指哪个对象以及我是如何非法调用的。我做错了什么?感谢。
def affine_cipher_decryption(ch,N,alphabet):
M = len(alphabet)
A = get_smallest_co_prime(M)
A_inverse = multiplicative_inverse(A,M)
counter = -1
for element in alphabet:
if element == ch:
counter += 1
index = counter
break
else:
counter += 1
cipher_index = A_inverse(index-N) % M
cipher_ch = alphabet[cipher_index]
return cipher_ch
以下是错误追溯消息:
追踪(最近一次呼叫最后一次):
文件“”,第1行,in runfile('/ Users / brandononeil / Documents / SS18proj04.py',wdir ='/ Users / brandononeil / Documents')
文件 “/anaconda/lib/python3.6/site-packages/spyder/utils/site/sitecustomize.py” 第880行,在runfile中 execfile(filename,namespace)
文件 “/anaconda/lib/python3.6/site-packages/spyder/utils/site/sitecustomize.py” 第102行,在execfile中 exec(compile(f.read(),filename,'exec'),namespace)
文件“/Users/brandononeil/Documents/SS18proj04.py”,第161行, main()的
文件“/Users/brandononeil/Documents/SS18proj04.py”,第148行, 主要 decr_ch1 = affine_cipher_decryption(ch,rotation,ALPHA_NUM)
文件“/Users/brandononeil/Documents/SS18proj04.py”,第101行,在 affine_cipher_decryption cipher_index = multiplicative_inverse(A,M)(index-N)%M
TypeError:'int'对象不可调用
此外,以下是multiplicative_inverse
:
def multiplicative_inverse(A,M):
for x in range(M):
if (A*x)%M == 1:
return x
我已经尝试重命名A_inverse
,我尝试在multiplicative_inverse
内编写affine_cipher_decryption
函数的内容(所以我不必调用{{1}无效。
关于还有什么可能是错误的任何想法?
答案 0 :(得分:2)
你的问题是这两行:
A_inverse
multiplicative_inverse
设置为int
的结果,我假设它返回A_inverse
。第二行尝试调用名为'?'.ord
的函数,但局部变量会影响范围中的函数。
您可以通过重命名局部变量或函数来修复它。