difference between random () and randint()The random command will generate a rondom value present in a given list/dictionary. And randint command will generate a random integer value from the given list/dictionary.
The randrange() method returns a randomly selected element from the specified range.
randrange() in Python Python offers a function that can generate random numbers from a specified range and also allowing rooms for steps to be included, called randrange() in random module.
randint() is an inbuilt function of the random module in Python3. The random module gives access to various useful functions and one of them being able to generate random numbers, which is randint(). Parameters : (start, end) : Both of them must be integer type values.
The docs on randrange
say:
random.randrange([start], stop[, step])
Return a randomly selected element from
range(start, stop, step)
. This is equivalent tochoice(range(start, stop, step))
, but doesn’t actually build a range object.
And range(start, stop)
returns [start, start+step, ..., stop-1]
, not [start, start+step, ..., stop]
. As for why... zero-based counting rules and range(n)
should return n
elements, I suppose. Most useful for getting a random index, I suppose.
While randint
is documented as:
random.randint(a, b)
Return a random integer N such that
a <= N <= b
. Alias forrandrange(a, b+1)
So randint
is for when you have the maximum and minimum value for the random number you want.
https://github.com/python/cpython/blob/.../Lib/random.py#L218
def randint(self, a, b):
"""Return random integer in range [a, b], including both end points.
"""
return self.randrange(a, b+1)
The difference between the two of them is that randint
can only be used when you know both interval limits.
If you only know the first limit of the interval randint
will return an error. In this case you can use randrange
with only one interval and it will work.
Try run the following code for filling the screen with random triangles:
import random
from tkinter import *
tk = Tk()
canvas = Canvas(tk, width=400, height=400)
canvas.pack()
def random_triangle(l1,l2,l3,l4,l5,l6):
x1 = random.randrange(l1)
y1 = random.randrange(l2)
x2 = x1 + random.randrange(l3)
y2 = y1 + random.randrange(l4)
x3 = x2 + random.randrange(l5)
y3 = y2 + random.randrange(l6)
canvas.create_polygon(x1,y1,x2,y2,x3,y3)
for x in range(0, 100):
random_triangle(300,400,200,500,400,100)
Try running again the above code with the randint
function. You will see that you will get an error message.
A range in python is something that includes the lower-bound but does not include the upper-bound. At first, this may seem confusing but it is intentional and it is used throughout python.
list(range(4, 10))
# [4, 5, 6, 7, 8, 9]
# does not include 10!
xs = ['a', 'b', 'c', 'd', 'e']
xs[1:4]
# [xs[1], xs[2], xs[3]]
# does not include xs[4]!
bisect.bisect_left('jack', names, 2, 5)
# perform a binary search on names[2], names[3], names[4]
# does not include names[5]!
random.randrange(4, 8)
# picks a random number from 4, 5, 6, 7
# does not include 8!
In mathematics, this is called a half-open interval. Python chooses to use half-intervals because they avoid off-by-one errors:
[to avoid off-by-one errors] ... ranges in computing are often represented by half-open intervals; the range from m to n (inclusive) is represented by the range from m (inclusive) to n + 1 (exclusive)
And so as a result, most python library functions will use this idea of half-open ranges when possible.
However randint is one that does not use half-open intervals.
random.randint(4, 8)
# picks a random number from 4, 5, 6, 7, 8
# it does indeed include 8!
The reason is historical:
randint started off as an earlier library function that didn't include half-open interval because this idea was less cemented in python at the time.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With