2017-12-26 9 views
0
import threading 


class PrimeNumber(threading.Thread): 
    def __init__(self, number): 
    threading.Thread.__init__(self) 
    self.Number = int(number) 

    def run(self): 
    counter = 2 
    while counter*counter <= self.Number: 
     if self.Number % counter == 0: 
      promptLock.acquire() 
      if(prompt):print() 
      print("%d is not prime number" % (self.Number)) 
      if(prompt):print("number: ",end="") 
      promptLock.release() 
      return 
     counter += 1 
    promptLock.acquire() 
    if(prompt): print() 
    print ("%d is a prime number" % self.Number) 

    #strange line 
    debug_line = 1 
    if(debug_line==1): 
     if(prompt):print("number: ",end="") 
    if(debug_line==2): 
     if(prompt):print("number: ") 

    promptLock.release() 

threads = [] 
prompt=False 
promptLock = threading.Lock() 

def promptlocker(): 
    global prompt 
    promptLock.acquire() 
    prompt = not prompt 
    promptLock.release() 


while True: 
    promptlocker() 
    print("number: ",end="") 
    input1 = int(input()) 
    promptlocker() 
    if input1 < 1: 
     break 
    thread = PrimeNumber(input1) 
    threads += [thread] 
    thread.start() 

for x in threads: 
    x.join() 

を働いていない私は、入力1000000099999963を与え、その後55
場合は、最初の入力が長いと時間 を消費しているように、それはで計算されます新しいスレッドを作成し、新しい入力を求めるプロンプトが表示され、新しい入力を追加することができます。計算が簡単な場合は、簡単に計算して印刷できます。 そして、大きな数を計算するスレッドが終了すると、その出力が出力されます。
コードがのプロンプトを表示している場合は、となります。を入力してもう一度「番号:」を印刷します。
私は出力が
印刷機能は、私がのpython3 <br/> にスレッドをテストするには、このコードを使用していますのpython3で

number: 1000000099999963 
number: 55 
55 is not prime number 
number: 
1000000099999963 is a prime number 
number: 

になりたいけどdebug_lineが1に設定されているときに出力が

number: 1000000099999963 
number: 55 
55 is not prime number 
number: 
1000000099999963 is a prime number 

で、ライン

if(prompt):print("number: ",end="") 

に動作していない理由を知りません

debug_lineを2に設定すると、動作します

if(prompt):print("number: ") 

答えて

0

どのようなエラーが表示されますか?

私はここでPython2.7 で動作するようにコードを変更するには、私のコードです:

import threading 


class PrimeNumber(threading.Thread): 
    def __init__(self, number): 
    threading.Thread.__init__(self) 
    self.Number = int(number) 

    def run(self): 
    counter = 2 
    while counter*counter <= self.Number: 
     if self.Number % counter == 0: 
      promptLock.acquire() 
      if(prompt):print() 
      print("%d is not prime number" % (self.Number)) 
      if(prompt): 
       print "number: ", 
      promptLock.release() 
      return 
     counter += 1 
    promptLock.acquire() 
    if(prompt): print() 
    print ("%d is a prime number" % self.Number) 

    #strange line 
    debug_line = 1 
    if(debug_line==1): 
     if(prompt):print "number: ", 
    if(debug_line==2): 
     if(prompt):print "number: ", 

    promptLock.release() 

threads = [] 
prompt=False 
promptLock = threading.Lock() 

def promptlocker(): 
    global prompt 
    promptLock.acquire() 
    prompt = not prompt 
    promptLock.release() 


while True: 
    promptlocker() 
    print "number: ", 
    input1 = int(input()) 
    promptlocker() 
    if input1 < 1: 
     break 
    thread = PrimeNumber(input1) 
    threads += [thread] 
    thread.start() 

for x in threads: 
    x.join() 

マイ出力:

number: 1000000099999963 
number: 55 
55 is not prime number 
number: () 
1000000099999963 is a prime number 
number: 

あなたはその後、print文での問題に直面している場合あなたのpythonのバージョンをチェックしたいかもしれません。

if(prompt):print("number: ",end="") 

上記の行はPython2でSyntaxErrorを発生させます。これはのみのpython3 にPython2で同等のコードをサポートしていますです:

if(prompt):print "number: ", 

バージョンが問題ではない場合、あなたは、このエラーに Inconsistent use of tabs and spaces in indentation

をチェックしたいかもしれません
関連する問題