【问题标题】:print function not working in python3打印功能在python3中不起作用
【发布时间】:2017-12-26 12:22:19
【问题描述】:
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
因为第一次输入既冗长又耗时 所以它将在新线程中计算,直到那时会提示要求新输入,然后我们可以添加新输入,如果更容易计算,那么它很容易计算和打印。 然后当计算大数的线程完成时,它将打印其输出。
所以现在我希望如果代码要求输入一个数字,即 promptTrue 那么我想再次打印“数字:”。
我希望输出为

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】:

    你遇到了什么错误?

    我更改了代码以在 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

    【讨论】:

      猜你喜欢
      • 2013-10-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多