2017-06-20 3 views
2

Ich habe diese Zeile Code:Kann Python logische Operatoren komprimieren?

if x + dx < 0 or y + dy < 0 or x + dx == len(grid) or y + dy == len(grid): 

aber das fühlt sich klobig und übermäßig lange, da ich den gleichen Vergleich auf mehreren Ausdrücke machte. Bei einem größeren Vergleich könnte dies eine Menge unnötigen Platz einnehmen.

Gibt es eine Möglichkeit, es zu etwas zu komprimieren, wie:

if x + dx or y + dy < 0 or x + dx or y + dy == len(grid): 
+0

Da Ihre Sorge ist, "dass [es fühlt sich klobig und übermäßig lang", können Sie den _long und clunky_ Code innerhalb einer Funktion wickeln, und rufen Sie einfach i t bei Bedarf. Etwas wie: 'def calc (x, dx, t, dy, Gitter): if ((x + dx <0) oder (y + dy <0) oder (x + dx == len (Gitter)) oder (y + dy == len (Gitter))): pass' – boardrider

Antwort

7

Nein, Boolesche Operatoren können nicht komprimiert werden; Computersprachen sind eher schlecht in der englischen Grammatik.

Gerade berechnen die x + dx und y + dy Ergebnisse einmal und die Ergebnisse in Ihrem Test verwenden:

xdx, ydy = x + dx, y + dy 
if xdx < 0 or ydy < 0 or xdx == len(grid) or ydy == len(grid): 

Alternativ, wenn Sie die Tests invertiert, können Sie nutzen gekettet Vergleiche:

if not (0 >= x + dx > len(grid) and 0 >= y + dy > len(grid)): 
1

Nein, das ist nicht möglich.

Was Sie suchen ist besser gemacht durch Funktionen definieren, die es besser aussehen wird, zum Beispiel:

def is_negative(x): 
    return x < 0 

def is_grid_length(x): 
    return x == len(grid) 


if is_negative(x + dx) or is_negative(y + dy) or is_grid_length(x + dx) or is_grid_length(y + dy): 
+0

Dies ist nur mehr ausführlich; Warum nicht einen 'bounds_check()' test machen, der * beide Bedingungen * für ein gegebenes 'v, dv'-Paar testet? –

Verwandte Themen