2017-07-10 1 views
0

Ich versuche, meine eigene Primzahl und perfekte Quadrat Checker mit Python, zu schreiben Die Funktion sollte 'Foo' drucken, wenn dies eine Primzahl ist, 'Bar' drucken, wenn dies ein ist perfektes Quadrat, print ‚FooBar‘, wenn es weder hier ist mein Code:Primzahl und Perfect Square Checker in Python

def FooBar(): 
    prime = True 
    perfSqr = False 
    for target in range(100,100001): 
     for num in range(1,target+1): 
      if target % num == 0 and num != target: 
       prime = False 

      if target // num == num and target % num == 0: 
       perfSqr = True 

    if prime is True: 
     print 'Foo' 
    elif perfSqr is True: 
     print 'Bar' 
    else: 
     print 'FooBar' 

if __name__ == '__main__': 
    FooBar() 

irgendwie kann ich es überhaupt nicht zum laufen bringt, kann mir jemand gibt einen Hinweis?

+2

Bereich beginnt ab 1 und Ziel% num ist immer 0. –

+0

Was Sie überhaupt bedeuten? Können Sie die Methoden nicht aufrufen? Kannst du etwas so einfaches wie die 'hallo world' bekommen, ohne deine Berechnungen und' if/else' zu ​​arbeiten? –

+0

Zerschlagen Sie nicht Ihre ganze Logik in eine große monolithische Funktion. Haben '' is_prime (x) '', '' is_perfect_square (x) '' Funktionen und wendet sie auf einer Sequenz. – Meitham

Antwort

2

Wenige Dinge. Die erste ist, dass Sie num von 1 bis target + 1 ausführen. num % 1 ist immer 0, also drucken Sie niemals Primzahlen.

Als nächstes setzen Sie Ihre Flags prime und perfSqr nicht über Iterationen hinweg zurück. Außerdem müssen Sie Ihre Druckanweisungen innerhalb der äußeren Schleife verschieben, damit sie jede Iteration drucken.

Dies funktioniert wie erwartet:

def FooBar(): 
    for target in range(100, 100001): 
     prime = True 
     perfSqr = False 
     for num in range(2, target + 1): 
      if target % num == 0 and num != target : 
       prime = False 

      if target // num == num and target % num == 0: 
       perfSqr = True 

     if prime or perfSqr: 
      print(num, end=', ') 
      if prime: 
       print('Foo', end=', ') 
      elif perfSqr: 
       print('Bar', end=' ') 
      print('\n') 
+0

Danke, das ist die Antwort war ich für –

+0

@EdwardSun Glad zu helfen suchen. :) –

0

1) Ihre Einbuchtung ist off- es scheint, wie Sie das wollen, wenn Block eingerückt werden, so dass es innerhalb der ersten for-Schleife ist

2) Sie tun Setzen Sie prime und perfSqr nicht innerhalb der ersten for-Schleife zurück. Sobald sie gesetzt sind, werden sie nie zurückgesetzt.

3) Ihr innerer for-loop-Bereich beginnt bei 1, wenn er bei 2 beginnen soll, sonst scheint es, dass alle Zahlen prim sind.

Ist das, was Sie aus ?: wollen

def FooBar(): 
for target in range(100,100001): 
    prime = True 
    perfSqr = False 
    for num in range(2,target+1): 
     if target % num == 0 and num != target: 
      prime = False 

     if target // num == num: 
      perfSqr = True 

    if prime is True: 
     print 'Foo' 
    elif perfSqr is True: 
     print 'Bar' 
    else: 
     print 'FooBar' 



if __name__ == '__main__': 
    FooBar()