2017-10-08 2 views
1

Gibt es eine pythonic Art des Schreibens:Pythonic Idiom für diese Konstruktion

if value <= 10: 
    print 1 
elif value <= 13: 
    print 2 
elif value <= 15: 
    print 3 
elif value <= 24: 
    print 4 

Die Werte in gar keine Muster fallen getestet.

+0

ein pythonischer, sauberer, lesbarer würde vorgeschlagen werden, nachdem Sie Details angeben, wie Sie Eingang erhalten, was sind logische Beziehung zwischen diesen oberen Grenzen und gedruckten Werten, etc. Refactoring, sauber Code ist wirklich Teil des Softwareentwicklungsprozesses. – marmeladze

+0

Sie könnten 'to_print = next ((i für i, v in enumerate ([10, 13, 15, 24], 1) wenn Wert <= v), None)' aber das ist nur eine Zuordnung Ihres genauen Codes, die wie @marmeladze sagt - ist gut und lesbar und recht flexibel, wenn man zu unteren/oberen Grenzen wechseln oder weitere Kriterien für jedes if/elif usw. hinzufügen wollte ... Also - es kommt darauf an - was denkst du ist falsch mit deinem aktuellen Code ? –

+0

@marmeladze Dies ist ein generisches Problem. Wenn Sie eine Liste mit beliebigen Werten haben und eine Aktion durchführen wollen, abhängig vom Wert – Psionman

Antwort

-1

Nicht sicher, ob dies mehr Pythonic, aber dies eine andere Art und Weise könnte das Gleiche tun:

d = {1: [float('-inf'), 10], 2: [11, 13], 3: [14, 15], 4: [16, 24]} 
[print i for i in d if value >= d[i][0] and value <= d[i][1]] 

Hier kodieren Sie die untere Grenze und obere Grenze für jede Bedingung in das Wörterbuch und drucken Sie die Taste für den entsprechenden Bereich value ist in.

+0

Gegeben sollten sie 'elif's sein - Sie wollen keine Liste für alle Schecks erstellen - Sie wollen auf den ersten erfolgreichen einen Kurzschluss machen –

+0

(nicht zu erwähnen, dass es nicht gerecht wird für die <= 10 Kriterien ...) –

+0

@JonClements Das erste Ding im Wörterbuch berücksichtigt die <= 10 Kriterien, obwohl die untere Grenze für diesen Fall unterschiedlich sein kann. Außerdem sind die Bereiche disjunkt, was es unmöglich macht, dass "Wert" mehr als eine Prüfung erfüllt. – Antimony