2014-10-22 13 views
116

Ho un valore intero x, e ho bisogno di controllare se è compreso tra un start e end valori, quindi scrivo le seguenti dichiarazioni:PyCharm: "Semplificare Chained confronto"

if x >= start and x <= end: 
    # do stuff 

Questa dichiarazione viene sottolineata , e la descrizione comando mi dice che devo

semplificare confronto incatenato

Per quanto posso dire, quel confronto è tanto semplice quanto loro. Cosa mi sono perso qui?

risposta

208

In Python è possibile "chain" comparison operations che ha appena significa che sono "e" ed insieme. Nel tuo caso, sarebbe come questo:

if start <= x <= end: 

Riferimento: https://docs.python.org/2/reference/expressions.html#comparisons

+1

Grazie, non sapevo che potessi farlo in Python. Mi stavo davvero grattando la testa. –

+1

Man è così che dovrebbero essere le cose. Ma venendo da altre lingue dimentichi i tuoi ideali e non pensi nemmeno che le cose potrebbero essere come dovrebbero essere. Ma questo è il motivo per cui Python è incredibile, proprio per queste cose :) – Hakaishin

7

Può essere riscritto come:

start <= x <= end: 

Oppure:

r = range(start, end + 1) # (!) if integers 
if x in r: 
    .... 
+3

L'intervallo è una scelta scadente ause per inizio e fine grandi, stai creando un elenco non necessario. –

+0

@BurhanKhalid In effetti, ma suppongo che sia degno di nota per OP. – Maroun

+2

In python3, l'intervallo gestisce bene "__contains__", quindi non viene generata alcuna lista. – JoshNahum

-2

È necessario aggiungere parentesi

se x> = inizio e (x = < fine):

+3

Queste parentesi non cambiano nulla su come viene valutata quell'espressione. Essi rendono più difficile la lettura, perché ora sembra un errore del programmatore --- dal momento che entrambi gli operandi su 'e' hanno la stessa precedenza (l'uno dell'altro), entrambi devono essere racchiusi tra parentesi (errato in questo caso) o nessuno dei due dovrebbe. –

0

Questo può essere scritto come, che è probabile che cosa significhi l'IDE:

if start <= x and x <= end: 
    print 'x is greater than equal to start and less than equal to end'