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