dice probability

Вот есть пример как можно рассчитывать количество событий благоприятных для выпадения различных сумм для разных комбинаций игровых костей.

Что бы работало в Python3 надо iteritems заменить на items, а еще сделать «from functools import reduce»

Кстати можно и вероятности выводить, для этого надо создавать элементы не (i,1), а (i,1./n). Точно так же можно делать "кубики с неравномерным распределением вероятностей. На выходе будет словарь.
(смотря что вы считатете будет разный, пример для 3d6):
количество благоприятных событий:
{3: 1, 4: 3, 5: 6, 6: 10, 7: 15, 8: 21, 9: 25, 10: 27, 11: 27, 12: 25, 13: 21, 14: 15, 15: 10, 16: 6, 17: 3, 18: 1}
вероятности:
{3: 0.0046., 4: 0.0138, 5: 0.027, 6: 0.046296296296296294, 7: 0.0694, 8: 0.0972, 9: 0.1157407, 10: 0.125, 11: 0.125, 12: 0.1157407, 13: 0.0972, 14: 0.0694, 15: 0.0462962, 16: 0.0277, 17: 0.0138, 18: 0.004629}