Still too slow
MRAB
python at mrabarnett.plus.com
Sat Jan 30 21:45:24 EST 2010
elsa wrote:
> Hi John and others,
>
> sorry about my etiquette errors. As you can tell I'm a newbie, and
> appreciate all the help I can get. I'm trying to master this thing
> with only the net and a couple of books as tutors.
>
> Here is what I'm running at the interactive prompt:
>
[snip]
>
> def event():
> """
> randomly chooses a birth (prob .3), death (prob .1) or mutation
> (prob .1) event
> """
> choice = random.random()
> if choice <= .3:
> event='b'
> elif choice <= .4:
> event ='d'
> elif choice<= .5:
> event = 'm'
> else:
> event = 'None'
> return event
>
[snip]
Here's my line of thought:
Currently, 0 <= choice < 1.0.
If you multiplied the random number by 10 then the probability
thresholds could all be ints, and if you're using ints then 'choice'
could be an index into a list:
event_choices = ['b', 'b', 'b', 'd', 'm'] + ['None'] * 5
which then suggests using random.choice() instead:
def event():
"""
randomly chooses a birth (prob .3), death (prob .1) or mutation (prob
.1) event
"""
return random.choice(event_choices)
and you could put the event code inline instead of in a function, which
saves the cost of a function call.
Incidentally, for a probability of 0.3 the test should be "choice <
0.3", etc, not "choice <= 0.3", etc, although I suspect that you won't
notice any difference in the results! :-)
More information about the Python-list
mailing list