Is there an error in Python 3's random.SystemRandom.randint, or am I using in incorrectly?

Question:

>>> import random
>>> random.SystemRandom.randint(0, 10)
Traceback (most recent call last):
  File "<pyshell#3>", line 1, in <module>
    random.SystemRandom.randint(0, 10)
TypeError: randint() missing 1 required positional argument: 'b'

SystemRandom is supposed to give random numbers though os.urandom, randint works like normal randrange:

>>> print(random.SystemRandom.randint.__doc__)
Return random integer in range [a, b], including both end points.

In IDLE a little popup suggestion appears when I type it it saying

`random.SystemRandom.randint(self, a, b)`

I think this is the cause. I’m not very good at using classes and understanding how they work, but the first argument seems to be being passed as self, when it should be a. I never really understand why self is used when it isn’t even a keyword, and how it’s supposed to all just work, but it generally does.

Am I doing this wrong, or should I report this to the Python Foundation whenever one is supposed to do such things?

Asked By: Henrik Oldcorn

||

Answers:

I think you want:

import random
r = random.SystemRandom()
print(r.randint(0, 10))

instead.

This is because you need to create an instance of the random.SystemRandom class.

However you can just as easily use the following:

import random
random.randint(0, 10)

if you don’t need an OS-dependent cryptographic RNG.

Answered By: lollercoaster

random.SystemRandom is an class. It needs to be instantiated;

In [5]: foo = random.SystemRandom()

In [6]: foo.randint(0, 10)
Out[6]: 0

The complete docstring gives a hint;

In [12]: random.SystemRandom.randint?
Signature: random.SystemRandom.randint(self, a, b)
Docstring: Return random integer in range [a, b], including both end points.
File:      /usr/local/lib/python3.4/random.py
Type:      function

The self parameter indicates that this randint is a method of SystemRandom.

Answered By: Roland Smith

When the error is "TypeError: randint() missing 1 required positional argument: ‘b’" it’s because the person writing the code probably mixed up their

random.randint()

and their

random.choice()

Hope I helped 😀

Answered By: GingerCat_error404

May be while using Jupyter notebook you got an error like this ,Just pass the missing positional argument like randint(1,1000) it will generate a random number bw 1 to 1000.

Answered By: user20712066
Categories: questions Tags: ,
Answers are sorted by their score. The answer accepted by the question owner as the best is marked with
at the top-right corner.