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 

  • Verbinden von zwei Punkten in einem 3D-Scatter-Plot in Python und Matplotlib
  • Socket.getfqdn () und socket.gethostname () geben bei der Verwendung von socket.gethostname verschiedene IP-Adressen
  • Python - Konvertieren von String in Integer für Randeingaben
  • Python pandas: output dataframe zu csv mit ganzen Zahlen
  • Text-Extraktion mit Python-lxml-Looping-Problem
  • Ich mache einen PEMDAS-Löser und weiß nicht, was ich schreiben soll
  • Größe des Teilbaums in Python
  • Beenden der Konsolenausgabe beim Einfrieren von Python-Programmen mit Pyinstaller
  • OOP: Getter / Setter Methoden
  • Python: Ist es möglich, den Clientport mit xmlrpclib zu setzen?
  • Einstellung python3.2 als Standard statt python2.7 auf Mac OSX Lion 10.7.5
  • Python-Multiprocessing IOError: [Errno 232] Das Rohr wird geschlossen
  • 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.