Home » Python » How do I check whether an int is between the two numbers?

# How do I check whether an int is between the two numbers?

Posted by: admin November 1, 2017 Leave a comment

Questions:

I’m using 2.3 IDLE and I’m having problems.

I need to check whether a number is between two other numbers, 10000 and 30000:

``````if number >= 10000 and number >= 30000:
print ("you have to pay 5% taxes")
``````

It’s not working too well.

Answers:
``````if 10000 <= number <= 30000:
pass
``````

Questions:
Answers:
``````r=range(1,4)

>>> 1 in r
True
>>> 2 in r
True
>>> 3 in r
True
>>> 4 in r
False
>>> 5 in r
False
>>> 0 in r
False
``````

Questions:
Answers:

Your operator is incorrect. Should be `if number >= 10000 and number <= 30000:`. Additionally, Python has a shorthand for this sort of thing, `if 10000 <= number <= 30000:`.

Questions:
Answers:

Your code snippet,

``````if number >= 10000 and number >= 30000:
print ("you have to pay 5% taxes")
``````

actually checks if number is larger than both 10000 and 30000.

Assuming you want to check that the number is in the range 10000 – 30000, you could use the Python interval comparison:

``````if 10000 <= number <= 30000:
print ("you have to pay 5% taxes")
``````

This Python feature is further described in the Python documentation.

Questions:
Answers:
``````if number >= 10000 and number <= 30000:
print ("you have to pay 5% taxes")
``````

Questions:
Answers:

The trouble with comparisons is that they can be difficult to debug when you put a `>=` where there should be a `<=`

``````#                             v---------- should be <
if number >= 10000 and number >= 30000:
print ("you have to pay 5% taxes")
``````

Python lets you just write what you mean in words

``````if number in xrange(10000, 30001): # ok you have to remember 30000 + 1 here :)
``````

In Python3, you need to use `range` instead of `xrange`.

edit: People seem to be more concerned with microbench marks and how cool chaining operations. My answer is about defensive (less attack surface for bugs) programming.

As a result of a claim in the comments, I’ve added the micro benchmark here for 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
``````

If you are worried about performance, you could compute the range once

``````\$ python3.5 -m timeit -s "R=range(10000, 30000)" "5 in R"
10000000 loops, best of 3: 0.0551 usec per loop
``````