Wie kann ich eine while-Schleife stoppen?

Ich schrieb eine while loop in einer Funktion, aber weiß nicht, wie man es stoppt. Wenn es seine endgültige Bedingung nicht erfüllt, geht die Schleife einfach ewig. Wie kann ich es aufhalten?

 def determine_period(universe_array): period=0 tmp=universe_array while True: tmp=apply_rules(tmp)#aplly_rules is a another function period+=1 if numpy.array_equal(tmp,universe_array) is True: break #i want the loop to stop and return 0 if the #period is bigger than 12 if period>12: #i wrote this line to stop it..but seems it #doesnt work....help.. return 0 else: return period 

  • Pythonische Aufzählung von while-Schleife
  • Python-Einstellungsgrenze für Laufzeit mit while-Schleife
  • Python 3.2 globale Variable nicht aktualisiert, wenn seine in einem Thread
  • Verschachtelte WHILE-Schleifen in Python
  • Wie brechen Sie aus, während Schleife in Python?
  • Während Schleife Einzeiler
  • Durchschnittlicher Taschenrechner
  • Wie man einen Sprite bounce von den Kanten des Fensters in pygame
  • 4 Solutions collect form web for “Wie kann ich eine while-Schleife stoppen?”

    Geben Sie einfach Ihren Code richtig ein:

     def determine_period(universe_array): period=0 tmp=universe_array while True: tmp=apply_rules(tmp)#aplly_rules is a another function period+=1 if numpy.array_equal(tmp,universe_array) is True: return period if period>12: #i wrote this line to stop it..but seems its doesnt work....help.. return 0 else: return period 

    Sie müssen verstehen, dass die break Anweisung in Ihrem Beispiel die Endlosschleife beendet, die Sie mit while True . Wenn also die Pause-Bedingung True ist, beendet das Programm die Endlosschleife und geht weiter zum nächsten eingerückten Block. Da es keinen folgenden Block in deinem Code gibt, endet die Funktion und gibt nichts zurück. Also habe ich deinen Code behoben, indem du die break Anweisung durch eine return Anweisung ersetzt.

    Im Anschluss an Ihre Idee, eine Endlosschleife zu verwenden, ist dies der beste Weg, um es zu schreiben:

     def determine_period(universe_array): period=0 tmp=universe_array while True: tmp=apply_rules(tmp)#aplly_rules is a another function period+=1 if numpy.array_equal(tmp,universe_array) is True: break if period>12: #i wrote this line to stop it..but seems its doesnt work....help.. period = 0 break return period 
     def determine_period(universe_array): period=0 tmp=universe_array while period<12: tmp=apply_rules(tmp)#aplly_rules is a another function if numpy.array_equal(tmp,universe_array) is True: break period+=1 return period 

    Der Operator in Python macht wahrscheinlich nicht was man erwartet An Stelle von:

      if numpy.array_equal(tmp,universe_array) is True: break 

    Ich würde es so schreiben:

      if numpy.array_equal(tmp,universe_array): break 

    Der Operator prüft die Objektidentität, was ganz anders ist als die Gleichheit.

    Ich würde es mit einer for-Schleife verwenden, wie unten gezeigt:

     def determine_period(universe_array): tmp = universe_array for period in xrange(1, 13): tmp = apply_rules(tmp) if numpy.array_equal(tmp, universe_array): return period return 0 
    Python ist die beste Programmiersprache der Welt.