打印功能在python3中不起作用

问题描述 投票:1回答:1
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()

我正在使用此代码来测试python3中的线程 如果我输入输入1000000099999963然后输入55 因为第一个输入是冗长且耗时的,所以它将在新线程中计算,然后会有提示要求新输入,然后我们可以添加新输入,如果它更容易计算,那么它很容易计算并打印。然后当完成计算大数的线程时,它将打印其输出。 所以现在我想要,如果代码要求一个数字,即提示为真,那么我想再次打印“数字:”。 我希望输出

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

但输出是

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

当debug_line设置为1时,不知道为什么行

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

不管用

如果我将debug_line设置为2,那么该行将起作用

if(prompt):print("number: ")
python-3.x debugging python-multithreading
1个回答
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

© www.soinside.com 2019 - 2024. All rights reserved.