2016-12-14 49 views
1

我正在研究一個小練習項目,我無法找到答案。我想擲4d6,降到最低,並將剩下的三個加在一起。我發現heapq.nlargest可以爲我找到最高的N個數字,但我無法弄清楚如何將這個數字的輸出合併爲一個數字。如何打印由heapq.nlargest輸出的X數字的總和?

到目前爲止,我未完成的代碼如下所示:

import random 
import heapq 

print "How many stats would you like to roll?" 
dice = input 

for i in range(dice()): 
    roll1 = random.randint(1, 6) 
    roll2 = random.randint(1, 6) 
    roll3 = random.randint(1, 6) 
    roll4 = random.randint(1, 6) 
    allrolls = (roll1, roll2, roll3, roll4) 
    high3 = heapq.nlargest(3, allrolls) 
+0

'sum'函數。你怎麼知道'heapq.nlargest'而不是'sum'函數?它需要任何迭代並對它進行求和,'heapq.nlargest'返回一個可迭代的(精確的''list')。 – ShadowRanger

+0

請注意,在這種情況下'heapq.nlargest'只會讓你很少(當你需要從一個更大的列表中取少數值時,這個功能非常有用)。 'sum(allrolls) - min(allrolls)'或'sum(sorted(allrolls)[ - 3:])'在理論和實踐上都可能更有效率。 – ShadowRanger

+0

我在這裏找到了一個關於如何打印x列表中最大數字的問題的答案,並且它運行良好。感謝更高效的版本! – qgloaf

回答

0

此行添加到您的循環結束:

print sum(high3) 

Python的sum內置將對可迭代的值進行求和。 heapq.nlargest方法返回一個迭代。

+0

謝謝,這個伎倆。 – qgloaf