O problema das comparações é que elas podem ser difíceis de depurar quando você coloca um local >=
onde deve haver um<=
# v---------- should be <
if number >= 10000 and number >= 30000:
print ("you have to pay 5% taxes")
Python permite que você escreva o que você quer dizer com palavras
if number in xrange(10000, 30001): # ok you have to remember 30000 + 1 here :)
No Python3, você precisa usar em range
vez de xrange
.
editar: As pessoas parecem estar mais preocupadas com as marcas de microbench e com as operações legais de encadeamento. Minha resposta é sobre programação defensiva (menos superfície de ataque para bugs).
Como resultado de uma reivindicação nos comentários, adicionei aqui o micro benchmark para o Python3.5.2
$ python3.5 -m timeit "5 in range(10000, 30000)"
1000000 loops, best of 3: 0.266 usec per loop
$ python3.5 -m timeit "10000 <= 5 < 30000"
10000000 loops, best of 3: 0.0327 usec per loop
Se você está preocupado com o desempenho, pode calcular o intervalo uma vez
$ python3.5 -m timeit -s "R=range(10000, 30000)" "5 in R"
10000000 loops, best of 3: 0.0551 usec per loop