@@ -233,10 +233,8 @@ def __init_subclass__(cls, /, **kwargs):
233
233
break
234
234
235
235
def _randbelow_with_getrandbits (self , n ):
236
- "Return a random int in the range [0,n). Returns 0 if n== 0."
236
+ "Return a random int in the range [0,n). Defined for n > 0."
237
237
238
- if not n :
239
- return 0
240
238
getrandbits = self .getrandbits
241
239
k = n .bit_length () # don't use (n-1) here because n can be 1
242
240
r = getrandbits (k ) # 0 <= r < 2**k
@@ -245,7 +243,7 @@ def _randbelow_with_getrandbits(self, n):
245
243
return r
246
244
247
245
def _randbelow_without_getrandbits (self , n , maxsize = 1 << BPF ):
248
- """Return a random int in the range [0,n). Returns 0 if n== 0.
246
+ """Return a random int in the range [0,n). Defined for n > 0.
249
247
250
248
The implementation does not use getrandbits, but only random.
251
249
"""
@@ -256,8 +254,6 @@ def _randbelow_without_getrandbits(self, n, maxsize=1<<BPF):
256
254
"enough bits to choose from a population range this large.\n "
257
255
"To remove the range limitation, add a getrandbits() method." )
258
256
return _floor (random () * n )
259
- if n == 0 :
260
- return 0
261
257
rem = maxsize % n
262
258
limit = (maxsize - rem ) / maxsize # int(limit * maxsize) % n == 0
263
259
r = random ()
@@ -338,7 +334,8 @@ def randint(self, a, b):
338
334
339
335
def choice (self , seq ):
340
336
"""Choose a random element from a non-empty sequence."""
341
- # raises IndexError if seq is empty
337
+ if not seq :
338
+ raise IndexError ('Cannot choose from an empty sequence' )
342
339
return seq [self ._randbelow (len (seq ))]
343
340
344
341
def shuffle (self , x ):
0 commit comments