试图从整数列表中删除两个最低值,不知道如何?

使用 discord.py 重写为 discord 设置 D20 游戏。为统计初始化设置“骰子”并想改变一些东西,而不是random.randint(1, 10) + random.randint(1, 10)我想“滚动”5D6,然后删除两个最低值


我刚刚开始研究如何做到这一点,我找不到任何看起来有用的 python 逻辑示例,我想我会问这个问题。


values = [val1, val2, val3, val4, val5, val6]

for x in values:

    dice = [d1, d2, d3, d4, d5]

    for y in dice:

        y = random.randint(1, 6)

到目前为止,这是我得到的地方,我需要弄清楚如何删除两个最低值,以便我可以继续该行并将其余三个值加dice在一起


实际:暂无


预期:dice将返回一个不小于 3,但不大于 18 的值,该值将应用于 的第一个值values,函数将遍历列表直到完成并values作为一个不小于 3 但不小于 6 的整数的列表返回大于 18。


守着星空守着你
浏览 174回答 3
3回答

温温酱

标准min函数返回列表中的最小数字。标准remove函数从列表中删除值为x的项目(不是第x个项目)。将这两者结合起来,您只需要这样:import randomdice = [random.randint(1, 6) for i in range(5)]print (dice)dice.remove(min(dice))dice.remove(min(dice))print (dice)

有只小跳蛙

另一种方法是使用heapq模块提供的工具。heapq 模块提供了堆,它的第一个元素总是最小的*数据结构。要获得您想要的结果,请堆化您的列表并弹出两次以删除两个最低值。>>> import heapq>>> import random>>> scores = [random.randint(1, 6) for _ in range(5)]>>> scores[6, 4, 3, 5, 2]>>> heapq.heapify(scores)>>> # First value is the smallest>>> scores[2, 4, 3, 5, 6]>>> heapq.heappop(scores)2>>> # First value is the smallest>>> scores[3, 4, 6, 5]>>> heapq.heappop(scores)3>>> scores[4, 5, 6]您还可以使用heapq.nlargest函数:>>> scores = [random.randint(1, 6) for _ in range(5)]>>> scores[3, 5, 1, 4, 5]>>> heapq.nlargest(3, scores)[5, 5, 4]*从技术上讲,这是一个最小 堆;也可能有max heaps,其中第一个元素是最大/最大的。

青春有我

内置的 min() 函数可用于隔离最小数。这样的事情就足以从列表中删除两个最低值deletions = 0while deletions <= 2:&nbsp; &nbsp; deletions +=1&nbsp; &nbsp; lowest_val = min(dice)&nbsp; &nbsp; dice.remove(lowest_val)
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Python