Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Is there a more efficient way to organize random outcomes by size in Python?

Tags:

python

random

I'm making a program that, in part, rolls four dice and subtracts the lowest dice from the outcome. The code I'm using is

die1 = random.randrange(6) + 1
die2 = random.randrange(6) + 1
die3 = random.randrange(6) + 1
die4 = random.randrange(6) + 1
if die1 <= die2 and die1 <= die3 and die1 <= die4:
    drop = die1
elif die2 <= die1 and die2 <= die3 and die2 <= die4:
    drop = die2
elif die3 <= die1 and die3 <= die2 and die3 <= die4:
    drop = die3
else:
    drop = die4

cha = die1 + die2 + die3 + die4 - drop

That's the best I could come up with from my so-far limited coding ability. Is there a better way to make it organize the four dice in order of size, then add together the three highest while ignoring the leftover? Or is the code I'm using the best way to do it?

like image 626
Kefka Avatar asked Jun 04 '10 23:06

Kefka


1 Answers

Put the dice in a list, sort the list using sorted and remove the smallest element using a slice:

>>> import random
>>> dice = [random.randint(1, 6) for x in range(4)]
>>> sum(sorted(dice)[1:])
13

Or an alternative that is simpler and will also be faster if you have lots of dice: use min to find the minimum die and subtract it from the sum of them all:

>>> sum(dice) - min(dice)
13
like image 139
Mark Byers Avatar answered Nov 07 '22 13:11

Mark Byers