TypeError:不支持使用np.mod的%的操作数类型:'list'和'int'

2024-04-23 06:28:03 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个错误:

File "C:\Users\dimak\PycharmProjects\HelloWorld\kl.py", line 13, in encryptAffine linearNumericEncryptedWordArray = np.mod(keyMatrix.dot(X), 33) TypeError: unsupported operand type(s) for %: 'list' and 'int' and i really dont know how to fix this.

import numpy as np
def encryptAffine(keyMatrix, keyVector, inputWord, alphabet, alphabetReversed):
    encodeWordToNumberic = []
    for char in inputWord:
        encodeWordToNumberic.append(alphabet[char])

        numericWordArray = []
        numericWordArray.append(encodeWordToNumberic[::2])
        numericWordArray.append(encodeWordToNumberic[1::2])
        X = np.array(numericWordArray, dtype="object")

        linearNumericEncryptedWordArray = np.mod(keyMatrix.dot(X), 33)

        affineNumericEncryptedWordArray = np.mod(np.add(linearNumericEncryptedWordArray, keyVector), 33)
        print(affineNumericEncryptedWordArray.T)
        encryptedWord = ''
        for i in affineNumericEncryptedWordArray.T:
            for j in i:
                encryptedWord += alphabetReversed[j]

    return encryptedWord

和字母表的主要功能:

def main():
    alphabet = {'а': 0, 'б': 1, 'в': 2, 'г': 3, 'ґ': 4, 'д': 5, 'е': 6, 'є': 7, 'ж': 8, 'з': 9, 'и': 10, 'і': 11,
                'ї': 12, 'й': 13, 'к': 14, 'л': 15, 'м': 16, 'н': 17, 'о': 18, 'п': 19, 'р': 20, 'с': 21, 'т': 22,
                'у': 23, 'ф': 24, 'х': 25, 'ц': 26, 'ч': 27, 'ш': 28, 'щ': 29, 'ь': 30, 'ю': 31, 'я': 32}

    alphabetReversed = dict((v, k) for k, v in alphabet.items())

    A = np.array([[16, 16], [27, 31]])
    S = np.array([[2], [4]])
    word = 'перетворення'

    outputWord = encryptAffine(A, S, word, alphabet, alphabetReversed)

    print("Вхідне слово: {}\nЗашифроване слово: {}".format(word, outputWord))
if __name__ == "__main__":
    main()

Tags: inmodfornparrayappendalphabetkeymatrix
1条回答
网友
1楼 · 发布于 2024-04-23 06:28:03

您正试图将np.mod与第一个元素一起用作列表。这是不受支持的。相反,您需要将列表中的每个元素传递到mod函数中,然后创建一个列表

你可以这样做

linearNumericEncryptedWordArray = [np.mod(x, 33) for x in keyMatrix.dot(X)]

请注意,您可能还需要在下一行中执行此操作

相关问题 更多 >