To check if number is in range(x,y)

Schachner, Joseph Joseph.Schachner at Teledyne.com
Mon Dec 14 16:21:43 EST 2020


>>> r = range(10)
So r is a list containing 0, 1, 2, 3, 4, 5, 6, 7, 8, 9

  >>> 2 in r
  True
As expected.

  >>> 2.5 in r
  False
Also as expected.  If you did int(floor(2.5)) in 5 that would be true.

  >>> r = range(1, 10, 2)
  >>> 2 in r
  False
  >>> list(r)
  [1, 3, 5, 7, 9]
Well, yes, because you started the range at 1.  Start at 0 and you'd get 0, 2, 4, 6, 8.

"It also doesn't automatically convert from the string inputs you're getting from the input() function:

  >>> s = "5"
  >>> s in r
  False
  >>> int(s) in r
  True"
You have just discovered that Python, although it is dynamically typed, is STRICTLY typed.  Another way to say this: you have discovered that Python isn't the same as BASIC.  Yes, you have to convert strings to int or float, Python does not assume you want to if you did not do it. Similarly, you have to do something to convert int or float to text.  Python makes it very simple, but you have to do it.


"Additionally, note that the endpoint of the range is exclusive so
  >>> r = range(1, 10)
  >>> 10 in r
  False"

I don't have to note that, I KNOW that (as I've demonstrated above), because I read a couple of books on Python.  Python range starts on the number you specify and does NOT include the end number.
So: range(0,10) is 0 to 9    (note that this is 10 integers)
      range(10,20) is 10 to 19    (also 10 integers)
      range(20,30) is 20 to 29   (another 10 integers)

Now suppose that the end integer was not excluded. Each range call would produce 11 integers.  10, 20, and 30 would occur twice.  Or you'd have to set the range limits differently.

I recommend you read Python 101 and when you've done that, read Python 201.   I think they are very good "learn Python" books.
If you're surprised that the end point is not included in range, you need to read Python 101.

--- Joseph S.



-----Original Message-----
From: Tim Chase <python.list at tim.thechases.com>
Sent: Saturday, December 12, 2020 11:51 AM
To: Bischoop <Bischoop at vimart.net>
Cc: Bischoop <bischoop at gemail.com>; python-list at python.org
Subject: Re: To check if number is in range(x,y)

On 2020-12-12 15:12, Bischoop wrote:
> I need to check if input number is 1-5. Whatever I try it's not
> working. Here are my aproaches to the problem: https://bpa.st/H62A
>
> What I'm doing wrong and how I should do it?

A range is similar to a list in that it contains just the numbers
listed:

  >>> r = range(10)
  >>> 2 in r
  True
  >>> 2.5 in r
  False
  >>> r = range(1, 10, 2)
  >>> 2 in r
  False
  >>> list(r)
  [1, 3, 5, 7, 9]

It also doesn't automatically convert from the string inputs you're getting from the input() function:

  >>> s = "5"
  >>> s in r
  False
  >>> int(s) in r
  True

Additionally, note that the endpoint of the range is exclusive so

  >>> r = range(1, 10)
  >>> 10 in r
  False
  >>> list(r)
  [1, 2, 3, 4, 5, 6, 7, 8, 9]

If you want numeric-range checks, Python provides the lovely double-comparison syntax:

  >>> x = 5
  >>> 2 < x < 10
  True
  >>> x = 5.5
  >>> 2 < x < 10
  True
  >>> s = "5"
  >>> 2 < s < 10
  Traceback…
  >>> 2 < int(s) < 10
  True

Hopefully this gives you the hints that you need to troubleshoot.

-tkc








More information about the Python-list mailing list