使用discord.py重写为Dord游戏设置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但不大于18的整数的列表。
答案 0 :(得分:0)
内置的min()函数可用于隔离最小数字。
将这样的两个最低值从列表中删除就足够了
deletions = 0
while deletions <= 2:
deletions +=1
lowest_val = min(dice)
dice.remove(lowest_val)
答案 1 :(得分:0)
标准min
函数返回列表中的最低数字。标准remove
函数从列表中删除值为 x 的项目(不是第 x 个项目)。将这两者结合起来,您需要的是:
import random
dice = [random.randint(1, 6) for i in range(5)]
print (dice)
dice.remove(min(dice))
dice.remove(min(dice))
print (dice)
答案 2 :(得分:0)
另一种方法是使用heapq模块提供的工具。 heapq模块提供 heaps 数据结构,其第一个元素始终是最小的 * 。
要获得所需的结果,请heapify列表并弹出两次以删除两个最低值。
>>> 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]
* 从技术上讲,这是一个 min heap ;也可能有 max heaps ,其中第一个元素是最大/最大。