我该怎么做,但骰子数量可变?

How can I do this, but with a changeable number of dice?

如果骰子数量可变,我该怎么做?这意味着 all_dices 可以有任何长度。

 for first_dice_number in all_dices[0]:
    for second_dice_number in all_dices[1]:
        for thrird_dice_number in all_dices[2]:
            result = first_dice_number+second_dice_number+thrird_dice_number
            results.append(result)

为了澄清,all_dices 看起来像:

[[1,2,3,4,5,6],[1,2,3,4,5,6],[1,2,3,4,5,6]]

这很可能是一个菜鸟问题,但我就是想不通。

问题是我不想将 100 个 for 循环放在彼此内部。

您想要一组值的(笛卡尔)积。

from itertools import product

results = [sum(numbers) for numbers in product(*all_dices)]

例如:

>>> list(product([1,2,3], [1,2,3,4]))
[(1, 1), (1, 2), (1, 3), (1, 4), (2, 1), (2, 2), (2, 3), (2, 4), (3, 1), (3, 2), (3, 3), (3, 4)]  

递归就是为了那些东西,在一个函数里放一个循环,一直调用自己直到没有骰子

all_dices=[range(1,6),range(1,6),range(1,6),range(1,6)]

def flip(dicenum,totaluntilhere):
  if dicenum>len(all_dices)
    results.append(totaluntilhere+all_dices[dicenum]
  else
  for dice in all_dices[dicenum+1]:
    flip(dicenum+1,totaluntilhere+dice)

flip(-1,0)

我不太擅长python,但就是这样

itertools 解决方案可能是 Python 中最好的解决方案,但处理骰子的另一种方法是考虑枚举 n 骰子的可能掷数,从 0 到 6^ n -1 以 6 为基数(但使用 "digits" 1 到 6 而不是 0 到 5):

def decode(dice_code, num_dice):
    dice = []
    for _ in range(num_dice):
        dice_code,r = divmod(dice_code,6)
        dice.append(1+r)
    return dice

例如,decode(0,5)[1,1,1,1,1]decode(7775,5)[6,6,6,6,6]。只需循环 range(6**n),根据需要解码。