我有一个程序来检查五个数字是否是素数,但它不能正常工作

2024-09-23 22:17:35 发布

您现在位置:Python中文网/ 问答频道 /正文

我试图创建一个程序,从用户的2个数字,并使用不同的线程来测试每一个,这是我到目前为止,我知道我是一个很好的一点,但我发现这个线程的东西非常困难

#!/usr/bin/python

import threading 

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

  def run(self): 
    counter = 2 
    while counter*counter < self.Number: 
      if self.Number % counter == 0: 
       print "%d is no prime number, because %d = %d * %d" % ( self.Number,      self.Number, counter, self.Number / counter) 
         return 
         counter += 1 
         print "%d is a prime number" % self.Number
threads = [] 
while True: 
input1 = long(raw_input("Enter first number: ")) 
if input < 1: 
    break 

thread1 = PrimeNumber(input1) 
threads += [thread1] 
thread1.start() 

input2 = long(raw_input("Enter second number: ")) 
if input < 1: 
    break 

thread2 = PrimeNumber(input2) 
threads += [thread2] 
thread2.start() 


for x in threads: 
x.join()

Tags: selfnumberinputifinitdefcounter线程
1条回答
网友
1楼 · 发布于 2024-09-23 22:17:35

我对你的代码做了一些修改。你知道吗

  1. 第二个输入也需要while循环。break在循环之外没有意义。你知道吗
  2. 我将input1 < 1input1 > 1的两种情况都翻转过来,因为您希望在有有效输入时退出循环,而不是在有无效输入时退出循环。你知道吗
  3. 我在第一个while循环中正确地缩进了代码。你知道吗
  4. 我将<thread>.start行移到for循环。你知道吗

这就是现在的样子:

import threading 

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

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

threads = [] 
while True: 
    input1 = long(raw_input("Enter first number: ")) 
    if input1 > 1: 
        break 

thread1 = PrimeNumber(input1) 
threads += [thread1] 

while True:
    input2 = long(raw_input("Enter second number: ")) 
    if input2 > 1: 
        break 

thread2 = PrimeNumber(input2) 
threads += [thread2] 


for x in threads:
    x.start()
    x.join()

你在题名中说你要查五个数字。与其复制获取输入的特定代码段并为其再创建三次线程,不如将其放入for循环中,如下所示:

threads = []
for i in range(5):
    while True: 
        inputNum = long(raw_input("Enter first number: ")) 
        if inputNum > 1: 
            break 

    thread = PrimeNumber(inputNum) 
    threads += [thread] 

相关问题 更多 >