2017-05-01 1 views
0

Ich habe eine for-Schleife, die über eine Liste von Gleitkommazahlen iteriert. Meine ursprüngliche Absicht war, dass ich eine for-Schleife mit einer if-Anweisung machen könnte, um Dinge zu tun, wenn meine Daten> x Prozent sind ... aber ich habe erkannt, dass diese Methode eine Duplizierung der präsentierten Daten verursacht. Es ist sachlich richtig, aber es ist nicht das, was ich wollte oder beabsichtigte. Also, meine Scheindaten haben etwas, das viel größer ist als die Realität und löst die if-Bedingung bei allen niedrigeren Prozentsätzen aus. Ich möchte nur, dass es auf den größten Prozentsatz ausgelöst wird und nicht auf die kleineren Bedingungen unten ... wie würde ich das auf möglichst pythische Weise tun?Wie schließe ich eine for-Schleife in Python 2.7 ohne Exceptions Exceptions

Dies ist die Beispielcode-Lösung, die ich zusammen geworfen habe, aber ich denke, das Einbringen von Ausnahmen mit einem try/catch-Block ist wahrscheinlich nicht so sauber wie andere Lösungen.

#!/usr/bin/env python 

percentages = [0.2,0.5, 0.75, 1, 2, 5] 
resultingPercentage = 9 


for i in sorted(percentages, reverse=True): 
    try: 
     if resultingPercentage > i: 
      print "We found an opportunity greater than %.2f%% points" %i 
      raise Exception 
    except: 
     #continue 
     break 
+0

try Dieses Beispiel: https://www.tutorialspoint.com/python/python_break_statement.htm ... auch von einem Versuch versuchen wird endlich anrufen; Die Erhöhung ist überhaupt nicht notwendig, wie Sie in dem verlinkten Beispiel sehen können. – vv01f

+1

Nicht ganz sicher, was Sie zu tun versuchen, Ihr Beispielcode wird sofort beendet. Es ist also schwer zu sagen, was Sie zu demonstrieren versuchen. Z.B. Sie könnten einfach sofort "brechen" statt "erhöhen -> außer -> brechen". Sie können auch das 'iertools' Modul betrachten, da es eine Menge Unterstützung für Iterator Algebra gibt, insbesondere 'itertools.takewhile()' könnte helfen. – AChampion

+0

Okay, diese Vorschläge haben es geschafft. Ich wusste nicht, dass ich einfach die 'break'-Anweisung in meiner if-Anweisung in der Schleife verwenden konnte, weshalb ich eine Ausnahme gemacht habe. Ich werde eine davon als die gelöste Antwort markieren, wenn – Frankenmint

Antwort

1

Sehen als sonst niemand es als gepostet Antwort noch und diese Frage zu markieren, wie beantwortet, können Sie aus einer Schleife brechen, ohne die break Anweisung in einem Exception-Handler erscheinen:

percentages = [0.2,0.5, 0.75, 1, 2, 5] 
resultingPercentage = 9 

for i in sorted(percentages, reverse=True): 
    if resultingPercentage > i: 
     print "We found an opportunity greater than %.2f%% points" %i 
     break 
0

Sie können die max Funktion den größten Anteil aus der Liste zu bekommen, dann tun nur eine einzige if Aussage mit nur diesem Prozentsatz:

percentages = [0.2,0.5, 0.75, 1, 2, 5] 
resultingPercentage = 9 
maxPercentage = max(percentages) 
if resultingPercentage > maxPercentage: 
    print "We found an opportunity greater than %.2f%% points" %maxPercentage 
+0

da ist VIEL mehr los Darauf wird hier nicht gezeigt - die resultingPercentage-Variable selbst wird in eine for-Schleife generiert und dieses Beispiel-Snippet war das, was ich nach dem Erzeugen des resultierendenPercentage schreiben wollte ... es ändert sich ständig so, die Auswahl des maximalen Wertes funktioniert nicht . Ich habe nur eine hohe Zahl eingegeben, um zu zeigen, dass der Code für jeden Wert laufen würde, auch für niedrigere - in Wirklichkeit ist mein resultierender Percentage-Wert ein mittlerer Wert und fast niemals gleich oder größer als max. Ich wollte dich nicht hängen lassen, danke für deine Hilfe – Frankenmint