2017-05-31 32 views
1

我是一個Python新手,所以我很抱歉,如果答案很明顯,我忘了一些簡單的東西。Python - 計數Prime因素

我試圖計算一個素數的因子數量,以便它能夠打印出:「它有X個因子」,但我在磚牆上跑 - 我不知道如何或最好方法來計算以前生成的列表的數量。

我也對我的素數確定部分感到困惑。它一般運作良好,但是當我輸入像15,25,35等數字時,這一切都會回來,因爲當數字不是時,這個數字是最好的。它不是所有5的倍數。

所有幫助表示讚賞!

我的代碼:

# Main Program 

def main(): 
choice = "y" 
while choice.lower() == "y": 
     print ("Prime Number Checker") 
     print() 
     is_prime() 
     print() 
     choice = input("Try Again (y/n)?: ") 
choice = "n" 
while choice.lower() == "n": 
     break 

# Prime number determination and Output 

def is_prime(): 
     num = int(input("Please enter an integer between 1 and 5,000: ")) 
     if num > 1: 
      for i in range (2, num): 
       if (num % i) != 0: 
          print() 
          print ("The factors of your number are:") 
          factors (num) 
          print (num, "is a Prime Number") 
          break 
       elif (num % i) == 0: 
          print() 
          print ("The factors of your number are:") 
          factors (num) 
          print (num, "is NOT a Prime Number") 
          numfacs (num) 
          break 
     else: 
      print() 
      print ("Number not in range.") 
      print() 

# Factor Determination and Output 

def factors(num): 
for i in range (1, num+1): 
     if (num % i == 0): 
      print (i) 

# Number of Facotors and Output 

def numfacs(num): 
for i in range (1, num+1): 
     if (num % i == 0): 
      list = [] 
      print ("Length: ", len(list)) 
      break 

if __name__ == "__main__": 
main() 

回答

0

您的問題是,因爲發生的事情,如果數字您評估(如15)不通過的for循環(在這種情況下,2號)的第一個元素整除,那麼它將被評估爲質數。 要解決這個問題,您可以在循環運行時添加標記標記(如果數字爲素數)。如果它停止素數(如果可以將它除以另一個數字),那麼標誌變爲False。

貝婁是我所說的一個實例。如果你不明白的話請說出來。

# Main Program 

def main(): 
choice = "y" 
while choice.lower() == "y": 
     print ("Prime Number Checker") 
     print() 
     is_prime() 
     print() 
     choice = input("Try Again (y/n)?: ") 
choice = "n" 
while choice.lower() == "n": 
     break 

# Prime number determination and Output 

def is_prime(): 
    flag=False 
    num = int(input("Please enter an integer between 1 and 5,000: ")) 
    if num > 1: 
     for i in range (2, num): 
      if (num % i) != 0: 
       flag=True 
      elif (num % i) == 0: 
       flag=False 
       print() 
       print ("The factors of your number are:") 
       factors (num) 
       print (num, "is NOT a Prime Number") 
       numfacs (num) 
       break 
     if flag == True : 
      print(num,i,num % i) 
      print() 
      print ("The factors of your number are:") 
      factors (num) 
      print (num, "is a Prime Number") 
    else: 
     print() 
     print ("Number not in range.") 
     print() 

# Factor Determination and Output 

def factors(num): 
for i in range (1, num+1): 
     if (num % i == 0): 
      print (i) 

# Number of Facotors and Output 

def numfacs(num): 
for i in range (1, num+1): 
     if (num % i == 0): 
      list = [] 
      print ("Length: ", len(list)) 
      break 

main() 

注:此行不會在Python版本3.0吼叫工作:

choice = input("Try Again (y/n)?: ") 

而是使用此:

choice = str(raw_input("Try Again (y/n)?: ")) 
+0

謝謝你,這有助於! – user8091984

+0

沒問題:)如果你還需要什麼,請說出來。如果此答案解決了您的問題,請將其標記爲已接受! ;) –