[Tutor] Generating random in a user specified range.
Adam
adam at monkeez.org
Wed Apr 28 11:35:49 EDT 2004
Magnus Lycka wrote:
> Adam wrote:
>
>>However, I seem to have a problem - I get an error using
>>random.randint(a,b) and with random.randrange(a,b).
>
>
> It's *much* easier to help you if you tell us exactly the error
> messages you get. Can't you copy the traceback directly to the mail?
>
> Btw, used with two integers as arguments, random.randint(x,y) is
> exactly the same thing as random.randrange(x,y+1). You can expect
> them to behave fairly similarly from an error point of view, but
> note that your "top" value will never be returned from
> randrange(bottom, top). See below:
>
>
>>>>import random
>>>>random.randint(1,1)
>
> 1
>
>>>>random.randrange(1,2)
>
> 1
>
>>>>random.randrange(1,1)
>
>
> Traceback (most recent call last):
> File "<pyshell#40>", line 1, in -toplevel-
> random.randrange(1,1)
> File "D:\Python23\lib\random.py", line 171, in randrange
> raise ValueError, "empty range for randrange()"
> ValueError: empty range for randrange()
>
>
>>It seems that it
>>might be fussy accepting parts of a list as the argument. I've tried
>
>
> If "x = [5, 20]", then x[0] and x[1] are integers, not "parts of a list",
> so this isn't your problem.
>
>
>>>>x = [5, 20]
>>>>random.randint(x[0], x[1])
>
> 15
>
>>>>random.randrange(x[0], x[1])
>
> 14
>
> No problems!
>
>
>>converting them to integers and then passing the interger, but it still
>>complains.
>
>
> You *should* provide integers as parameters with random.randrange().
> Never strings.
>
> Python is not a toy language that tries to guess what the programmer
> meant and corrects him silently when he made a mistake. In the long
> run, the Python tenet: "In the face of ambiguity, refuse the temptation
> to guess" is very helpful when we try to build robust applications.
>
>
>>range = range()
>
>
> I assume you have this *after* your function definition in your actual
> program, otherwise it will not call your not yet defined function, but
> rather to the standard built in Python function called range. E.g.
>
> Traceback (most recent call last):
> File "C:/TEMP/temp.py", line 1, in -toplevel-
> range = range()
> TypeError: range expected at least 1 arguments, got 0
>
>
>>def range():
>
>
> As I said, range is the name of a builtin function. It's not a good idea
> to hide builtin functions with user defined ones.
>
> If I take your code, add "import random" at the top, and move the
> initial lines to the end of the program, after the functions, it works
> as expected, with no errors. (Well, I guess you actually want randint
> rather than randrange as explained above.)
>
Just a quick thanks to everyone who replied - I got this working.
Adam
More information about the Tutor
mailing list