Python TypeError:尝试使用素数列表时,int对象不可编辑

Python TypeError:尝试使用素数列表时,int对象不可编辑,python,Python,因此,我一直在编写一个函数,使用随机生成的素数生成一个键作为元组,当我尝试运行代码时,它会生成错误 PS C:\Users\cinna\workspace\project4>py rsa.py S 回溯(最近一次呼叫最后一次): 文件“C:\Users\cinna\workspace\project4\rsa.py”,第104行,在 _main() 文件“C:\Users\cinna\workspace\project4\rsa.py”,第91行,在_main中 n、 e,d=键根(25100)

因此,我一直在编写一个函数,使用随机生成的素数生成一个键作为元组,当我尝试运行代码时,它会生成错误

PS C:\Users\cinna\workspace\project4>py rsa.py S
回溯(最近一次呼叫最后一次):
文件“C:\Users\cinna\workspace\project4\rsa.py”,第104行,在
_main()
文件“C:\Users\cinna\workspace\project4\rsa.py”,第91行,在_main中
n、 e,d=键根(25100)
文件“C:\Users\cinna\workspace\project4\rsa.py”,第10行,在keygen中
素数=_素数(低,高)
文件“C:\Users\cinna\workspace\project4\rsa.py”,第69行,在\u primes中
素数+=p
TypeError:“int”对象不可编辑
编辑:这是我的keygen()、_primes()和main()代码。谢谢你的耐心,还在学习礼仪

def keygen(lo, hi):
    primes = _primes(lo, hi)
    for i in range(lo, hi):
        if _primes(i):
            ptemp = stdrandom.uniformInt(0, len(primes))
            qtemp = stdrandom.uniformInt(0, len(primes))
            p = primes[ptemp]
            q = primes[qtemp]
            n = p * q
            m = (p - 1) * (q - 1)
            while True:
                e = stdrandom.uniformInt(2, m)
                if e % m == 0 and m % e != 0:
                    break
            d = 0
            for a in range(1, m):
                if (e * a) % m == 1:
                    d = a
                    break
    return n, e, d

def _primes(lo, hi):
    primes = []
    for p in range(lo, hi + 1):
        j = 2
        f = 1
        while(j * j <= p):
            if(p % j == 0):
                f = 0
                break
            j = j + 1
        if(f == 1):
            primes += p
    return primes

def _main():
    x = ord(sys.argv[1])
    n, e, d = keygen(25, 100)
    encrypted = encrypt(x, n, e)
    stdio.writef('encrypt(%c) = %d\n', x, encrypted)
    decrypted = decrypt(encrypted, n, d)
    stdio.writef('decrypt(%d) = %c\n', encrypted, decrypted)
    width = bitLength(x)
    stdio.writef('bitLength(%d) = %d\n', x, width)
    xBinary = dec2bin(x, width)
    stdio.writef('dec2bin(%d) = %s\n', x, xBinary)
    stdio.writef('bin2dec(%s) = %d\n', xBinary, bin2dec(xBinary))


if __name__ == '__main__':
    _main()
def keygen(低、高): 素数=_素数(低,高) 对于范围内的i(lo,hi): 如果_素数(i): ptemp=stdrandom.均匀(0,len(素数)) qtemp=stdrandom.uniformant(0,len(素数)) p=素数[ptemp] q=素数[qtemp] n=p*q m=(p-1)*(q-1) 尽管如此: e=标准均相(2,m) 如果e%m==0且m%e!=0: 打破 d=0 对于范围(1,m)内的a: 如果(e*a)%m==1: d=a 打破 返回n,e,d def_素数(低、高): 素数=[] 对于范围内的p(低、高+1): j=2 f=1
而(j*j问题是这个表达式:
primes+=p
您可以使用该运算符,但其工作原理如下:

[1,2,3,4] = [1,2,3,4] + x

现在x必须是一个列表,这样这个表达式才能工作。它只是将列表连接在一起。

您试图将
int
附加到
列表
,这是非法的。您可以将
列表
附加到
列表
。尝试执行
primes+=[p]
primes.append(p)

发布代码的屏幕截图是不被接受的,因为这使得任何人都很难在他们的机器上运行代码进行测试。你能把你的代码修改成一个最小的工作示例并编辑你的帖子吗?例如,我看不到
\u primes
功能,因此无法有效地调试。
primes
是一个列表和
p
是一个整数…你是说
primes.append(p)
?@Tomerikoo我被建议不要使用'primes.append(p)“因为这比我们正在研究的要早,但如果这有助于解决这个问题,我会尝试。你说这是什么意思?这是向列表中添加元素的最基本方法……如果你正在使用列表,而没有了解
append
,这对我来说似乎是一个糟糕的过程。”。。。
[1,2,3,4] = [1,2,3,4] + x