2010-06-04 39 views
5

我正在製作一個程序,部分是擲出四個骰子並從結果中減去最低的骰子。我正在使用的代碼是有沒有一種更有效的方法來按Python的大小組織隨機結果?

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 

這是我從目前爲止有限的編碼能力中最好的。有沒有更好的方法讓它按照大小的順序組織四個骰子,然後將三個最高級加在一起,而忽略剩餘?或者是我正在使用最好的方式來執行它的代碼?

+1

只是一個提示,random.randrange接受一個啓動參數。使用'random.randrange(1,7)'來避免將結果加1。 – Ponkadoodle 2010-06-04 23:11:37

+0

我認爲這是random.randint這樣做,randrange必須是一個單一的數字,代表從0到該數字的隨機數。雖然現在我再次查看代碼,但應該使用5而不是6 – Mella 2010-06-04 23:16:36

+0

如果有疑問,請參閱文檔。 randrange:http://docs.python.org/library/random.html#random.randrange和randint:http://docs.python.org/library/random.html#random.randint – 2010-06-04 23:20:09

回答

8

把骰子在列表中,使用sorted排序列表,並使用切片刪除最小的元素:

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

或者說是簡單的,也將是更快,如果你有很多的骰子的一種替代方案:使用min找到最小的模具,並從它們的總和中減去它:

>>> sum(dice) - min(dice) 
13 
+0

所以 骰子= [random.randint(1,6),用於在範圍(4)X] 總和(骰子) - 分鐘(骰子) 替換整個塊我張貼?哈哈,我浪費了很多時間,看起來像。是x變量還是隻是函數的一部分? – Mella 2010-06-04 23:21:22

+0

@Matt:是的,這就是你需要的。 'x'是一個未使用的變量。 – 2010-06-04 23:27:01

+0

有趣的提示:您可以使用'_'作爲未使用變量的佔位符。例如:'[random.randint(1,6)for _ in range(4)]' – jathanism 2010-06-04 23:45:41

相關問題