2017-05-31 5 views
1

Ich bin ein Python-Neuling, also entschuldige ich mich, wenn die Antwort offensichtlich ist und ich etwas Einfaches nicht beachten.Python - Zählen Prime Faktoren

Ich versuche, die Anzahl der Faktoren einer Primzahl zu zählen, so dass es drucken wird: "Es hat X-Faktoren," aber ich laufe gegen eine Mauer - ich bin mir nicht sicher, wie oder das Beste Möglichkeit, die Anzahl der zuvor generierten Liste zu zählen.

Ich bin auch auf einen Teil meiner Bestimmung der Primzahl verwirrt. Es funktioniert im Allgemeinen gut, aber wenn ich Zahlen wie 15, 25, 35, usw. eintrage, kommt alles zurück mit der Aussage, dass die Zahl prim ist, wenn sie nicht ist. Es sind auch nicht alle Vielfachen von 5.

Alle Hilfe ist willkommen!

Mein Code:

# 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() 

Antwort

0

Ihr Problem, da geschieht, wenn die Zahl, die Sie bewerten (zB 15) durch das erste Element der for-Schleife (Nummer 2 in diesem Fall) ist es nicht teilbare, dann wird als Primzahl ausgewertet. Um dies zu beheben, können Sie Flagmarkierungen hinzufügen, wenn eine Zahl während der Ausführung der Schleife prim ist. Wenn es aufhört, prime zu sein (wenn Sie es durch eine andere Zahl teilen können), ändert sich das Flag zu False.

Bellow ist ein funktionierendes Beispiel für das, was ich gesagt habe. Wenn Sie etwas nicht verstehen, sagen Sie es bitte.

# 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() 

HINWEIS: Diese Linie wird in Python nicht funktionieren Versionen unten 3.0:

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

Stattdessen verwenden:

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

Danke, das half! – user8091984

+0

Kein Problem :) Wenn Sie mehr brauchen, bitte sagen Sie es so. Wenn diese Antwort Ihre Probleme gelöst hat, markieren Sie diese bitte als akzeptiert! ;) –