2016-07-08 15 views
0

Ich lerne gerade Python zum Spaß. Ich bin es gewohnt, in C++ zu programmieren, und bis jetzt ist es ziemlich leicht zu erlernen. Ich habe mein erstes Programm selbst geschrieben, aber aus irgendeinem Grund tut es nichts und die Funktionen, die ich geschrieben habe, werden nicht ausgeführt. Wenn ich print-Anweisungen außerhalb der Funktionen schreibe, werden die Anweisungen ausgeführt, aber sie gehen niemals in die Funktion. Hier ist mein Code. Irgendwelche Tipps würden sehr geschätzt werden.Python-Programm führt keine Funktionen aus

racks = 1000000 
sum = 0 
def ConsecutivePrime(): 
    primeNum = 0 
    stack = [] 
    while(StackAdder == False): 
     primeNum = isPrime(primeNum) 
     stack.append(primeNum) 
     StackAdder(stack) 
    if(StackAdder == True): 
     print ("Largets Prime: ", sum) 

def StackAdder(stack): 
    for n in stack: 
     sum += n 
    if(count < racks): 
     return False 
    else: 
     stack.pop() 
     return True 

def isPrime(primeNum): 
    isPrime = False 
    while(isPrime == False): 
     primeNum += 1 
     if(primeNum % 2 == 1): #First Checks If Odd 
      if(primeNum % 3 == 0): 
       isPrime == False 
      elif(primeNum % 5 == 0): 
       isPrime == False 
      elif(primeNum % 7 == 0): 
       isPrime == False 
      elif(primeNum % 9 == 0): 
       isPrime == False 
      else: 
       isPrime == True 
    if(isPrime == True): 
     return primeNum 

def main(): 
    ConsecutivePrime() 
if __name__ == "__main__": 
    main() 
+0

Wie führen Sie das Python-Skript aus? – Alden

+1

Legen Sie einen Haltepunkt in ConsecutivePrime fest. Verfolgen Sie jeweils eine Zeile. Beobachte, was passiert, wenn es die Zeile "while (StackAdder ..." trifft. – rajah9

+1

Außerdem, FWIW, Es ist nicht idiomatisch zu sehen "if x == True". In Python würde man im Allgemeinen einfach 'if x: schreiben. .. ' – mgilson

Antwort

4

StackAdder ist eine Funktion; es ist weder True noch False, also ConsecutivePrimewird genannt, es tut einfach nichts.

+0

Ich stimme nicht zu.Funktionen zu wahr: 'bool (myFunction)' –

+1

* Calling * die Funktion könnte, die Funktion selbst, nicht so sehr .. –

+1

Dann überprüfen Sie es selbst. Definieren Sie eine Funktion und dann Setzen Sie es in eine Bedingung oder versuchen Sie es mit der 'bool'-Funktion –

1

diese Zeilen am Anfang Ihrer ConsecutivePrime() Funktion hinzufügen, und beobachten Sie die Ausgabe:

print(StackAdder == True) 
print(StackAdder == False) 

Sie False zweimal gedruckt sehen, nicht wahr? Überrascht? Lesen Sie die Kommentare zur Antwort von Scott Hunter. Mag sein, dass das ein wenig hilft.

Ihre Bedingungen für while und if sind also False.

Wenn das, was Sie wollten, war zu überprüfen, was Wert StackAdder() zurückgegeben, müssen Sie es wie dies zu tun:

def ConsecutivePrime(): 
    primeNum = 0 
    stack = [] 
    while(StackAdder(myStack) == False): # define myStack to your needs 
     primeNum = isPrime(primeNum) 
     stack.append(primeNum) 
     StackAdder(stack) 
    if(StackAdder(myStack) == True): 
     print ("Largets Prime: ", sum) 
0

Es gibt große Probleme in der Art und Weise Sie Ihren Code strukturiert, und ich werde versuchen, darauf zu hinweisen, die offensichtlichsten Fehler in Ihren Funktionen:

1) im Hinblick auf die Funktion isPrime(primeNum), das ist der richtige Weg, es zu schreiben:

def isPrime(primeNum): 
    isPrime = False 
    while not isPrime: 
     primeNum += 1 
     if(primeNum % 2 == 1): #First Checks If Odd 
      if(primeNum % 3 == 0): 
       isPrime == False 
      elif(primeNum % 5 == 0): 
       isPrime == False 
      elif(primeNum % 7 == 0): 
       isPrime == False 
      elif(primeNum % 9 == 0): 
       isPrime == False 
      else: 
       isPrime == True 
    return primeNum 

Ich schrieb while(isPrime == False) als while not isPrime um. Außerdem benötigen Sie nicht die -Anweisung, da die while-Schleife beendet wird, wenn isPrime == True.

2) In der Funktion StackAdder(stack) führen Sie count ein, die zuvor nicht definiert wurde. Vielleicht wollten Sie stattdessen sum? (Welche die Anzahl der zurückgibt, wie oft ein obj tritt in einer Liste) Oder vielleicht haben Sie versucht, die count() Methode zu verwenden

3) In der Funktion ConsecutivePrime() ist Stackadder eine Funktion, so dass Ihr Code sein soll: while(StackAdder(stack) == False)