2016-08-09 15 views
0

So habe ich diesen Code:Warum gibt diese if-Anweisung immer True zurück?

steps = 0 
biggestSteps = 0 
startY = 2 
y = startY 

def process(x): 
    global steps 
    steps = steps + 1 
    if x % 2 == 0: 
     return x/2 
    else: 
     return (3*x)+1 

while True: 
    y = process(y) 
    if y == 1 or y == 4: 
     if steps > biggestSteps: 
      biggestSteps = steps 
      print("Biggest number yet: " + str(startY) + ", with " + str(steps) + " steps") 
      startY += 1 
      y = startY 
      steps = 0 

Wenn ich versuche, diesen Code auszuführen,

if steps > biggestSteps: 

wird alawys true zurück, und es wird

print("Biggest number yet: " + str(startY) + ", with " + str(steps) + " steps") 

, für jede Zahl, die Ich will ganz bestimmt nicht.

Wie mache ich es, so dass es nur druckt, wenn eine Zahl mit einer höchsten Anzahl von Schritten erreicht hat?

EDIT:

ich versucht, indem

global 

in der while-Schleife (ziemlich sicher, es ändert sich nichts)

steps = 0 
biggestSteps = 0 
startY = 2 
y = startY 

def process(x): 
    global steps 
    steps = steps + 1 
    if x % 2 == 0: 
     return x/2 
    else: 
     return (3*x)+1 

while True: 
    global steps 
    global biggestSteps 
    global startY 
    global y 
    y = process(y) 
    if y == 1 or y == 4: 
     if steps > biggestSteps: 
      biggestSteps = steps 
      print("Biggest number yet: " + str(startY) + ", with " + str(biggestSteps) + " steps") 
      startY += 1 
      y = startY 
      steps = 0 
+0

Sie haben dieses Video von Collatz Conjecture gesehen, nicht wahr? :) – DeepSpace

+0

Sie wollten wahrscheinlich 'globale Schritte' innerhalb der' while' auch verwenden – DeepSpace

+0

Yeah. Ich hatte es tatsächlich in Processing.py, aber ich habe es versehentlich geschlossen, also habe ich versucht, es in regulären Python zu tun. Ich kopiere grundsätzlich Code. Keine Ahnung warum funktioniert das nicht? – Zobody

Antwort

0

Ich denke IDLE einen Fehler gemacht beim Kopieren oder so etwas, weil in

if steps > biggestSteps: 
      biggestSteps = steps 
      print("Biggest number yet: " + str(startY) + ", with " + str(biggestSteps) + " steps") 
      startY += 1 
      y = startY 
      steps = 0 

.

   startY += 1 
       y = startY 

Teil des Codes darf nicht in dieser if-Anweisung enthalten sein.

Verwandte Themen