gpt4 book ai didi

python - 类型错误: 'instancemethod' 对象不可迭代(Python)

转载 作者:太空宇宙 更新时间:2023-11-04 07:33:53 24 4
gpt4 key购买 nike

我对 python 和线程还很陌生。我正在尝试编写一个使用线程和队列的程序,以便使用凯撒密码加密 txt 文件。当我单独使用加密函数时,它本身运行良好,但在我的程序中使用它时出现错误。错误从这一行开始:

for c in plaintext:

这里是完整的代码:

import threading
import sys
import Queue

#argumanlarin alinmasi
if len(sys.argv)!=4:
print("Duzgun giriniz: '<filename>.py s n l'")
sys.exit(0)
else:
s=int(sys.argv[1])
n=int(sys.argv[2])
l=int(sys.argv[3])

#Global
index = 0

#caesar sifreleme


#kuyruk deklarasyonu
q1 = Queue.Queue(n)
q2 = Queue.Queue(2000)


lock = threading.Lock()

#Threadler
threads=[]

#dosyayi okuyarak stringe cevirme
myfile=open('metin.txt','r')
data=myfile.read()


def caesar(plaintext, key):
L2I = dict(zip("ABCDEFGHIJKLMNOPQRSTUVWXYZ", range(26)))
I2L = dict(zip(range(26), "ABCDEFGHIJKLMNOPQRSTUVWXYZ"))

ciphertext = ""
for c in plaintext:
if c.isalpha():
ciphertext += I2L[(L2I[c] + key) % 26]
else:
ciphertext += c
return ciphertext

#Thread tanimlamasi
class WorkingThread(threading.Thread):
def __init__(self):
threading.Thread.__init__(self)

def run(self):
lock.acquire()
q2.put(caesar(q1.get, s))
lock.release()

for i in range(0,n):
current_thread = WorkingThread()
current_thread.start()
threads.append(current_thread)

output_file=open("crypted"+ "_"+ str(s)+"_"+str(n)+"_"+str(l)+".txt", "w")

for i in range(0,len(data),l):
while not q1.full:
q1.put(data[index:index+l])
index+=l
while not q2.empty:
output_file.write(q2.get)

for i in range(0,n):
threads[i].join()

output_file.close()
myfile.close()

非常感谢任何帮助,在此先感谢。

最佳答案

在您的代码中,您使用的是函数对象 q1.getq2.get。而是用括号调用它:

q1.get()

将从 Queue 中获取值.

根据 Queue.get() document :

Remove and return an item from the queue. If optional args block is true and timeout is None (the default), block if necessary until an item is available.

关于python - 类型错误: 'instancemethod' 对象不可迭代(Python),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40854861/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com